通过完全限定的路径打开命名的互斥量
Opening a named mutex by fully a qualified path
是否可以使用 OpenMutex 通过其完整路径限定打开或查询命名的互斥量?例如:
HANDLE hHandleMutex = OpenMutex(READ_CONTROL, FALSE,
"\Sessions\1\BaseNamedObjects\SmartScreen_AppRepSettings_Mutex");
但是,函数 returns NULL 失败并出现错误 161(ERROR_BAD_PATHNAME
:指定的路径无效)。是的,文档对 \Global
和 \Local
前缀说得很好,但没有说明这些完整的对象名称。但是,MSDN 并未声明 [=25=] everything!
我知道我们可以使用 NtQuerySystemInformation
、NtQueryObject
未记录的 API 查询相同的内容。但这涉及到打开过程,复制令牌等。我可以很好地使用这些API,但想要一个简单的解决方案。
让我们假设该进程是 运行 作为 SYSTEM 帐户,因此错误 5(访问被拒绝)不会成为问题。如果这是问题所在,我可以处理。
您使用的路径错误。应该是:
"Session\1\SmartScreen_AppRepSettings_Mutex"
documentation表示Session\
前缀是"reserved for system"使用。买者自负。
是否可以使用 OpenMutex 通过其完整路径限定打开或查询命名的互斥量?例如:
HANDLE hHandleMutex = OpenMutex(READ_CONTROL, FALSE,
"\Sessions\1\BaseNamedObjects\SmartScreen_AppRepSettings_Mutex");
但是,函数 returns NULL 失败并出现错误 161(ERROR_BAD_PATHNAME
:指定的路径无效)。是的,文档对 \Global
和 \Local
前缀说得很好,但没有说明这些完整的对象名称。但是,MSDN 并未声明 [=25=] everything!
我知道我们可以使用 NtQuerySystemInformation
、NtQueryObject
未记录的 API 查询相同的内容。但这涉及到打开过程,复制令牌等。我可以很好地使用这些API,但想要一个简单的解决方案。
让我们假设该进程是 运行 作为 SYSTEM 帐户,因此错误 5(访问被拒绝)不会成为问题。如果这是问题所在,我可以处理。
您使用的路径错误。应该是:
"Session\1\SmartScreen_AppRepSettings_Mutex"
documentation表示Session\
前缀是"reserved for system"使用。买者自负。