如何在Windows下以内核模式打开命名互斥锁?

时间:2013-08-12 11:08:54

标签: windows kernel

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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);
}