powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
7 сообщений из 7, страница 1 из 1
Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
    #33356936
tormoz21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возникса необходимость написать web-интерфейс для управления Windows Media Server'ом, плейлист храниться в базе, ASP-страница для управления этим плейлистом вызывает написанное на C++ консольное приложение, которое подключается к БД и проводит необходимые манипуляции.
Все бы ничего, приложение работает, если кликнуть на него мышкой, зайдя в систему под правами администратора, но при вызове этого приложения через ASP-страницу возникает ошибка на CoInitialize, GetLastError дает 126 - "The specified module could not be found."....
Короче, подумал я - проблемы с доступом к COM-объекту, кстати, при вызове
CoCreateInstance(CLSID_WMSServer, NULL, CLSCTX_ALL, IID_IWMSServer, (void **)&pServer); ошибка №2 - "The system cannot find the file specified."
Тут началось шаманство, которое вначале заключалось в использовании разных ActiveX компонентов для вызова моего приложения, потом пытался использовать утилиты командной строки runas и wsremote для запуска под правами админа, потом я извращался с токенами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
HANDLE hToken = NULL;
HANDLE hThread = NULL;
BOOL bB;
bB=LogonUser("Administrator", NULL, "adminpass", LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hToken );
bB = RevertToSelf();
bB=ImpersonateLoggedOnUser(hToken);
hThread=GetCurrentThread();
bB = SetThreadToken(&hThread,hToken);
Но сие манипуляции не привели к эффекту.
Я даже пытался зациклить данную прогу вот так вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
if (recurs=="false")
	{
		HANDLE hToken = NULL;
		if ( LogonUser("Administrator", NULL, "adminpass", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken ) )
		{
			printf("Logon successfull\n");
			STARTUPINFO si = { 0 };
			PROCESS_INFORMATION pi = { 0 };
			si.cb = sizeof( STARTUPINFO );
			ImpersonateLoggedOnUser( hToken );
			CString sPath;
			sPath = "c:\\vc\\radio\\ver1\\Release\\wmsa.exe";
			if (CreateProcessAsUser( hToken, sPath, NULL, NULL, NULL, true, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, π ))
			{
				printf("Create successfull\n");
			} else
			{
				printf("Error occured, error code %d\n", GetLastError());
			}
		}
	}
Тут все нормально работает, точнее вышеприведенный код нормально работает - прога вызывает сама себя и добавляет параметр -recurs чтобы вышеприведенный код не выполнился заново.
Авторизация успешна, прога запускается - но опять та же ошибка.
Дальше я пробовал написать сервис на Delphi, который по таймеру каждые 10 сек. запускал это приложение, сервис я запустил под учетной записью Administrator, тоже без результатно.
Может, кто нибудь подскажет, в чем затык?
...
Рейтинг: 0 / 0
Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
    #33357031
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вопрос по CoInitialize , то надо вызвать эту библиотеку в начале основного потока и сразу после старта всех дополнительных если они есть.

______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
    #33357043
tormoz21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, я вообще не использую управление потоками в моей программе, как бы есть один основной поток - в нем и работаю.
А CoInitialize у меня вызывается после манипуляций с токенами...
...
Рейтинг: 0 / 0
Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
    #33358253
tormoz21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал полазить в настройках DCOM компонента, открыл к нему доступ для любого пользователя - без результатно.
Второй день уже пошел, как я с эти бьюсь...
...
Рейтинг: 0 / 0
Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
    #33358295
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может один процесс "под админом" запускает другой процесс - "не под админом"?
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
    #33358429
tormoz21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 , что ты имеешь ввиду?
Я пробовал, чтобы программа вызывала сама себя под правами админа, токен я получаю верно, значит авторизация успешна...
...
Рейтинг: 0 / 0
Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
    #33358492
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tormoz21 Petro123 , что ты имеешь ввиду?
Я пробовал, чтобы программа вызывала сама себя под правами админа, токен я получаю верно, значит авторизация успешна...
я не Сишник, и твой код для меня тарабарщина.
Поэтому IMHO проблема у тебя теоретически может быть в связке COM-права доступа.
А в COM можно запустить процесс с правами какими угодно, особенно если он как внешний процесс используется.
Короче - обрезай всё лишнее пока не заработает если уж 3 дня бьёшся .
Удачи!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблемы с CoInitialize, CoCreateInstance и вообще с правами доступа к объектам.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]