IopGetDriverPathInformation
VOID __stdcall IopGetDriverPathInformation(
_FILE_OBJECT *FileObject,
_FILE_FS_DRIVER_PATH_INFORMATION *FsDpInfo,
UINT64 Length){
INT64 v5;
INT64 v6;
_VPB *Vpb;
_DEVICE_OBJECT *DeviceObject;
UINT8 v9;
_UNICODE_STRING ObjectName;
_DRIVER_OBJECT *DriverObject;
*(_DWORD *)(&ObjectName.MaximumLength + 1) = 0;
DriverObject = 0i64;
if( (unsigned int)(Length - 8) >= FsDpInfo->DriverNameLength )
{
ObjectName.Buffer = FsDpInfo->DriverName;
ObjectName.Length = FsDpInfo->DriverNameLength;
ObjectName.MaximumLength = ObjectName.Length;
if( ObReferenceObjectByName(&ObjectName, 0x40ui64, 0i64, 0i64, IoDriverObjectType, 0, 0i64, (VOID **)&DriverObject) >= 0 )
{
KeAcquireQueuedSpinLock(10i64, v5, v6);
Vpb = FileObject->Vpb;
if( Vpb && (DeviceObject = Vpb->DeviceObject) != 0i64 && IopVerifyDriverObjectOnStack(DeviceObject, DriverObject) )
FsDpInfo->DriverInPath = 1;
else
FsDpInfo->DriverInPath = IopVerifyDriverObjectOnStack(FileObject->DeviceObject, DriverObject);
KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, v9);
ObfDereferenceObjectWithTag(DriverObject, 0x746C6644ui64);
}
}
}Referenced by:
NtQueryVolumeInformationFile