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.