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;
186 TotalChars =
Name->Length /
sizeof(
WCHAR);
193 if (!(
Buffer) || !(TotalChars))
goto Quickie;
196 for (
HashValue = 0; TotalChars; TotalChars--)
205 if (CurrentChar <
'a')
HashValue += CurrentChar;
207 else HashValue += (CurrentChar - (
'a'-
'A'));
219 AllocatedEntry = &
Directory->HashBuckets[HashIndex];
220 LookupBucket = AllocatedEntry;
230 while ((CurrentEntry = *AllocatedEntry))
251 AllocatedEntry = &CurrentEntry->
ChainLink;
258 if (AllocatedEntry != LookupBucket)
261 if ((
Context->DirectoryLocked) ||
265 *AllocatedEntry = CurrentEntry->
ChainLink;
271 *LookupBucket = CurrentEntry;
276 FoundObject = CurrentEntry->
Object;
289 if ((SearchShadow) && (
Directory->DeviceMap))
293 if (ShadowDirectory !=
NULL)
364 CurrentEntry = *AllocatedEntry;
367 *AllocatedEntry = CurrentEntry->
ChainLink;
508 ULONG SkipEntries = 0;
596 if (SkipEntries == CurrentEntry++)
611 RtlInitEmptyUnicodeString(&
Name,
NULL, 0);
683 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)
NTSYSAPI WCHAR NTAPI RtlUpcaseUnicodeChar(WCHAR Source)
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)
#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)
#define EXCEPTION_EXECUTE_HANDLER
FORCEINLINE VOID ObpAcquireDirectoryLockShared(IN POBJECT_DIRECTORY Directory, IN POBP_LOOKUP_CONTEXT Context)
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)
_In_ KPROCESSOR_MODE PreviousMode
#define _SEH2_YIELD(STMT_)
#define NT_SUCCESS(StatCode)
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)
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)
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 ExFreePoolWithTag(_P, _T)
#define _SEH2_GetExceptionCode()
KGUARDED_MUTEX ObpDeviceMapLock
_In_ BOOLEAN _In_ USHORT Directory
FORCEINLINE VOID ObpDereferenceNameInfo(IN POBJECT_HEADER_NAME_INFO HeaderNameInfo)
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