win2000提供的函数 ProcessIdToSessionId 可以将进程ID转换为会话ID。
会话ID为0表示该进程在服务器上运行,非零则表示在终端客户上运行。
每一个终端客户对应一个唯一的会话ID号。
不知为何,在我的VC6+sp4上找不到这个函数,幸好可以直接从动态库中执行这个函数。该函数在kernel32.dll中定义。下面是一个例子。
typedef BOOL ( WINAPI *PtoS)( DWORD dwProcessId, DWORD *pSessionId );
BOOL ProcessIdToSessionId( DWORD dwProcessId, DWORD *pSessionId )
{
HMODULE hm = LoadLibrary( "c:\\winnt\\system32\\kernel32.dll" );
ASSERT(hm);
PtoS func = (PtoS)GetProcAddress( hm, "ProcessIdToSessionId" );
BOOL Result = func(dwProcessId,pSessionId);
FreeLibrary(hm);
return Result;
}void main()
{
DWORD ProcessId, SessionId;
ProcessId = GetCurrentProcessId();
BOOL Res = ProcessIdToSessionId( ProcessId, &SessionId );
printf( "会话 ID = %d\n", SessionId );
}
会话ID为0表示该进程在服务器上运行,非零则表示在终端客户上运行。
每一个终端客户对应一个唯一的会话ID号。
不知为何,在我的VC6+sp4上找不到这个函数,幸好可以直接从动态库中执行这个函数。该函数在kernel32.dll中定义。下面是一个例子。
typedef BOOL ( WINAPI *PtoS)( DWORD dwProcessId, DWORD *pSessionId );
BOOL ProcessIdToSessionId( DWORD dwProcessId, DWORD *pSessionId )
{
HMODULE hm = LoadLibrary( "c:\\winnt\\system32\\kernel32.dll" );
ASSERT(hm);
PtoS func = (PtoS)GetProcAddress( hm, "ProcessIdToSessionId" );
BOOL Result = func(dwProcessId,pSessionId);
FreeLibrary(hm);
return Result;
}void main()
{
DWORD ProcessId, SessionId;
ProcessId = GetCurrentProcessId();
BOOL Res = ProcessIdToSessionId( ProcessId, &SessionId );
printf( "会话 ID = %d\n", SessionId );
}
已经搞定。安装最新的SDK即可调用此函数ProcessIdToSessionId。马上给分。