/*此代碼用于獲取通過終端登錄的當前用戶winlogon進程pid
在開了終端服務的機器上運行沒問題,沒有開終端服務的得不到pid,自己修改吧
Author:009
Email:baicker.009(a)gmail.com
Web:http://www.tkk7.com/baicker
Date:20070720
*/
#include <stdio.h>#include <windows.h>#include <wtsapi32.h>#pragma comment(lib, "wtsapi32.lib") void main()
{
DWORD ProcessId, SessionId;
BOOL
Res=0; DWORD winlogonPid = 0;
PWTS_PROCESS_INFO pProcessInfo=NULL; DWORD ProcessCount = 0; DWORD CurrentProcess = 0; ProcessId = GetCurrentProcessId();
Res = ProcessIdToSessionId( ProcessId, &SessionId );
//printf("Now SessionID = %d\n", SessionId );
if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pProcessInfo, &ProcessCount))
{
// dump each process description for (CurrentProcess = 0; CurrentProcess < ProcessCount; CurrentProcess++)
{
if( strcmp(pProcessInfo[CurrentProcess].pProcessName, "winlogon.exe") == 0 && pProcessInfo[CurrentProcess].SessionId == SessionId )
{
winlogonPid = pProcessInfo[CurrentProcess].ProcessId; break;
}
}
WTSFreeMemory(pProcessInfo);
}
else{ printf("WTSEnumerateProcesses() failed\n"); //沒有終端服務就到這里了
} printf("Current winlogon's pid is %d\n",winlogonPid);
}