MmManagePartitionGetMemoryEvents

NTSTATUS __stdcall MmManagePartitionGetMemoryEvents(PVOID **a1, INT64 a2, _KPROCESSOR_MODE AccessMode){
  PVOID *v3; 
  INT8 v4; 
  UINT64 v6; 
  VOID **Handle; 
  VOID **v8; 
  VOID **v9; 
  int v10; 
  _KPROCESSOR_MODE AccessModea; 
  _KPROCESSOR_MODE AccessModeb; 
  _KPROCESSOR_MODE AccessModec; 

  v3 = *a1;
  v4 = AccessMode;
  if( *(_DWORD *)a2 != 1 )
    return -1073741811;
  v6 = *(unsigned int *)(a2 + 4);
  if( ((unsigned int)v6 & ((_BYTE)AccessMode != 0 ? 7666 : 73714)) != (_DWORD)v6 )
    return -1073741811;
  Handle = (VOID **)(a2 + 16);
  *(_QWORD *)(a2 + 16) = 0i64;
  v8 = (VOID **)(a2 + 24);
  *(_QWORD *)(a2 + 24) = 0i64;
  v9 = (VOID **)(a2 + 32);
  *(_QWORD *)(a2 + 32) = 0i64;
  LOBYTE(AccessModea) = AccessMode;
  v10 = ObOpenObjectByPointer(
          v3[37],
          v6,
          0i64,
          *(_DWORD *)(a2 + 8),
          (POBJECT_TYPE)ExEventObjectType,
          AccessModea,
          Handle);
  if( v10 < 0
    || (LOBYTE(AccessModeb) = v4,
        v10 = ObOpenObjectByPointer(
                v3[38],
                *(unsigned int *)(a2 + 4),
                0i64,
                *(_DWORD *)(a2 + 8),
                (POBJECT_TYPE)ExEventObjectType,
                AccessModeb,
                (VOID **)(a2 + 24)),
        v10 < 0)
    || (LOBYTE(AccessModec) = v4,
        v10 = ObOpenObjectByPointer(
                v3[39],
                *(unsigned int *)(a2 + 4),
                0i64,
                *(_DWORD *)(a2 + 8),
                (POBJECT_TYPE)ExEventObjectType,
                AccessModec,
                (VOID **)(a2 + 32)),
        v10 < 0) )
  {
    if( *Handle )
      ObCloseHandle(*Handle, v4);
    if( *v8 )
      ObCloseHandle(*v8, v4);
    if( *v9 )
      ObCloseHandle(*v9, v4);
  }
  return v10;
}

Referenced by:

NtManagePartition