NtAlpcCancelMessage

__int64 __fastcall NtAlpcCancelMessage(void *a1, int a2, __int64 a3){
  _ETHREAD *CurrentThread; 
  KPROCESSOR_MODE v5; 
  unsigned int v6; 
  unsigned int v7; 
  void *v8; 
  int v9; 
  INT64 v10; 
  INT64 v11; 
  _ALPC_PORT *v12; 
  PVOID Object[6]; 
  ULONG_PTR BugCheckParameter2; 
  BugCheckParameter2 = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  if( (a2 & 0xFFFFFFF0) != 0 )
  {
    v9 = -1073741811;
    goto LABEL_17;
  }
  v5 = *((_BYTE *)KeGetCurrentThread() + 562);
  if( v5 )
  {
    if( (a2 & 4) != 0 )
    {
      if( (a3 & 3) == 0 )
      {
        v6 = *(_DWORD *)(a3 + 12);
        v7 = *(_DWORD *)(a3 + 16);
        v8 = (void *)*(unsigned int *)(a3 + 4);
        goto LABEL_9;
      }
    }
    else if( (a3 & 3) == 0 )
    {
      v6 = *(_DWORD *)(a3 + 20);
      v7 = *(_DWORD *)(a3 + 24);
      v8 = *(void **)(a3 + 8);
LABEL_9:
      Object[1] = v8;
      goto LABEL_10;
    }
    ExRaiseDatatypeMisalignment();
  }
  v6 = *(_DWORD *)(a3 + 20);
  v7 = *(_DWORD *)(a3 + 24);
  v8 = *(void **)(a3 + 8);
LABEL_10:
  if( !v6 )
  {
    v9 = -1073741559;
    goto LABEL_17;
  }
  Object[0] = 0i64;
  v9 = ObReferenceObjectByHandle(a1, 1u, AlpcPortObjectType, v5, Object, 0i64);
  if( v9 >= 0 )
  {
    v11 = v6;
    v12 = (_ALPC_PORT *)Object[0];
    v9 = AlpcpLookupMessage((INT64)Object[0], v11, v7, v10, &BugCheckParameter2);
    if( v9 >= 0 )
    {
      if( (a2 & 8) == 0 )
        goto LABEL_14;
      if( (*((_DWORD *)v12 + 104) & 6) == 4 )
      {
        if( v8 == *(void **)(BugCheckParameter2 + 104) )
        {
LABEL_14:
          if( (*(_DWORD *)(BugCheckParameter2 + 40) & 0x80u) != 0 )
          {
            AlpcpUnlockMessage(BugCheckParameter2);
            v9 = -1073740029;
          }
          else
          {
            v9 = AlpcpCancelMessage(v12, (_KALPC_MESSAGE *)BugCheckParameter2, (unsigned int)a2);
          }
          goto LABEL_16;
        }
      }
      else if( v8 == *(void **)(BugCheckParameter2 + 112) )
      {
        goto LABEL_14;
      }
      AlpcpUnlockMessage(BugCheckParameter2);
      v9 = -1073740007;
    }
LABEL_16:
    HalPutDmaAdapter((PADAPTER_OBJECT)v12);
  }
LABEL_17:
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return(unsigned int)v9;
}

Referenced by:

No references.