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