SmIoRequestComplete
void __fastcall SmIoRequestComplete(__int64 a1, _DWORD *a2, __int64 a3, __int64 a4){
unsigned __int64 v4;
_MMMOD_WRITER_MDL_ENTRY *v5;
int v6;
_MI_PARTITION *Partition;
_MMPFN *v8;
unsigned __int64 v9;
if( (*a2 & 7) != 0 )
{
if( (*a2 & 7) == 2 )
*(_QWORD *)(a4 + 8) = (unsigned __int16)*(_QWORD *)(a4 + 8);
}
else
{
*(_QWORD *)(a4 + 8) &= 1ui64;
}
if( a3 < 0 )
{
KeSetEvent((PRKEVENT)a3, 1, 0);
}
else
{
v4 = a3 | 0x8000000000000000ui64;
v5 = *(_MMMOD_WRITER_MDL_ENTRY **)((a3 | 0x8000000000000000ui64) + 0x38);
v6 = *(_DWORD *)((a3 | 0x8000000000000000ui64) + 0x10);
Partition = v5->Partition;
if( v6 < 0 )
{
MiStoreLogWriteCompleteFailure((unsigned int)v6);
v8 = &MmGetPfnDb()[*(_QWORD *)(v4 + 112)];
v9 = MiLockPageInline(v8);
*((_BYTE *)&v8->u3 + 2) |= 0x10u;
_InterlockedAnd64(&v8->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v9);
Partition->Store.ModifiedWriteDisableCount = 32;
v5 = *(_MMMOD_WRITER_MDL_ENTRY **)(v4 + 56);
}
MiStoreModifiedWriteDereference(v5);
MiStoreFreeWriteSupport((_MI_STORE_WRITE_SUPPORT *)v4, &Irp);
}
}Referenced by:
SMKM_STORE_MGR::SmCompressCtxProcessReadyQueue
SMKM_STORE_MGR::SmIoCtxWorkItemComplete