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.