使用WTSGetActiveConsoleSessionId()的VISTA服務與桌面互動
阿新 • • 發佈:2019-02-17
摘自:http://blog.csdn.net/felixz/archive/2006/10/23/1346380.aspx
作者:
Windows Vista 對快速使用者切換,使用者賬戶許可權,以及服務程式所執行的會話空間都作了很大的改動,致使一些原本可以工作的程式不再能夠正常工作了,我們不得不進行一些改進以跟上 Vista 的步伐。
HANDLEhTokenThis = NULL; HANDLEhTokenDup = NULL; HANDLEhThisProcess = GetCurrentProcess(); OpenProcessToken(hThisProcess, TOKEN_ALL_ACCESS, &hTokenThis); DuplicateTokenEx(hTokenThis, MAXIMUM_ALLOWED,NULL, SecurityIdentification, TokenPrimary, &hTokenDup); DWORDdwSessionId = WTSGetActiveConsoleSessionId(); SetTokenInformation(hTokenDup, TokenSessionId, &dwSessionId, sizeof(DWORD)); STARTUPINFOsi; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); si.lpDesktop = "WinSta0//Default"; LPVOIDpEnv = NULL; DWORDdwCreationFlag = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE; CreateEnvironmentBlock(&pEnv, hTokenDup, FALSE); CreateProcessAsUser( hTokenDup, NULL, (char *)"notepad", NULL, NULL, FALSE, dwCreationFlag, pEnv, NULL, &si, &pi); |