WmipGetFilePDO
INT64 __stdcall WmipGetFilePDO(PVOID FileHandle, INT8 Mode, DEVICE_OBJECT **Pdo){
int v4;
struct _DMA_ADAPTER *v5;
_DEVICE_OBJECT *RelatedDeviceObject;
DEVICE_OBJECT *AttachedDeviceReference;
IRP *Irp;
IRP *v9;
__int64 v10;
DEVICE_OBJECT **v11;
PFILE_OBJECT FileObject;
FileObject = 0i64;
v4 = ObReferenceObjectByHandle(FileHandle, 0, (POBJECT_TYPE)IoFileObjectType, Mode, (PVOID *)&FileObject, 0i64);
if( v4 >= 0 )
{
v5 = (struct _DMA_ADAPTER *)FileObject;
RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
AttachedDeviceReference = IoGetAttachedDeviceReference(RelatedDeviceObject);
Irp = IoAllocateIrp(*((_BYTE *)AttachedDeviceReference + 76), 0);
v9 = Irp;
if( Irp )
{
v10 = *((_QWORD *)Irp + 23);
*(_WORD *)(v10 - 72) = 1819;
*(_DWORD *)(v10 - 64) = 4;
*(_QWORD *)(v10 - 24) = v5;
*((_DWORD *)v9 + 12) = -1073741637;
v4 = IoSynchronousCallDriver(AttachedDeviceReference, v9);
if( v4 >= 0 )
{
v11 = (DEVICE_OBJECT **)*((_QWORD *)v9 + 7);
*Pdo = v11[1];
ExFreePoolWithTag(v11, 0);
v4 = 0;
}
IoFreeIrp(v9);
}
else
{
v4 = -1073741670;
}
HalPutDmaAdapter((PADAPTER_OBJECT)AttachedDeviceReference);
if( v5 )
HalPutDmaAdapter(v5);
}
return(unsigned int)v4;
}Referenced by:
IoWMIHandleToInstanceName
WmipTranslateFileHandle