NtAlpcDeleteSectionView

NTSTATUS __stdcall NtAlpcDeleteSectionView(PVOID PortHandle, UINT64 Flags, PVOID ViewBase){
  _ETHREAD *CurrentThread; 
  signed int v5; 
  PADAPTER_OBJECT v6; 
  INT64 *v7; 
  INT64 v8; 
  INT64 v9; 
  int v10; 
  void *v11; 
  ULONG_PTR BugCheckParameter2[2]; 
  PADAPTER_OBJECT DmaAdapter; 
  *(_OWORD *)BugCheckParameter2 = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  if( (_DWORD)Flags )
  {
    v5 = -1073741811;
  }
  else
  {
    DmaAdapter = 0i64;
    v5 = ObReferenceObjectByHandle(
           PortHandle,
           1u,
           AlpcPortObjectType,
           *((_BYTE *)KeGetCurrentThread() + 562),
           (PVOID *)&DmaAdapter,
           0i64);
    if( v5 >= 0 )
    {
      BugCheckParameter2[0] = (ULONG_PTR)ViewBase;
      v6 = DmaAdapter;
      BugCheckParameter2[1] = 0i64;
      v7 = (INT64 *)&DmaAdapter[22];
      while( 1 )
      {
        ExAcquirePushLockSharedEx((UINT64)v7, 0i64);
        v10 = AlpcpEnumerateResourcesPort((INT64)v6, v8, v9, BugCheckParameter2);
        if( _InterlockedCompareExchange64(v7, 0i64, 17i64) != 17 )
          ExfReleasePushLockShared(v7);
        KeAbPostRelease(v7);
        if( v10 != -1073741267 )
          break;
        v6 = DmaAdapter;
      }
      v11 = (void *)BugCheckParameter2[1];
      if( BugCheckParameter2[1] )
      {
        v5 = AlpcpDeleteView(BugCheckParameter2[1]) == 0 ? 0xC0000056 : 0;
        AlpcpDereferenceBlobEx(v11, 1i64);
      }
      else
      {
        v5 = -1073741503;
      }
      HalPutDmaAdapter(DmaAdapter);
    }
  }
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return v5;
}

Referenced by:

No references.