1

2 つのスレッド A と B があるとします。A はユーザー モード スレッド、B はカーネル モード スレッドです。

ご存知のように、A がCreateEvent名前付きイベントを作成するために呼び出した場合、B は名前付きイベントをカーネル モードで開くことができます。

ただし、A がCreateMutex名前付きミューテックスを作成するために呼び出した場合、B はどのようにして名前付きミューテックスをカーネル モードで開くのでしょうか?

カーネルモードZwOpenMutantに同類がないのはなぜですか?ZwOpenEvent

さらに、ユーザー モード ミューテックスとカーネル ミューテックスの違いは何ですか?

4

1 に答える 1

-1

ZwOpenMutantは Ntoskrnl.exe によってエクスポートされません。

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 に答える