SmpIoCompletionApc

void __fastcall SmpIoCompletionApc(void *a1, struct _IO_STATUS_BLOCK *a2){
  int Status; 
  struct _IO_STATUS_BLOCK *v3; 
  _DWORD *Pointer; 
  struct _EX_RUNDOWN_REF *v6; 
  Status = a2->Status;
  v3 = a2 - 2;
  if( a2->Status < 0 )
  {
    HIDWORD(v3[1].Information) |= 1u;
    Pointer = v3[1].Pointer;
    if( Pointer )
      Pointer[1] = Status;
    else
      LODWORD(v3->Information) = Status;
  }
  if( v3[1].Pointer )
    _InterlockedDecrement((volatile signed __int32 *)a1 + 1526);
  if( (v3[1].Information & 0x400000000i64) != 0 )
  {
    KeSetEvent((PRKEVENT)((char *)a1 + 6176), 1);
  }
  else
  {
    SMKM_STORE::SmStWorkItemQueue((__int64)a1, (__int64)v3, 1);
    v6 = (struct _EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex((INT64)&SmGlobals, *((_DWORD *)a1 + 1504) & 0x3FF);
    ExReleaseRundownProtection(v6 + 1);
  }
}

Referenced by:

No references.