IoGetDeviceObjectPointer
NTSTATUS __stdcall IoGetDeviceObjectPointer(
_UNICODE_STRING *ObjectName,
UINT64 DesiredAccess,
_FILE_OBJECT **FileObject,
_DEVICE_OBJECT **DeviceObject){
_ETHREAD *CurrentThread;
int v7;
PVOID v8;
_DEVICE_OBJECT *v9;
UINT64 ShareAccess;
UINT64 OpenOptions;
PVOID Object;
_IO_STATUS_BLOCK IoStatusBlock;
_OBJECT_ATTRIBUTES ObjectAttributes;
VOID *FileHandle;
*(&ObjectAttributes.Length + 1) = 0;
memset(&ObjectAttributes.Attributes + 1, 0, 20);
FileHandle = 0i64;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.Length = 48;
IoStatusBlock = 0i64;
ObjectAttributes.ObjectName = ObjectName;
ObjectAttributes.Attributes = IopCaseInsensitive != 0 ? 576 : 512;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
LODWORD(OpenOptions) = 64;
LODWORD(ShareAccess) = 3;
v7 = ZwOpenFile(&FileHandle, DesiredAccess, &ObjectAttributes, &IoStatusBlock, ShareAccess, OpenOptions);
if( v7 >= 0 )
{
Object = 0i64;
v7 = ObReferenceObjectByHandle(FileHandle, 0i64, (_OBJECT_TYPE *)IoFileObjectType, 0, &Object, 0i64);
if( v7 >= 0 )
{
v8 = Object;
*FileObject = (_FILE_OBJECT *)Object;
LODWORD(v9) = IoGetRelatedDeviceObject((INT64)v8);
*DeviceObject = v9;
}
ZwClose((_HANDLE)FileHandle);
}
KeLeaveCriticalRegion();
return v7;
}Referenced by:
HalpDynamicDeviceInterfaceNotification
IoVolumeDeviceNameToGuidPath
IoVolumeDeviceToDosName
IopAssignBootDriveLetter
IopCreateArcNamesCd
IopCreateArcNamesDisk
IopGetBootDiskInformation
IopOpenSystemVariableDevice
NtApphelpCacheControl
PopRegisterCoolingExtensionProtection
SbpAddTransportToInstance
SbpStartLanman
VhdiMountVhdFile