11 #define OBP_LOCK_STATE_PRE_ACQUISITION_EXCLUSIVE 0xAAAA1234 12 #define OBP_LOCK_STATE_PRE_ACQUISITION_SHARED 0xBBBB1234 13 #define OBP_LOCK_STATE_POST_ACQUISITION_EXCLUSIVE 0xCCCC1234 14 #define OBP_LOCK_STATE_POST_ACQUISITION_SHARED 0xDDDD1234 15 #define OBP_LOCK_STATE_RELEASED 0xEEEE1234 16 #define OBP_LOCK_STATE_INITIALIZED 0xFFFF1234 18 #define OBP_NAME_LOOKASIDE_MAX_SIZE 248 43 return (((
ULONG_PTR)ObjectHeader) >> 8) & 3;
105 ULONG NewValue, References;
109 if (!ObjectNameInfo)
return NULL;
116 if (!References)
return NULL;
123 if (NewValue == References)
break;
126 References = NewValue;
138 return ObjectNameInfo;
148 if (!HeaderNameInfo)
return;
154 if (HeaderNameInfo->Name.Buffer)
158 RtlInitEmptyUnicodeString(&HeaderNameInfo->Name,
NULL, 0);
166 HeaderNameInfo->Directory =
NULL;
367 if (ObjectCreateInfo->SecurityDescriptor)
371 ObjectCreateInfo->ProbeMode,
373 ObjectCreateInfo->SecurityDescriptor =
NULL;
389 List->L.TotalAllocates++;
394 List->L.AllocateMisses++;
398 List->L.TotalAllocates++;
403 List->L.AllocateMisses++;
424 List->L.TotalFrees++;
430 List->L.FreeMisses++;
434 List->L.TotalFrees++;
440 List->L.FreeMisses++;
487 DbgPrint(
"OB: ObjectType: %wZ Procedure: %s Object: %p\n",
489 DbgPrint(
" Returned at %x IRQL, but was called at %x IRQL\n",
#define KeGetCurrentIrql()
FORCEINLINE VOID ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ObpAcquireObjectLock(IN POBJECT_HEADER ObjectHeader)
FORCEINLINE VOID ObpFreeCapturedAttributes(IN PVOID Buffer, IN PP_NPAGED_LOOKASIDE_NUMBER Type)
#define OBJ_VALID_ATTRIBUTES
IN BOOLEAN OUT PSTR Buffer
#define UNREFERENCED_PARAMETER(P)
FORCEINLINE VOID ObpReleaseObjectLock(IN POBJECT_HEADER ObjectHeader)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
FORCEINLINE VOID ObpReleaseObjectCreateInformation(IN POBJECT_CREATE_INFORMATION ObjectCreateInfo)
#define InterlockedCompareExchange
#define OBJECT_HEADER_TO_NAME_INFO(h)
#define OBJ_KERNEL_HANDLE
FORCEINLINE VOID ObpReleaseDirectoryLock(IN POBJECT_DIRECTORY Directory, IN POBP_LOOKUP_CONTEXT Context)
Unlocks a previously shared or exclusively locked directory.
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST * PNPAGED_LOOKASIDE_LIST
#define OBJECT_TO_OBJECT_HEADER(o)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
FORCEINLINE PVOID ObpAllocateObjectCreateInfoBuffer(IN PP_NPAGED_LOOKASIDE_NUMBER Type)
PP_LOOKASIDE_LIST PPLookasideList[16]
#define OBP_LOCK_STATE_RELEASED
VOID NTAPI DbgBreakPoint(VOID)
VOID NTAPI ObDereferenceObjectDeferDelete(IN PVOID Object)
#define OBP_LOCK_STATE_INITIALIZED
FORCEINLINE VOID ObpAcquireDirectoryLockShared(IN POBJECT_DIRECTORY Directory, IN POBP_LOOKUP_CONTEXT Context)
Locks a directory for shared access. Used for reading members of the directory object.
FORCEINLINE VOID ObpCalloutStart(IN PKIRQL CalloutIrql)
FORCEINLINE VOID ObpFreeObjectCreateInformation(IN POBJECT_CREATE_INFORMATION ObjectCreateInfo)
#define OBJ_VALID_KERNEL_ATTRIBUTES
_In_ KPROCESSOR_MODE PreviousMode
#define OBP_LOCK_STATE_POST_ACQUISITION_SHARED
FORCEINLINE ULONG ObpSelectObjectLockSlot(IN POBJECT_HEADER ObjectHeader)
FORCEINLINE POBJECT_HEADER_NAME_INFO ObpReferenceNameInfo(IN POBJECT_HEADER ObjectHeader)
#define ObDereferenceObject
FORCEINLINE VOID ObpAcquireDirectoryLockExclusive(IN POBJECT_DIRECTORY Directory, IN POBP_LOOKUP_CONTEXT Context)
Locks a directory for exclusive access. Used for writing/reading members of the directory object.
FORCEINLINE VOID ObpEnterObjectTypeMutex(IN POBJECT_TYPE ObjectType)
FORCEINLINE VOID ObpAcquireObjectLockShared(IN POBJECT_HEADER ObjectHeader)
FORCEINLINE USHORT ExQueryDepthSList(_In_ PSLIST_HEADER SListHead)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
struct _GENERAL_LOOKASIDE * L
FORCEINLINE VOID ObpLeaveObjectTypeMutex(IN POBJECT_TYPE ObjectType)
FORCEINLINE VOID ObpCalloutEnd(IN KIRQL CalloutIrql, IN PCHAR Procedure, IN POBJECT_TYPE ObjectType, IN PVOID Object)
#define InterlockedDecrement
_Must_inspect_result_ _In_ WDFCMRESLIST List
#define KeEnterCriticalRegion()
#define InterlockedPushEntrySList(SListHead, SListEntry)
NTSTATUS NTAPI SeReleaseSecurityDescriptor(_In_ PSECURITY_DESCRIPTOR CapturedSecurityDescriptor, _In_ KPROCESSOR_MODE CurrentMode, _In_ BOOLEAN CaptureIfKernelMode)
Releases a captured security descriptor buffer.
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
FORCEINLINE ULONG ObpValidateAttributes(IN ULONG Attributes, IN KPROCESSOR_MODE PreviousMode)
FORCEINLINE VOID ExReleasePushLock(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ObpReleaseLookupContext(IN POBP_LOOKUP_CONTEXT Context)
Releases an initialized object directory lookup context. Unlocks it if necessary, and dereferences th...
FORCEINLINE VOID ExAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
#define OBP_LOCK_STATE_PRE_ACQUISITION_SHARED
FORCEINLINE VOID ObpInitializeLookupContext(IN POBP_LOOKUP_CONTEXT Context)
Initializes a new object directory lookup context. Used for lookup operations (insertions/deletions) ...
#define KeLeaveCriticalRegion()
FORCEINLINE VOID ObpReleaseLookupContextObject(IN POBP_LOOKUP_CONTEXT Context)
struct _GENERAL_LOOKASIDE * P
#define OBP_LOCK_STATE_POST_ACQUISITION_EXCLUSIVE
BOOLEAN NTAPI ExAcquireResourceSharedLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
enum _PP_NPAGED_LOOKASIDE_NUMBER PP_NPAGED_LOOKASIDE_NUMBER
base for all directory entries
#define InterlockedPopEntrySList(SListHead)
_In_ BOOLEAN _In_ USHORT Directory
#define ExFreePoolWithTag(_P, _T)
FORCEINLINE VOID ObpDereferenceNameInfo(IN POBJECT_HEADER_NAME_INFO HeaderNameInfo)
#define OBP_LOCK_STATE_PRE_ACQUISITION_EXCLUSIVE
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
FORCEINLINE VOID ObpAcquireLookupContextLock(IN POBP_LOOKUP_CONTEXT Context, IN POBJECT_DIRECTORY Directory)
Locks an object directory lookup context for performing lookup operations (insertions/deletions) in a...