1

假设我们有两个线程 A 和 B;A 是用户模式线程,B 是内核模式线程。

众所周知,如果 A 调用CreateEvent创建命名事件,那么 B 可以在内核模式下打开命名事件。

但是,如果A调用CreateMutex创建命名互斥体,那么B如何在内核模式下打开命名互斥体呢?

为什么没有ZwOpenMutant类似于ZwOpenEvent内核模式?

此外,用户模式互斥锁和内核互斥锁有什么区别?

4

1 回答 1

-1

Ntoskrnl.exe 不导出ZwOpenMutant 。

您可以使用NtOpenMutant对应函数。

UNICODE_STRING Us;

NTSTATUS NtStatus;

OBJECT_ATTRIBUTES Oa;

HANDLE h = NULL;

RtlInitUnicodeString(&Us, L"COOL_MUTEX_HAHA");

InitializeObjectAttributes(&Oa,&Us,0,NULL,NULL);

Nttatus = NtCreateMutant(&h, MUTEX_ALL_ACCESS, &Oa, 0);

if(status == STATUS_OBJECT_NAME_COLLISION)
{
   NtStatus = NtOpenMutant(&h, MUTEX_ALL_ACCESS, &Oa);
}
于 2013-08-12T14:35:47.263 回答