none
Проблемы с CreateProcessAsUser или с "перевоплощением" RRS feed

  • Общие обсуждения

  • У меня задача - из-под сервиса, работающего в системной учетной записи надо запустить программу под учетной записью пользователя. Эта программа должна посмотреть список устройств "GetLogicalDriveStrings()", это список она пишет в лог-файл. Если я программу запускаю из эксплорера или из назначенных заданий, то она показывает как локальные диски, так и подключенные сетевые. Если программа запускается из-под сервиса, то показываются только локальные диски. При этом GetUserNameEx показывает, что запустилась программа под правильным логином. Код запуска программы в сервисе:

            HANDLE hToken;
    	HANDLE  hTokenUser=NULL;
    	TOKEN_PRIVILEGES tkp;
    	
    	DWORD TokenAccess=TOKEN_ALL_ACCESS; 
    	OpenProcessToken(GetCurrentProcess(), TokenAccess, &hToken);
    	LookupPrivilegeValue(NULL, SE_TCB_NAME, &tkp.Privileges[0].Luid);
    	tkp.PrivilegeCount = 1;
    	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    	AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    	CloseHandle(hToken);
    
    	DWORD dwLogonType= LOGON32_LOGON_INTERACTIVE;
    	DWORD dwLogonProvider=LOGON32_PROVIDER_DEFAULT;
    
    	if (LogonUser(UserName, ".", Password, dwLogonType, dwLogonProvider, &hTokenUser))
    	{
    		if (!ImpersonateLoggedOnUser(hTokenUser))
    		{
    			//Обработка ошибки
    		}
    		else
    		{
    				...
    				CreateProcessAsUser(hTokenUser, ...);
                                    RevertToSelf();
    		}
    	}

    30 марта 2012 г. 9:17

Все ответы

  • Здравствуйте.

    А в свойствах службы разрешено взаимодействие с рабочим столом? Попробуйте включить эту опцию. И кстати там же (в свойствах службы на 2ой вкладке) можете попробовать запустить службу от имени конкретного пользователя и будет ли она верно работать и будут ли отображаться сетевые диски.

    Надеюсь это вам как-то поможет.


    Для связи [mail]

    30 марта 2012 г. 11:34
  • Забыл сказать:  службе разрешено взаимодействовать с рабочим столом. Запускать от имени конкретного пользователя нельзя... 
    30 марта 2012 г. 11:37