前提是我们有两个线程A和B; A是用户模式线程,B是内核模式线程。
如我们所知,如果A调用CreateEvent
来创建命名事件,那么B可以在内核模式下打开命名事件。
但是,如果A调用CreateMutex
来创建命名互斥锁,那么B如何在内核模式下打开命名的互斥锁?
为什么在内核模式下没有ZwOpenMutant
类似于ZwOpenEvent
?
此外,用户模式互斥锁和内核互斥锁之间有什么区别?
答案 0 :(得分:0)
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);
}