SmpPageWrite
NTSTATUS __stdcall SmpPageWrite(
_SM_PAGE_KEY *PageKey,
_MM_STORE_KEY_DESCRIPTOR *KeyDescriptor,
VOID *StoreContext,
_MDL *Mdl,
VOID *TransferContext,
_IO_STATUS_BLOCK *IoStatus,
UINT64 WaitAllowed){
int v7;
int v10;
int v11;
unsigned int v12;
NTSTATUS v13;
_EX_RUNDOWN_REF *v15;
int v16;
v7 = (int)StoreContext;
v16 = (int)StoreContext;
v10 = -1;
if( (KeyDescriptor[2] & 3) != 0
|| (v11 = SmpKeyedStoreReference(&KeyedStoreCtx, (_SMKM_STORE_LIST *)SmGlobals, *(_QWORD *)KeyDescriptor),
v10 = v11,
v11 == -1) )
{
v12 = v16;
}
else
{
v12 = v11 & 0x3FF | v7 & 0xFFFFF800;
v16 = v12;
}
if( (v12 & 0x7FF) != 1024 )
goto LABEL_7;
if( dword_140D231B0 != -1 )
{
v16 = dword_140D231B0 & 0x3FF | v12 & 0xFFFFF800;
LABEL_7:
v13 = SMKM_STORE_MGR::SmPageWrite(
(__int64)SmGlobals,
PageKey,
v16,
(__int64)Mdl,
(unsigned __int64)TransferContext & 0x7FFFFFFFFFFFFFFFi64,
(__int64 *)&IoStatus->Pointer,
WaitAllowed);
goto LABEL_8;
}
v13 = -1073741285;
LABEL_8:
if( v10 != -1 )
{
v15 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex((__int64)SmGlobals, v10 & 0x3FF);
ExReleaseRundownProtection(v15 + 1);
}
return v13;
}Referenced by:
MiStoreWriteIssue