假设我们有两个线程 A 和 B;A 是用户模式线程,B 是内核模式线程。
众所周知,如果 A 调用CreateEvent
创建命名事件,那么 B 可以在内核模式下打开命名事件。
但是,如果A调用CreateMutex
创建命名互斥体,那么B如何在内核模式下打开命名互斥体呢?
为什么没有ZwOpenMutant
类似于ZwOpenEvent
内核模式?
此外,用户模式互斥锁和内核互斥锁有什么区别?
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);
}