NtCreateEvent返回ERROR_BAD_PATHNAME(161)

时间:2018-01-15 04:40:58

标签: winapi visual-c++

背景

我正在尝试设置一个具有给定名称的事件,以确定该应用程序是否已排队某个给定任务。

我正在使用NtCreateEventNtOpenEvent,因此我为每个编写了2个包装函数。

NtCreateEvent

HANDLE CreateEvent(PCHAR EventName) {
    UNICODE_STRING uString;
    Rtl::InitUnicodeString(&uString, 
        Str::ConvertAnsiToUnicode(EventName));

    OBJECT_ATTRIBUTES ObjAttributes;
    InitializeObjectAttributes(&ObjAttributes,
        &uString, 0, NULL, 0);

    HANDLE hEvent;
    NTSTATUS Status = NtCreateEvent(&hEvent, EVENT_MODIFY_STATE, &ObjAttributes, 1, 0);
    if (NT_SUCCESS(Status)) {
        if (Status != STATUS_OBJECT_NAME_EXISTS) {
            Nt::SetLastError(ERROR_SUCCESS);
        } else {
            Nt::SetLastError(ERROR_ALREADY_EXISTS);
        }
    }
    return hEvent;
}

NtOpenEvent

BOOL OpenEvent(PCHAR EventName) {
    UNICODE_STRING uString;
    Rtl::InitUnicodeString(&uString, 
        Str::ConvertAnsiToUnicode(EventName));

    OBJECT_ATTRIBUTES ObjAttributes;
    InitializeObjectAttributes(&ObjAttributes,
        &uString, 0, NULL, 0);

    HANDLE hEvent;
    if (NT_SUCCESS(NtOpenEvent(&hEvent, EVENT_QUERY_STATE, &ObjAttributes))) {
        return TRUE;
    }
    return FALSE;
}

备注

我的检查是按照这些方式进行的

if (!Nt::OpenEvent("Global\\taskname")) {
    // do something

    Nt::CreateEvent("Global\\taskname");
} else {
    // work with the task
}

问题

我做错了什么? EventName如何拥有BAD_PATHNAME

0 个答案:

没有答案