IoAcquireKsrPersistentMemory

INT64 __fastcall IoAcquireKsrPersistentMemory(INT64 a1, ULONG_PTR a2, VOID *a3, size_t *a4){
  __int64 v8; 
  __int16 *v9; 
  _WORD *v10; 
  PVOID *v11; 
  PVOID *v12; 
  __int64 v13; 
  _WORD *v14; 
  __int64 v15; 
  _WORD *v16; 
  __int64 v17; 
  ULONG_PTR BugCheckParameter4; 
  if( KeGetCurrentIrql() )
    KeBugCheckEx(0x121u, 1ui64, KeGetCurrentIrql(), 0i64, 0i64);
  if( a2 )
  {
    v8 = *(_QWORD *)(*(_QWORD *)(a2 + 312) + 40i64);
    if( !v8 || (*(_DWORD *)(v8 + 396) & 0x20000) != 0 )
    {
      IoAddTriageDumpDataBlock((PVOID)a2, *(unsigned __int16 *)(a2 + 2));
      v9 = *(__int16 **)(a2 + 8);
      if( v9 )
      {
        IoAddTriageDumpDataBlock(v9, (unsigned int)v9[1]);
        v10 = (_WORD *)(*(_QWORD *)(a2 + 8) + 56i64);
        if( *v10 )
        {
          IoAddTriageDumpDataBlock(v10, 2ui64);
          IoAddTriageDumpDataBlock(
            *(PVOID *)(*(_QWORD *)(a2 + 8) + 64i64),
            *(unsigned __int16 *)(*(_QWORD *)(a2 + 8) + 56i64));
        }
      }
      v11 = *(PVOID **)(*(_QWORD *)(a2 + 312) + 40i64);
      if( v11 )
      {
        v12 = v11 + 5;
        IoAddTriageDumpDataBlock(v11, 0x310ui64);
        if( *(_WORD *)v12 )
        {
          IoAddTriageDumpDataBlock(v12, 2ui64);
          IoAddTriageDumpDataBlock(v12[1], *(unsigned __int16 *)v12);
        }
        v13 = *(_QWORD *)(a2 + 312);
        v14 = (_WORD *)(*(_QWORD *)(v13 + 40) + 56i64);
        if( *v14 )
        {
          IoAddTriageDumpDataBlock(v14, 2ui64);
          IoAddTriageDumpDataBlock(
            *(PVOID *)(*(_QWORD *)(*(_QWORD *)(a2 + 312) + 40i64) + 64i64),
            *(unsigned __int16 *)(*(_QWORD *)(*(_QWORD *)(a2 + 312) + 40i64) + 56i64));
          v13 = *(_QWORD *)(a2 + 312);
        }
        v15 = *(_QWORD *)(*(_QWORD *)(v13 + 40) + 16i64);
        if( v15 )
        {
          v16 = (_WORD *)(v15 + 56);
          if( *v16 )
          {
            IoAddTriageDumpDataBlock(v16, 2ui64);
            v17 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 312) + 40i64) + 16i64);
            IoAddTriageDumpDataBlock(*(PVOID *)(v17 + 64), *(unsigned __int16 *)(v17 + 56));
          }
        }
      }
      KeBugCheckEx(0xCAu, 2ui64, a2, 0i64, 0i64);
    }
  }
  if( !(unsigned __int8)ExIsSoftBoot() )
    return 3221225659i64;
  LODWORD(BugCheckParameter4) = 1;
  return PipGetPersistentMemory(a1, a2, a4, a3, BugCheckParameter4);
}

Referenced by:

No references.