NtAlpcDeleteResourceReserve

NTSTATUS __stdcall NtAlpcDeleteResourceReserve(VOID *PortHandle, UINT64 Flags, UINT64 ResourceId){
  _ETHREAD *CurrentThread; 
  unsigned int v4; 
  int v5; 
  _BLOB_TYPE *v6; 
  _ADAPTER_OBJECT *v7; 
  unsigned __int64 v8; 
  VOID *v9; 
  VOID *v10; 
  PADAPTER_OBJECT DmaAdapter; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = ResourceId;
  --CurrentThread->Tcb.KernelApcDisable;
  if( (_DWORD)Flags || (ResourceId & 0x80000000) == 0i64 )
  {
    v5 = -1073741811;
  }
  else
  {
    DmaAdapter = 0i64;
    v5 = ObReferenceObjectByHandle(
           PortHandle,
           1ui64,
           AlpcPortObjectType,
           KeGetCurrentThread()->PreviousMode,
           (VOID **)&DmaAdapter,
           0i64);
    if( v5 >= 0 )
    {
      v7 = DmaAdapter;
      v8 = v4;
      LODWORD(v8) = v4 & 0x7FFFFFFF;
      v9 = AlpcReferenceBlobByHandle(
             (_ALPC_HANDLE_TABLE *)&DmaAdapter->AdapterObject.ContiguousMapRegisters[2].Buffer,
             (VOID *)v8,
             (_BLOB_TYPE *)&AlpcReserveType,
             v6);
      v10 = v9;
      if( v9 )
      {
        if( AlpcpDeleteBlob(v9) )
          AlpcpDereferenceBlobEx(v10, 1i64);
        else
          v5 = -1073741738;
        AlpcpDereferenceBlobEx(v10, 1i64);
      }
      else
      {
        v5 = -1073741816;
      }
      HalPutDmaAdapter(v7);
    }
  }
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v5;
}

Referenced by:

No references.