IoGetDeviceObjectPointer
NTSTATUS __stdcall IoGetDeviceObjectPointer(
UNICODE_STRING *ObjectName,
UINT64 DesiredAccess,
FILE_OBJECT **FileObject,
DEVICE_OBJECT **DeviceObject){
_ETHREAD *CurrentThread;
int v7;
_FILE_OBJECT *v8;
PVOID Object;
struct _IO_STATUS_BLOCK IoStatusBlock;
struct _OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING FileHandle;
*(&ObjectAttributes.Length + 1) = 0;
memset(&ObjectAttributes.Attributes + 1, 0, 20);
*(_QWORD *)&FileHandle.Length = 0i64;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.Length = 48;
IoStatusBlock = 0i64;
ObjectAttributes.ObjectName = ObjectName;
ObjectAttributes.Attributes = IopCaseInsensitive != 0 ? 576 : 512;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v7 = ZwOpenFile(&FileHandle, (PWCHAR)DesiredAccess);
if( v7 >= 0 )
{
Object = 0i64;
v7 = ObReferenceObjectByHandle(*(HANDLE *)&FileHandle.Length, 0, (POBJECT_TYPE)IoFileObjectType, 0, &Object, 0i64);
if( v7 >= 0 )
{
v8 = (_FILE_OBJECT *)Object;
*FileObject = (FILE_OBJECT *)Object;
*DeviceObject = IoGetRelatedDeviceObject(v8);
}
ZwClose(*(HANDLE *)&FileHandle.Length);
}
KeLeaveCriticalRegion();
return v7;
}Referenced by:
HalpDynamicDeviceInterfaceNotification
IoVolumeDeviceNameToGuidPath
IoVolumeDeviceToDosName
IopAssignBootDriveLetter
IopCreateArcNamesCd
IopCreateArcNamesDisk
IopGetBootDiskInformation
IopOpenSystemVariableDevice
NtApphelpCacheControl
PopRegisterCoolingExtensionProtection
SbpAddTransportToInstance
SbpStartLanman
VhdiMountVhdFile