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 );
}