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