SmcProcessStoreCreateRequest
NTSTATUS __stdcall SmcProcessStoreCreateRequest(
_SMC_CACHE_MANAGER *CacheMgr,
VOID *UserData,
UINT64 UserDataLength,
INT8 RequestorMode){
int v6;
__int64 v7;
UINT64 StoreId;
_SM_STORE_BASIC_PARAMS StoreParams;
_SM_STORE_MANAGER_TYPE StoreMgrType[4];
LODWORD(StoreId) = -1;
StoreParams = 0i64;
*(_OWORD *)StoreMgrType = 0i64;
if( (_DWORD)UserDataLength != 32 )
return -1073741306;
if( RequestorMode )
{
if( ((unsigned __int8)UserData & 3) != 0 )
ExRaiseDatatypeMisalignment();
v7 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)UserData < 0x7FFFFFFF0000i64 )
v7 = (__int64)UserData;
*(_BYTE *)v7 = *(_BYTE *)v7;
*(_BYTE *)(v7 + 31) = *(_BYTE *)(v7 + 31);
}
StoreParams = *(_SM_STORE_BASIC_PARAMS *)UserData;
*(_OWORD *)StoreMgrType = *((_OWORD *)UserData + 1);
if( LOBYTE(StoreParams.StoreFlags) != 2 || (StoreParams.StoreFlags & 0xFFFFFF00) != 0 )
return -1073741811;
if( StoreMgrType[2] >= SmStoreManagerTypeMax )
return -1073741822;
if( (StoreParams.Granularity & 0xFFFEE000) != 0 )
return -1073741811;
v6 = SmcStoreCreate(
CacheMgr,
StoreMgrType[2],
(_SM_STORE_BASIC_PARAMS *)&StoreParams.Granularity,
(unsigned int)StoreMgrType[1],
&StoreId);
if( v6 >= 0 )
{
v6 = 0;
*((_DWORD *)UserData + 7) = StoreId;
}
return v6;
}Referenced by:
SmSetStoreInformation