NtAlpcCreateResourceReserve
NTSTATUS __stdcall NtAlpcCreateResourceReserve(VOID *PortHandle, UINT64 Flags, UINT64 MessageSize, UINT64 *ResourceId){
_ETHREAD *CurrentThread;
char PreviousMode;
__int64 v9;
int v10;
UINT64 v11;
_ADAPTER_OBJECT *v12;
PVOID PortObject;
VOID *ReserveHandle;
ReserveHandle = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
if( (_DWORD)Flags )
{
v10 = -1073741811;
}
else
{
PreviousMode = KeGetCurrentThread()->PreviousMode;
if( PreviousMode )
{
v9 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)ResourceId < 0x7FFFFFFF0000i64 )
v9 = (__int64)ResourceId;
*(_DWORD *)v9 = *(_DWORD *)v9;
}
PortObject = 0i64;
v10 = ObReferenceObjectByHandle(PortHandle, 1ui64, AlpcPortObjectType, PreviousMode, &PortObject, 0i64);
if( v10 >= 0 )
{
v11 = MessageSize;
v12 = (_ADAPTER_OBJECT *)PortObject;
v10 = AlpcpCreateReserve(PortObject, v11, &ReserveHandle);
if( v10 >= 0 )
*(_DWORD *)ResourceId = (unsigned int)ReserveHandle | 0x80000000;
HalPutDmaAdapter(v12);
}
}
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v10;
}Referenced by:
No references.