SmFpAllocate
VOID __fastcall SmFpAllocate(
INT64 FpContext,
INT64 ResourceType,
INT64 a3,
INT64 a4,
VOID *Context,
_MDL *Mdl,
UINT64 DontFail){
int v7;
void *MdlForLock;
unsigned __int64 v12;
void *v13;
ULONG Tag;
v7 = ResourceType;
if( (int)ResourceType >= 5 )
{
if( (*(_BYTE *)(a4 + 10) & 5) == 0 )
{
MdlForLock = MmMapLockedPagesSpecifyCache((PMDL)a4, 0, MmCached, 0i64, 0, 0x40000010u);
goto LABEL_6;
}
v12 = *(_QWORD *)(a4 + 24);
LABEL_7:
if( v12 )
return;
goto LABEL_14;
}
if( (_DWORD)ResourceType == 2 )
{
MdlForLock = SmKmAllocateMdlForLock((unsigned __int64)*(unsigned __int16 *)(FpContext + 92) << 12);
goto LABEL_6;
}
if( (_DWORD)ResourceType == 3 )
{
v12 = -(__int64)((unsigned int)SmAcquireReleaseCharges(
(unsigned __int64)*(unsigned __int16 *)(FpContext + 94) << 12,
1ui64,
0i64) != 0) & 0xFFFFFFFFFFFFFFF8ui64;
goto LABEL_7;
}
if( (_DWORD)ResourceType != 4 )
{
Tag = 810708339;
HIBYTE(Tag) = ResourceType + 48;
MdlForLock = ExAllocatePoolWithTag(
NonPagedPoolNx,
*(unsigned __int16 *)(FpContext + 2i64 * (int)ResourceType + 88),
Tag);
LABEL_6:
v12 = (unsigned __int64)MdlForLock;
goto LABEL_7;
}
LABEL_14:
if( (_DWORD)Context )
{
v13 = (void *)SmpFpWaitForResource(FpContext, (unsigned int)v7, (_ETHREAD *)a3);
if( v7 >= 5 )
MmMapLockedPagesWithReservedMapping(v13, 0x6D526D73ui64, (MDL *)a4, MmCached);
}
}Referenced by:
SMKM_STORE::SmStMapPhysicalRegion
SMKM_STORE::SmStReadThread
SMKM_STORE_MGR::SmIoCtxPrepareToQueue
SMKM_STORE_MGR::SmPageRead
SMKM_STORE_MGR::SmpPageEvict
SmKmStoreHelperCommandProcess