SMKM_STORE_MGR::SmpPageEvict
__int64 __fastcall SMKM_STORE_MGR::SmpPageEvict(__int64 a1, unsigned int *a2, unsigned int a3, __int64 a4){
struct _MDL *v5;
unsigned int v6;
unsigned int v7;
__int64 *v8;
int v9;
__int64 v10;
_ETHREAD *v11;
__int64 v12;
int v13;
_ETHREAD *v14;
__int64 v15;
struct _EX_RUNDOWN_REF *v17;
VOID *Context;
VOID *Contexta;
_MDL *v20;
_MDL *v21;
UINT64 DontFail;
int v23;
unsigned int v24;
int v25;
v25 = HIDWORD(a4);
v23 = a3;
v24 = 0;
v5 = 0i64;
v6 = SMKM_STORE_MGR::SmFeEvictInitiate(a1, a2, (unsigned int *)&v23, &v24);
v7 = v6;
if( v6 != 1024 )
{
v8 = (__int64 *)SmKmStoreRefFromStoreIndex((INT64)&SmGlobals, v6 & 0x3FF);
v9 = dword_140D230F0 & 1;
LODWORD(Context) = v9;
v10 = *v8;
SmFpAllocate((INT64)&qword_140D22F50, 0i64, 0i64, 0i64, Context, v20, 0i64);
v13 = v23;
v14 = v11;
if( v11 )
{
*((_QWORD *)v11 + 1) = 0i64;
*(_QWORD *)v11 = 0i64;
LODWORD(Contexta) = v9;
SmFpAllocate((INT64)&qword_140D22F50, 1i64, (INT64)v11, 0i64, Contexta, v21, DontFail);
v5 = (struct _MDL *)v15;
if( v15 )
{
*(_DWORD *)(v15 + 4) = 0;
*(_QWORD *)(v15 + 16) = 0i64;
*(_QWORD *)(v15 + 24) = 0i64;
*(_DWORD *)v15 = 1;
*(_DWORD *)(v15 + 8) = *a2;
*(_DWORD *)(v15 + 12) = v13;
*(_QWORD *)(v15 + 32) = v14;
if( (int)SMKM_STORE_MGR::SmIoCtxQueueWork(v14, (__int64)&SmGlobals, v7, v15) >= 0 )
{
v10 = 0i64;
v5 = 0i64;
v14 = 0i64;
}
}
}
if( v10 )
{
SMKM_STORE_MGR::SmFeSetEvictFailed(v12, a2, v13);
v17 = (struct _EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex((INT64)&SmGlobals, *(_DWORD *)(v10 + 6016) & 0x3FF);
ExReleaseRundownProtection(v17 + 1);
}
if( v5 )
SMKM_STORE_MGR::SmWorkItemFreeResource((__int64)&SmGlobals, v5, (__int64)v14);
if( v14 )
SmFpFree((INT64)&qword_140D22F50, 0i64, (INT64)v14, (INT64)v14);
}
return v24;
}
Referenced by:
No references.