IoInvalidateDeviceState
UINT64 __stdcall IoInvalidateDeviceState(RTL_BITMAP *BitMapHeader, UINT64 NumberToFind, UINT64 HINTIndex){
UINT64 result;
__int64 v5;
__int16 *Buffer;
unsigned int *v7;
PVOID *v8;
PVOID *v9;
unsigned int *v10;
_WORD *v11;
__int64 v12;
_WORD *v13;
__int64 v14;
if( !BitMapHeader )
goto LABEL_18;
result = (UINT64)BitMapHeader[19].Buffer;
v5 = *(_QWORD *)(result + 40);
if( !v5 || (*(_DWORD *)(v5 + 396) & 0x20000) != 0 )
{
IoAddTriageDumpDataBlock(BitMapHeader, HIWORD(BitMapHeader->SizeOfBitMap));
Buffer = (__int16 *)BitMapHeader->Buffer;
if( Buffer )
{
IoAddTriageDumpDataBlock(Buffer, (unsigned int)Buffer[1]);
v7 = BitMapHeader->Buffer + 14;
if( *(_WORD *)v7 )
{
IoAddTriageDumpDataBlock(v7, 2ui64);
IoAddTriageDumpDataBlock(*((PVOID *)BitMapHeader->Buffer + 8), *((unsigned __int16 *)BitMapHeader->Buffer + 28));
}
}
v8 = (PVOID *)*((_QWORD *)BitMapHeader[19].Buffer + 5);
if( v8 )
{
v9 = v8 + 5;
IoAddTriageDumpDataBlock(v8, 0x310ui64);
if( *(_WORD *)v9 )
{
IoAddTriageDumpDataBlock(v9, 2ui64);
IoAddTriageDumpDataBlock(v9[1], *(unsigned __int16 *)v9);
}
v10 = BitMapHeader[19].Buffer;
v11 = (_WORD *)(*((_QWORD *)v10 + 5) + 56i64);
if( *v11 )
{
IoAddTriageDumpDataBlock(v11, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*((_QWORD *)BitMapHeader[19].Buffer + 5) + 64i64),
*(unsigned __int16 *)(*((_QWORD *)BitMapHeader[19].Buffer + 5) + 56i64));
v10 = BitMapHeader[19].Buffer;
}
v12 = *(_QWORD *)(*((_QWORD *)v10 + 5) + 16i64);
if( v12 )
{
v13 = (_WORD *)(v12 + 56);
if( *v13 )
{
IoAddTriageDumpDataBlock(v13, 2ui64);
v14 = *(_QWORD *)(*((_QWORD *)BitMapHeader[19].Buffer + 5) + 16i64);
IoAddTriageDumpDataBlock(*(PVOID *)(v14 + 64), *(unsigned __int16 *)(v14 + 56));
}
}
}
LABEL_18:
KeBugCheckEx(0xCAu, 2ui64, (ULONG_PTR)BitMapHeader, 0i64, 0i64);
}
if( *(_DWORD *)(v5 + 300) == 776 )
return PnpRequestDeviceAction((_DEVICE_OBJECT *)BitMapHeader, RequeryDeviceState, 0, 0i64, 0i64, 0i64);
return result;
}Referenced by:
No references.