AlpcMessageCleanupProcedure
INT64 __fastcall AlpcMessageCleanupProcedure(INT64 a1){
struct _DMA_ADAPTER *v2;
void *v3;
ULONG_PTR v4;
void *v5;
unsigned __int64 v6;
void *v7;
void *v8;
INT64 result;
*(_DWORD *)(a1 + 264) |= 0x80000000;
v2 = *(struct _DMA_ADAPTER **)(a1 + 24);
if( v2 )
{
if( (*(_DWORD *)(a1 + 40) & 0x1000) != 0 )
HalPutDmaAdapter(v2);
*(_QWORD *)(a1 + 24) = 0i64;
}
v3 = *(void **)(a1 + 136);
if( v3 )
{
AlpcpDereferenceBlobEx(v3, 1i64);
*(_QWORD *)(a1 + 136) = 0i64;
}
v4 = *(_QWORD *)(a1 + 144);
if( v4 )
{
AlpcpReleaseViewAttribute(v4);
*(_QWORD *)(a1 + 144) = 0i64;
}
v5 = *(void **)(a1 + 152);
if( v5 )
{
AlpcpDereferenceBlobEx(v5, 1i64);
*(_QWORD *)(a1 + 152) = 0i64;
}
v6 = *(_QWORD *)(a1 + 160);
if( (v6 & 1) != 0 )
{
if( v6 >= 4 && (v6 & 2) != 0 )
HalPutDmaAdapter((PADAPTER_OBJECT)(v6 & 0xFFFFFFFFFFFFFFFCui64));
*(_QWORD *)(a1 + 160) = 0i64;
}
v7 = *(void **)(a1 + 208);
if( v7 )
{
PsReleaseProcessWakeCounter(v7, *(unsigned int *)(a1 + 264));
*(_QWORD *)(a1 + 208) = 0i64;
}
v8 = *(void **)(a1 + 216);
if( v8 )
{
PsReleaseProcessWakeCounter(v8, *(unsigned int *)(a1 + 264));
*(_QWORD *)(a1 + 216) = 0i64;
}
result = *(_QWORD *)(a1 + 96);
if( result )
{
*(_DWORD *)(a1 + 240) = 2621440;
*(_QWORD *)(a1 + 184) = 0i64;
*(_QWORD *)(a1 + 192) = 0i64;
*(_DWORD *)(a1 + 40) = 0;
_InterlockedExchange((volatile __int32 *)(result + 40), 0);
}
return result;
}Referenced by:
AlpcpProcessSynchronousRequest