NtAllocateReserveObject

INT64 __fastcall NtAllocateReserveObject(PVOID *a1, _OBJECT_ATTRIBUTES *a2, INT64 a3){
  int v3; 
  char v5; 
  __int64 v6; 
  INT64 result; 
  PADAPTER_OBJECT v8; 
  NTSTATUS inserted; 
  __int64 v10; 
  __int64 v11; 
  PVOID Handle; 
  PADAPTER_OBJECT DmaAdapter; 
  v3 = a3;
  Handle = 0i64;
  DmaAdapter = 0i64;
  v5 = *((_BYTE *)KeGetCurrentThread() + 562);
  if( v5 )
  {
    v6 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)a1 < 0x7FFFFFFF0000i64 )
      v6 = (__int64)a1;
    *(_QWORD *)v6 = *(_QWORD *)v6;
  }
  if( (unsigned int)a3 > 1 )
    return 3221225485i64;
  result = ObCreateObjectEx(
             v5,
             *(&PspMemoryReserveObjectTypes + (int)a3),
             (__int64)a2,
             v5,
             v10,
             PspMemoryReserveObjectSizes[(int)a3],
             0,
             0,
             &DmaAdapter,
             0i64);
  if( (int)result >= 0 )
  {
    v8 = DmaAdapter;
    memset((INT64)DmaAdapter, 0i64);
    if( v3 == 1 )
    {
      LODWORD(v8[1].DmaOperations) = 4;
      *(_QWORD *)&v8[4].Version = PspIoMiniPacketCallbackRoutine;
      v8[4].DmaOperations = (_DMA_OPERATIONS *)v8;
      LOBYTE(v8[5].Version) = 0;
    }
    LODWORD(v11) = 0;
    inserted = ObInsertObjectEx(v8, 0i64, 0xF0003ui64, 0i64, v11, 0i64, &Handle);
    LODWORD(DmaAdapter) = inserted;
    if( inserted >= 0 )
      *a1 = Handle;
    return(unsigned int)inserted;
  }
  return result;
}

Referenced by:

No references.