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.