IopQueryInformation
CHAR __stdcall IopQueryInformation(UINT64 P4){
_DEVICE_OBJECT *v1;
INT64 v2;
__int64 v3;
INT64 v4;
_DEVICE_OBJECT *v5;
VOID *v7;
NTSTATUS v8;
NTSTATUS Open;
char v10;
_BYTE *v11;
_FAST_IO_DISPATCH *FastIoDispatch;
unsigned __int8(__fastcall *FastIoQueryOpen)(_IRP *, _FILE_NETWORK_OPEN_INFORMATION *, _DEVICE_OBJECT *);
INT64 a5;
UINT64 SupportedFeatures;
_BYTE *v17;
v4 = v2;
v5 = v1;
v7 = 0i64;
LODWORD(SupportedFeatures) = 0;
if( !*(_BYTE *)(P4 + 208) )
{
v11 = v17;
*v17 = 0;
v10 = 0;
FastIoDispatch = v1->DriverObject->FastIoDispatch;
if( FastIoDispatch )
{
if( FastIoDispatch->SizeOfFastIoDispatch > 0xC0 )
{
FastIoQueryOpen = FastIoDispatch->FastIoQueryOpen;
if( FastIoQueryOpen )
{
--*(_BYTE *)(v2 + 67);
*(_QWORD *)(v2 + 184) -= 72i64;
*(_QWORD *)(v3 + 40) = v1;
if( (MmVerifierData & 0x10) != 0 )
v7 = VfFastIoSnapState();
*v11 = FastIoQueryOpen((_IRP *)v4, *(_FILE_NETWORK_OPEN_INFORMATION **)(P4 + 104), v5);
if( v7 )
VfFastIoCheckState(v7, FastIoQueryOpen);
*(_QWORD *)(P4 + 168) = *(_QWORD *)(v4 + 112);
if( *v11 )
{
*(_DWORD *)(P4 + 32) = -1096154543;
if( !*(_BYTE *)(P4 + 139) )
{
**(_QWORD **)(P4 + 96) = **(_QWORD **)(P4 + 104);
*(_QWORD *)(*(_QWORD *)(P4 + 96) + 8i64) = *(_QWORD *)(*(_QWORD *)(P4 + 104) + 8i64);
*(_QWORD *)(*(_QWORD *)(P4 + 96) + 16i64) = *(_QWORD *)(*(_QWORD *)(P4 + 104) + 16i64);
*(_QWORD *)(*(_QWORD *)(P4 + 96) + 24i64) = *(_QWORD *)(*(_QWORD *)(P4 + 104) + 24i64);
*(_DWORD *)(*(_QWORD *)(P4 + 96) + 32i64) = *(_DWORD *)(*(_QWORD *)(P4 + 104) + 48i64);
}
}
else
{
*(_QWORD *)(v4 + 184) += 72i64;
++*(_BYTE *)(v4 + 67);
}
}
}
}
goto LABEL_20;
}
v8 = FsRtlGetSupportedFeatures(v1, &SupportedFeatures);
if( v8 >= 0 )
{
if( (SupportedFeatures & 4) == 0 )
{
*v17 = 0;
LOBYTE(v8) = 0;
return v8;
}
--*(_BYTE *)(v4 + 67);
*(_QWORD *)(v4 + 184) -= 72i64;
LODWORD(a5) = *(_DWORD *)(P4 + 200);
Open = FsRtlQueryOpen(v5, v4, *(_QWORD *)(P4 + 112), P4 + 204, a5);
v10 = Open;
++*(_BYTE *)(v4 + 67);
*(_QWORD *)(v4 + 184) += 72i64;
*(_QWORD *)(P4 + 168) = *(_QWORD *)(v4 + 112);
if( Open < 0 )
{
if( Open == -1071906812 )
{
v10 = 0;
*v17 = 0;
}
}
else
{
*(_DWORD *)(P4 + 32) = -1096154543;
*v17 = 1;
}
LABEL_20:
LOBYTE(v8) = v10;
}
return v8;
}Referenced by:
IopParseDevice