54 ASSERT(ObjectHeader->NameInfoOffset != 0);
62 DPRINT1(
"OB: ObpInsertEntryDirectory - invalid context %p %u\n",
72 if (!NewEntry)
return FALSE;
85 *AllocatedEntry = NewEntry;
88 NewEntry->
Object = &ObjectHeader->Body;
120 if (DeviceMap !=
NULL)
128 return GlobalDosDirectory;
187 TotalChars =
Name->Length /
sizeof(
WCHAR);
194 if (!(
Buffer) || !(TotalChars))
goto Quickie;
197 for (
HashValue = 0; TotalChars; TotalChars--)
206 if (CurrentChar <
'a')
HashValue += CurrentChar;
208 else HashValue += (CurrentChar - (
'a'-
'A'));
220 AllocatedEntry = &
Directory->HashBuckets[HashIndex];
221 LookupBucket = AllocatedEntry;
231 while ((CurrentEntry = *AllocatedEntry))
252 AllocatedEntry = &CurrentEntry->
ChainLink;
259 if (AllocatedEntry != LookupBucket)
262 if ((
Context->DirectoryLocked) ||
266 *AllocatedEntry = CurrentEntry->
ChainLink;
272 *LookupBucket = CurrentEntry;
277 FoundObject = CurrentEntry->
Object;
290 if ((SearchShadow) && (
Directory->DeviceMap))
294 if (ShadowDirectory !=
NULL)
356 CurrentEntry = *AllocatedEntry;
359 *AllocatedEntry = CurrentEntry->
ChainLink;
500 ULONG SkipEntries = 0;
588 if (SkipEntries == CurrentEntry++)
603 RtlInitEmptyUnicodeString(&
Name,
NULL, 0);
675 DirectoryInfo = LocalBuffer;
#define ProbeForWriteUlong(Ptr)
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)
static int Hash(const char *)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define STATUS_NO_MORE_ENTRIES
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG _In_ BOOLEAN _In_ ULONG _In_opt_ PULONG _In_ BOOLEAN RestartScan
#define OBJ_CASE_INSENSITIVE
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
IN BOOLEAN OUT PSTR Buffer
ULONG ObpLUIDDeviceMapsEnabled
NTSTATUS NTAPI NtOpenDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG _In_ BOOLEAN ReturnSingleEntry
_In_ BOOLEAN _In_ ULONG _Out_ PULONG HashValue
static HANDLE DirectoryHandle
#define OBJECT_HEADER_TO_NAME_INFO(h)
KPROCESSOR_MODE NTAPI ExGetPreviousMode(VOID)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
NTSTATUS NTAPI NtQueryDirectoryObject(IN HANDLE DirectoryHandle, OUT PVOID Buffer, IN ULONG BufferLength, IN BOOLEAN ReturnSingleEntry, IN BOOLEAN RestartScan, IN OUT PULONG Context, OUT PULONG ReturnLength OPTIONAL)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
FORCEINLINE VOID ObpReleaseDirectoryLock(IN POBJECT_DIRECTORY Directory, IN POBP_LOOKUP_CONTEXT Context)
Unlocks a previously shared or exclusively locked directory.
#define STATUS_BUFFER_TOO_SMALL
#define OBJECT_TO_OBJECT_HEADER(o)
struct _OBJECT_DIRECTORY_INFORMATION * POBJECT_DIRECTORY_INFORMATION
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)
POBJECT_DIRECTORY NTAPI ObpGetShadowDirectory(IN POBJECT_DIRECTORY Directory)
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.
PVOID NTAPI ObpLookupEntryDirectory(IN POBJECT_DIRECTORY Directory, IN PUNICODE_STRING Name, IN ULONG Attributes, IN UCHAR SearchShadow, IN POBP_LOOKUP_CONTEXT Context)
POBJECT_TYPE ObpDirectoryObjectType
#define ExInitializePushLock
_In_ const STRING _In_ BOOLEAN CaseInsensitive
POBJECT_DIRECTORY GlobalDosDevicesDirectory
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)
WCHAR NTAPI RtlUpcaseUnicodeChar(_In_ WCHAR Source)
_In_ KPROCESSOR_MODE PreviousMode
#define NT_SUCCESS(StatCode)
#define EXCEPTION_EXECUTE_HANDLER
FORCEINLINE POBJECT_HEADER_NAME_INFO ObpReferenceNameInfo(IN POBJECT_HEADER ObjectHeader)
#define ObDereferenceObject
#define ProbeForWriteHandle(Ptr)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define STATUS_MORE_ENTRIES
struct _OBJECT_DIRECTORY_INFORMATION OBJECT_DIRECTORY_INFORMATION
NTSTATUS NTAPI NtCreateDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
FORCEINLINE VOID ObpInitializeLookupContext(IN POBP_LOOKUP_CONTEXT Context)
Initializes a new object directory lookup context. Used for lookup operations (insertions/deletions) ...
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)
FORCEINLINE VOID ObpReleaseLookupContextObject(IN POBP_LOOKUP_CONTEXT Context)
BOOLEAN NTAPI ObpInsertEntryDirectory(IN POBJECT_DIRECTORY Parent, IN POBP_LOOKUP_CONTEXT Context, IN POBJECT_HEADER ObjectHeader)
FORCEINLINE BOOLEAN ExConvertPushLockSharedToExclusive(IN PEX_PUSH_LOCK PushLock)
struct _OBJECT_DIRECTORY_ENTRY * ChainLink
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
BOOLEAN NTAPI ObpDeleteEntryDirectory(POBP_LOOKUP_CONTEXT Context)
struct tagContext Context
#define ObReferenceObject
base for all directory entries
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionCode()
#define _SEH2_YIELD(__stmt)
KGUARDED_MUTEX ObpDeviceMapLock
_In_ BOOLEAN _In_ USHORT Directory
#define ExFreePoolWithTag(_P, _T)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
base of all file and directory entries
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
PULONG MinorVersion OPTIONAL