OpenMutex中0x10000000对应的访问权限是什么?
关于OpenMutex中dwDesiredAccess=0x10000000的权限疑问
我在一段代码中看到如下调用:
HANDLE handle = OpenMutex(0x10000000, false, L"NameOfMutexObject");
该调用返回了有效的句柄(返回值不为NULL),看起来执行成功。但我查阅同步对象安全与访问权限相关文档时,找不到0x10000000这个位掩码对应的权限说明。
因此我的问题是:当dwDesiredAccess = 0x10000000时,会授予哪些访问权限?
我还编写了一个最小示例进行测试:
void testing_mutex() { HANDLE hMutex; hMutex = CreateMutex( NULL, // 默认安全描述符 FALSE, // 互斥量不被当前进程拥有 TEXT("NameOfMutexObject") ); HANDLE mhandle = OpenMutex(0x10000000, false, L"NameOfMutexObject"); if (mhandle == NULL || mhandle == 0) { printf("OpenMutex error: %d\n", GetLastError()); return; } printf("MY MUTEX HANDLE: %d\n", mhandle); } int main(void) { testing_mutex(); }
0x10000000对应的是GENERIC_ALL权限,这是Windows API中的通用权限掩码,代表获取目标对象的所有可能访问权限。
对于互斥量对象而言,GENERIC_ALL会映射到该对象的全部权限集合,包括但不限于:
SYNCHRONIZE权限:允许进程等待或释放互斥量MUTEX_ALL_ACCESS包含的所有特定权限:如修改对象权限、查询对象信息等
你测试代码中调用成功,是因为CreateMutex使用默认安全描述符时,当前进程本身就拥有对该互斥量的完全访问权限,因此使用GENERIC_ALL掩码可以顺利打开并获得具备全部权限的句柄。
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

