16 #if defined (ALLOC_PRAGMA) 17 #pragma alloc_text(INIT, ExpInitializeSemaphoreImplementation) 48 DPRINT(
"Creating Semaphore Object Type\n");
51 RtlZeroMemory(&ObjectTypeInitializer,
sizeof(ObjectTypeInitializer));
53 ObjectTypeInitializer.
Length =
sizeof(ObjectTypeInitializer);
100 (InitialCount < 0) ||
103 DPRINT(
"Invalid Count Data!\n");
141 *SemaphoreHandle = hSemaphore;
203 *SemaphoreHandle = hSemaphore;
225 IN ULONG SemaphoreInformationLength,
238 SemaphoreInformation,
239 SemaphoreInformationLength,
246 DPRINT(
"NtQuerySemaphore() failed, Status: 0x%x\n",
Status);
321 if (ReleaseCount <= 0)
323 DPRINT(
"Invalid Release Count\n");
348 if (PreviousCount) *PreviousCount = PrevCount;
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
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
#define STANDARD_RIGHTS_WRITE
#define ProbeForWriteLong(Ptr)
#define STATUS_INVALID_PARAMETER
BOOLEAN INIT_FUNCTION NTAPI ExpInitializeSemaphoreImplementation(VOID)
#define SEMAPHORE_MODIFY_STATE
KPROCESSOR_MODE NTAPI ExGetPreviousMode(VOID)
VOID NTAPI ObDereferenceObject(IN PVOID Object)
#define SEMAPHORE_QUERY_STATE
#define STANDARD_RIGHTS_EXECUTE
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)
#define EXCEPTION_EXECUTE_HANDLER
static const INFORMATION_CLASS_INFO ExSemaphoreInfoClass[]
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)
_In_ KPROCESSOR_MODE PreviousMode
GENERIC_MAPPING ExSemaphoreMapping
VOID NTAPI KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit)
#define _SEH2_YIELD(STMT_)
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI NtReleaseSemaphore(IN HANDLE SemaphoreHandle, IN LONG ReleaseCount, OUT PLONG PreviousCount OPTIONAL)
#define ProbeForWriteHandle(Ptr)
NTSTATUS NTAPI NtOpenSemaphore(OUT PHANDLE SemaphoreHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
enum _SEMAPHORE_INFORMATION_CLASS SEMAPHORE_INFORMATION_CLASS
static __inline NTSTATUS DefaultQueryInfoBufferCheck(ULONG Class, const INFORMATION_CLASS_INFO *ClassList, ULONG ClassListEntries, PVOID Buffer, ULONG BufferLength, PULONG ReturnLength, PULONG_PTR ReturnLengthPtr, KPROCESSOR_MODE PreviousMode)
struct _KSEMAPHORE KSEMAPHORE
#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)
LONG NTAPI ExSystemExceptionFilter(VOID)
GENERIC_MAPPING GenericMapping
LONG NTAPI KeReleaseSemaphore(IN PKSEMAPHORE Semaphore, IN KPRIORITY Increment, IN LONG Adjustment, IN BOOLEAN Wait)
NTSTATUS NTAPI NtQuerySemaphore(IN HANDLE SemaphoreHandle, IN SEMAPHORE_INFORMATION_CLASS SemaphoreInformationClass, OUT PVOID SemaphoreInformation, IN ULONG SemaphoreInformationLength, OUT PULONG ReturnLength OPTIONAL)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK DesiredAccess
LONG NTAPI KeReadStateSemaphore(IN PKSEMAPHORE Semaphore)
*Count PHARDWARE_COUNTER _In_ ULONG MaximumCount
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionCode()
struct _SEMAPHORE_BASIC_INFORMATION * PSEMAPHORE_BASIC_INFORMATION
#define SEMAPHORE_ALL_ACCESS
ULONG DefaultNonPagedPoolCharge
NTSTATUS NTAPI NtCreateSemaphore(OUT PHANDLE SemaphoreHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN LONG InitialCount, IN LONG MaximumCount)
POBJECT_TYPE ExSemaphoreObjectType
PULONG MinorVersion OPTIONAL