在多用户环境下,可命名内核对象,如CreateMutex,CreateHandle,CreateFileMapping等共享方法需注意2点:
1. 建立everyone可访问的安全描述符,而不能直接使用NULL
2. 名字对象使用Global\前缀
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd,TRUE,NULL,FALSE);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = &sd;
m_hMutex = CreateFileMapping((HANDLE) 0xFFFFFFFF,
&sa, PAGE_READWRITE, 0, 400 * 1024 * 1024,
__TEXT("Global\\MMFSharedData"));