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.