NtAlpcCreateResourceReserve
NTSTATUS __stdcall NtAlpcCreateResourceReserve(PVOID PortHandle, UINT64 Flags, UINT64 MessageSize, UINT64 *ResourceId){
_ETHREAD *CurrentThread;
KPROCESSOR_MODE v8;
__int64 v9;
NTSTATUS v10;
UINT64 v11;
struct _DMA_ADAPTER *v12;
PVOID Object;
VOID *ReserveHandle;
ReserveHandle = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
if( (_DWORD)Flags )
{
v10 = -1073741811;
}
else
{
v8 = *((_BYTE *)KeGetCurrentThread() + 562);
if( v8 )
{
v9 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)ResourceId < 0x7FFFFFFF0000i64 )
v9 = (__int64)ResourceId;
*(_DWORD *)v9 = *(_DWORD *)v9;
}
Object = 0i64;
v10 = ObReferenceObjectByHandle(PortHandle, 1u, AlpcPortObjectType, v8, &Object, 0i64);
if( v10 >= 0 )
{
v11 = MessageSize;
v12 = (struct _DMA_ADAPTER *)Object;
v10 = AlpcpCreateReserve((_ALPC_PORT *)Object, v11, &ReserveHandle);
if( v10 >= 0 )
*(_DWORD *)ResourceId = (unsigned int)ReserveHandle | 0x80000000;
HalPutDmaAdapter(v12);
}
}
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return v10;
}Referenced by:
No references.