windows事件跨session访问

事件名前面加“Global\”的方法,只能实现跨session检测事件是否存在,但执行打开事件OpenEvent等操作会返回Access Denied的错误。

解决方法是创建一个没有任何权限的事件(A NULL DACL):

PSECURITY_DESCRIPTOR psd = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
InitializeSecurityDescriptor(psd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(psd, TRUE, NULL, FALSE);

SECURITY_ATTRIBUTES sa = {0};
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = psd;
sa.bInheritHandle = FALSE;


HANDLE hEvent = CreateEvent(&sa, TRUE, FALSE, TEXT("Global\\Test"));

LocalFree(psd);

你可能感兴趣的:(#,Windows核心编程)