PiDetermineDeleteType
NTSTATUS __stdcall PiDetermineDeleteType(INT64 a1){
__int64 v1;
__int64 v2;
__int64 v3;
NTSTATUS v4;
int v5;
v1 = *(_QWORD *)(a1 + 152);
if( v1 )
v2 = *(_QWORD *)(*(_QWORD *)(v1 + 312) + 40i64);
else
v2 = 0i64;
v3 = *(_QWORD *)(a1 + 112) - *(_QWORD *)&GUID_DEVICE_EJECT.Data1;
if( !v3 )
v3 = *(_QWORD *)(a1 + 120) - *(_QWORD *)GUID_DEVICE_EJECT.Data4;
v4 = 4;
if( v3 )
{
if( (*(_DWORD *)(a1 + 144) & 4) != 0 )
{
v5 = *(_DWORD *)(v2 + 304);
if( (*(_DWORD *)(v2 + 396) & 0x10) != 0 )
{
if( v5 <= 774 || v5 >= 780 || v5 == 777 )
return 6;
else
return 5;
}
else if( v5 != 777 && v5 > 774 && v5 < 780 || (*(_DWORD *)(*(_QWORD *)(v1 + 312) + 32i64) & 4) != 0 )
{
return 3;
}
else
{
return 2;
}
}
else
{
return 0;
}
}
return v4;
}Referenced by:
PnpProcessQueryRemoveAndEject