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.