NtAlpcDeleteSectionView

NTSTATUS __stdcall NtAlpcDeleteSectionView(VOID *PortHandle, UINT64 Flags, VOID *ViewBase){
  _ETHREAD *CurrentThread; 
  int v4; 
  _ALPC_PORT *v5; 
  _EX_PUSH_LOCK *p_PortObjectLock; 
  VOID *v7; 
  NTSTATUS v8; 
  _ALPC_PORT *PortObject; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  if( (_DWORD)Flags )
  {
    v4 = -1073741811;
  }
  else
  {
    PortObject = 0i64;
    v4 = ObReferenceObjectByHandle(
           PortHandle,
           1ui64,
           AlpcPortObjectType,
           KeGetCurrentThread()->PreviousMode,
           (VOID **)&PortObject,
           0i64);
    if( v4 >= 0 )
    {
      v5 = PortObject;
      p_PortObjectLock = &PortObject->PortObjectLock;
      while( 1 )
      {
        ExAcquirePushLockSharedEx(p_PortObjectLock, 0i64);
        v8 = AlpcpEnumerateResourcesPort(v5, v7);
        if( _InterlockedCompareExchange64(&p_PortObjectLock->_bf_0, 0i64, 17i64) != 17 )
          ExfReleasePushLockShared(p_PortObjectLock);
        KeAbPostRelease(p_PortObjectLock);
        if( v8 != -1073741267 )
          break;
        v5 = PortObject;
      }
      v4 = -1073741503;
      HalPutDmaAdapter((PADAPTER_OBJECT)PortObject);
    }
  }
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v4;
}

Referenced by:

No references.