WINDOWS核心编程-----3章,内核对象,是现在不同账号下测试

系列文章目录

终端服务命名空间中内核对象的测试程序
TerminalService程序需要用登录不同的windows账号同时运行。才能看出效果
建议测试流程
1,先登录windows账号A,运行两个本程序实例
2,保持上述两个实例人在运行中,在登陆windows账号B,在运行两个实例


TerminalService.cpp

/*

*/
#include	<stdio.h>
#include	<Windows.h>

int main()
{
	//先显示进程ID号和所在的会话ID
	DWORD 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;
}

在这里插入图片描述

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值