⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ioevent.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
字号:
/*
 * PROJECT:         ReactOS Kernel
 * LICENSE:         GPL - See COPYING in the top level directory
 * FILE:            ntoskrnl/io/event.c
 * PURPOSE:         I/O Wrappers for the Executive Event Functions
 * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
 *                  Eric Kohl
 */

/* INCLUDES *****************************************************************/

#include <ntoskrnl.h>
#include <internal/debug.h>

/* PRIVATE FUNCTIONS *********************************************************/

PKEVENT
NTAPI
IopCreateEvent(IN PUNICODE_STRING EventName,
               IN PHANDLE EventHandle,
               IN EVENT_TYPE Type)
{
    OBJECT_ATTRIBUTES ObjectAttributes;
    PKEVENT Event;
    HANDLE Handle;
    NTSTATUS Status;
    PAGED_CODE();

    /* Initialize the object attributes */
    InitializeObjectAttributes(&ObjectAttributes,
                               EventName,
                               OBJ_OPENIF,
                               NULL,
                               NULL);

    /* Create the event */
    Status = ZwCreateEvent(&Handle,
                           EVENT_ALL_ACCESS,
                           &ObjectAttributes,
                           Type,
                           TRUE);
    if (!NT_SUCCESS(Status)) return NULL;

    /* Get a handle to it */
    ObReferenceObjectByHandle(Handle,
                              0,
                              ExEventObjectType,
                              KernelMode,
                              (PVOID*)&Event,
                              NULL);

    /* Dereference the extra count, and return the handle */
    ObDereferenceObject(Event);
    *EventHandle = Handle;
    return Event;
}

/* PUBLIC FUNCTIONS **********************************************************/

/*
 * @implemented
 */
PKEVENT
NTAPI
IoCreateNotificationEvent(IN PUNICODE_STRING EventName,
                          IN PHANDLE EventHandle)
{
    /* Call the internal API */
    return IopCreateEvent(EventName, EventHandle, NotificationEvent);
}

/*
 * @implemented
 */
PKEVENT
NTAPI
IoCreateSynchronizationEvent(IN PUNICODE_STRING EventName,
                             IN PHANDLE EventHandle)
{
    /* Call the internal API */
    return IopCreateEvent(EventName, EventHandle, SynchronizationEvent);
}

/* EOF */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -