SmQueryStoreInformation
NTSTATUS __stdcall SmQueryStoreInformation(
PVOID SystemInformation,
UINT64 SystemInformationLength,
INT8 PreviousMode,
UINT64 *a4){
INT8 RequestorMode;
__int128 UserData;
UINT64 UserDataLength;
UINT64 *ReturnLength;
RequestorMode = (char)a4;
if( PreviousMode != 24 )
return -1073741820;
UserData = *(_OWORD *)SystemInformationLength;
UserDataLength = *(_QWORD *)(SystemInformationLength + 16);
if( (unsigned int)*(_OWORD *)SystemInformationLength != 1 )
return -1073741811;
if( DWORD1(UserData) != 2 && DWORD1(UserData) != 5 )
{
if( DWORD1(UserData) > 0x16
|| (SystemInformation = (PVOID)4202752, !_bittest((const int *)&SystemInformation, DWORD1(UserData))) )
{
if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeProfileSingleProcessPrivilege, (INT8)a4) )
return -1073741790;
}
}
switch( DWORD1(UserData) )
{
case 0x16:
return SmProcessCompressionInfoRequest(
*((PVOID *)&UserData + 1),
(unsigned int)UserDataLength,
ReturnLength,
RequestorMode);
case 8:
return SmcProcessListRequest(
&CacheMgr,
*((VOID **)&UserData + 1),
(unsigned int)UserDataLength,
ReturnLength,
RequestorMode);
case 0xF:
return SmProcessRegistrationRequest(
*((VOID **)&UserData + 1),
(unsigned int)UserDataLength,
ReturnLength,
RequestorMode);
case 2:
return SmProcessStatsRequest(
SystemInformation,
*((UINT64 *)&UserData + 1),
(UINT64 *)(unsigned int)UserDataLength,
(CHAR)ReturnLength);
case 5:
return SmProcessListRequest(
(_SMKM_STORE_LIST *)SmGlobals,
*((VOID **)&UserData + 1),
(unsigned int)UserDataLength,
ReturnLength,
RequestorMode);
case 0xD:
return SmcProcessStatsRequest(
&CacheMgr,
*((VOID **)&UserData + 1),
(unsigned int)UserDataLength,
ReturnLength,
RequestorMode);
}
return -1073741821;
}Referenced by:
ExpQuerySystemInformation