17 #define NUM_KEY_HASH_BUCKETS 23 58 ObjectTypeInitializer.
Length =
sizeof(ObjectTypeInitializer);
66 &ObjectTypeInitializer,
113 ExpReleaseOrWaitForKeyedEvent(
122 PLIST_ENTRY ListEntry, WaitListHead1, WaitListHead2;
125 PVOID PreviousKeyedWaitValue;
131 HashIndex = (
ULONG_PTR)KeyedWaitValue >> 5;
143 WaitListHead1 = &KeyedEvent->HashTable[HashIndex].WaitListHead;
144 WaitListHead2 = &KeyedEvent->HashTable[HashIndex].ReleaseListHead;
148 WaitListHead1 = &KeyedEvent->HashTable[HashIndex].ReleaseListHead;
149 WaitListHead2 = &KeyedEvent->HashTable[HashIndex].WaitListHead;
153 ListEntry = WaitListHead1->
Flink;
154 while (ListEntry != WaitListHead1)
161 ListEntry = ListEntry->
Flink;
241 ExpWaitForKeyedEvent(
248 return ExpReleaseOrWaitForKeyedEvent(KeyedEvent,
258 ExpReleaseKeyedEvent(
265 return ExpReleaseOrWaitForKeyedEvent(KeyedEvent,
302 (
PVOID*)&KeyedEvent);
328 *OutHandle = KeyedEventHandle;
342 *OutHandle = KeyedEventHandle;
380 *OutHandle = KeyedEventHandle;
394 *OutHandle = KeyedEventHandle;
KSEMAPHORE KeyedWaitSemaphore
NTSTATUS NTAPI ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN OUT PVOID ParseContext, OUT PHANDLE Handle)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
NTSYSAPI NTSTATUS WINAPI NtWaitForKeyedEvent(HANDLE, const void *, BOOLEAN, const LARGE_INTEGER *)
_In_ PVOID _In_ BOOLEAN Alertable
FORCEINLINE VOID ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
#define NUM_KEY_HASH_BUCKETS
#define STANDARD_RIGHTS_WRITE
#define PsGetCurrentThread()
LIST_ENTRY KeyedWaitChain
#define STATUS_INVALID_PARAMETER
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define KeGetPreviousMode()
struct _EX_KEYED_EVENT EX_KEYED_EVENT
#define InsertTailList(ListHead, Entry)
#define STANDARD_RIGHTS_EXECUTE
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
LIST_ENTRY ReleaseListHead
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
NTSYSAPI NTSTATUS WINAPI NtCreateKeyedEvent(HANDLE *, ACCESS_MASK, const OBJECT_ATTRIBUTES *, ULONG)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSYSAPI NTSTATUS WINAPI NtReleaseKeyedEvent(HANDLE, const void *, BOOLEAN, const LARGE_INTEGER *)
#define PsGetCurrentProcess
FORCEINLINE VOID ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
#define KEYEDEVENT_ALL_ACCESS
#define ExInitializePushLock
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
struct _LIST_ENTRY * Flink
_In_ KPROCESSOR_MODE PreviousMode
BOOLEAN NTAPI ExpInitializeKeyedEventImplementation(VOID)
_Must_inspect_result_ _In_ ULONG Flags
VOID NTAPI KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit)
#define NT_SUCCESS(StatCode)
#define EXCEPTION_EXECUTE_HANDLER
POBJECT_TYPE ExKeyedEventObjectType
#define ObDereferenceObject
_In_ ACCESS_MASK AccessMask
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
#define STATUS_INVALID_PARAMETER_1
#define KeEnterCriticalRegion()
_IRQL_requires_max_(APC_LEVEL)
#define STANDARD_RIGHTS_READ
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
#define KeLeaveCriticalRegion()
LONG NTAPI ExSystemExceptionFilter(VOID)
GENERIC_MAPPING GenericMapping
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
LONG NTAPI KeReleaseSemaphore(IN PKSEMAPHORE Semaphore, IN KPRIORITY Increment, IN LONG Adjustment, IN BOOLEAN Wait)
#define InitializeListHead(ListHead)
static GENERIC_MAPPING ExpKeyedEventMapping
struct _EX_KEYED_EVENT * PEX_KEYED_EVENT
VOID NTAPI ExpInitializeKeyedEvent(_Out_ PEX_KEYED_EVENT KeyedEvent)
#define InitializeObjectAttributes(p, n, a, r, s)
#define _SEH2_EXCEPT(...)
PEX_KEYED_EVENT ExpCritSecOutOfMemoryEvent
#define _SEH2_GetExceptionCode()
#define _SEH2_YIELD(__stmt)
NTSYSAPI NTSTATUS WINAPI NtOpenKeyedEvent(HANDLE *, ACCESS_MASK, const OBJECT_ATTRIBUTES *)
#define RTL_CONSTANT_STRING(s)
_Out_ PHANDLE EventHandle