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.