AlpcpRemoveMessageFromPendingQueue

VOID __stdcall AlpcpRemoveMessageFromPendingQueue(_KALPC_MESSAGE *Message){
  __int64 v1; 
  volatile INT64 *v3; 
  v1 = *((_QWORD *)Message + 2);
  v3 = (volatile INT64 *)(v1 + 176);
  ExAcquirePushLockExclusiveEx(v1 + 176, 0i64);
  --*(_DWORD *)(v1 + 456);
  *((_DWORD *)Message + 10) &= 0xFFFFFFF8;
  *((_QWORD *)Message + 2) = 0i64;
  **((_QWORD **)Message + 1) = *(_QWORD *)Message;
  *(_QWORD *)(*(_QWORD *)Message + 8i64) = *((_QWORD *)Message + 1);
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(v1 + 176), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v3);
  KeAbPostRelease((PVOID)v3);
  --*((_WORD *)Message - 15);
}

Referenced by:

AlpcpCancelMessage
AlpcpDispatchReplyToPort
AlpcpReplyLegacySynchronousRequest
AlpcpReturnMessageOnInsufficientBuffer