系列文章目录
终端服务命名空间中内核对象的测试程序
TerminalService程序需要用登录不同的windows账号同时运行。才能看出效果
建议测试流程
1,先登录windows账号A,运行两个本程序实例
2,保持上述两个实例人在运行中,在登陆windows账号B,在运行两个实例
文章目录
- 系列文章目录
- TerminalService.cpp
TerminalService.cpp
/**/
#include <stdio.h>
#include <Windows.h>int main()
{//先显示进程ID号和所在的会话IDDWORD processID = GetCurrentProcessId();DWORD sessionID;if (ProcessIdToSessionId(processID,&sessionID)){wprintf(TEXT("Process '%u' runs in Terminal Services session '%u'\n"),processID,sessionID);//测试,尝试在全局命名空间中创建内核对象,实验在不同账号下同时进行改程序时,//第2个启动的程序会提示内核对象已存在的错误HANDLE hGlobalMutex = CreateMutex(NULL, FALSE, TEXT("Global\\MyMutex"));if (hGlobalMutex == NULL||ERROR_ALREADY_EXISTS == GetLastError()){printf("错误提示:全局命名空间已经存在命名为“MyMutex”的内核对象!\n");}else{printf("在全局命名空间中成功创建名称为“MyMutex”内核对象!\n");}//在全局命名空间中创建内核对象,在不同账户下同时运行该程序, 可以创建同名的内核对象HANDLE hLocalMutex = CreateMutex(NULL, FALSE, TEXT("Local\\MyMutex"));if (hLocalMutex == NULL || ERROR_ALREADY_EXISTS == GetLastError()){printf("错误提示:会话(SessionID=%u)命名空间中已经存在名称为“MyMutex”同名内核对象!\n",sessionID);}else{printf("在会话(SessionID=%u)的命名空间中成功创建名称为“MyMutex”的内核对象!\n");}system("pause");CloseHandle(hGlobalMutex);CloseHandle(hLocalMutex);}else{wprintf(TEXT("Unable to get Terminal Service session ID for process:'%u'\n"), processID);}system("pause");return 0;
}