SmProcessStatsRequest
INT64 __stdcall SmProcessStatsRequest(PVOID UserData, UINT64 UserDataLength, UINT64 *ReturnLength, INT8 RequestorMode){
int v4;
_MDL *NonPaged;
__int64 v7;
int v8;
int v9;
unsigned __int8 v10;
unsigned int v11;
INT64 v12;
int v13;
__int128 Base;
__int128 v16;
_KEVENT Object[3];
_DWORD *v18;
CHAR PreviousMode;
v18 = (_DWORD *)RequestorMode;
v4 = (int)ReturnLength;
v16 = 0i64;
NonPaged = 0i64;
v7 = 0i64;
v8 = 0;
KeInitializeEvent(Object, NotificationEvent, 0);
if( v4 == 16 )
{
if( PreviousMode && (UserDataLength & 7) != 0 )
ExRaiseDatatypeMisalignment();
Base = *(_OWORD *)UserDataLength;
v10 = BYTE1(*(_OWORD *)UserDataLength);
if( (_BYTE)Base == 2 && v10 < 4u )
{
if( v10 <= 1u || SeSinglePrivilegeCheck(*(_QWORD *)&SeProfileSingleProcessPrivilege, PreviousMode) )
{
if( (!DWORD1(Base)
|| (v11 = MmSizeOfMdl(*((PVOID *)&Base + 1), DWORD1(Base)),
(NonPaged = (_MDL *)SSHSupportAllocateNonPaged(v11, 0x444D6D73u)) != 0i64))
&& (v12 = SSHSupportAllocateNonPaged(0x28ui64, 0x69576D73u), (v7 = v12) != 0) )
{
*(_OWORD *)v12 = 0i64;
*(_OWORD *)(v12 + 16) = 0i64;
*(_QWORD *)(v12 + 32) = 0i64;
v13 = 0;
if( DWORD1(Base) )
{
NonPaged->Next = 0i64;
NonPaged->Size = 8 * ((((WORD4(Base) & 0xFFF) + (unsigned __int64)DWORD1(Base) + 4095) >> 12) + 6);
NonPaged->MdlFlags = 0;
NonPaged->StartVa = (void *)(*((_QWORD *)&Base + 1) & 0xFFFFFFFFFFFFF000ui64);
NonPaged->ByteOffset = WORD4(Base) & 0xFFF;
NonPaged->ByteCount = DWORD1(Base);
v8 = 1;
MmProbeAndLockPages(NonPaged, PreviousMode, IoWriteAccess);
v13 = *(_DWORD *)v7;
}
*(_DWORD *)v7 = v13 & 0xFFFFFFF8 | 3;
*(_DWORD *)(v7 + 8) = v10;
*(_DWORD *)(v7 + 12) = DWORD1(Base);
*(_QWORD *)(v7 + 16) = NonPaged;
v9 = SMKM_STORE_MGR::SmStoreRequest((__int64)&SmGlobals, WORD1(Base), v7, (__int64)Object, &v16);
if( v9 >= 0 )
{
v7 = 0i64;
KeWaitForSingleObject(Object, Executive, 0, 0, 0i64);
v9 = v16;
*v18 = DWORD2(v16);
}
}
else
{
v9 = -1073741670;
}
}
else
{
v9 = -1073741790;
}
}
else
{
v9 = -1073741811;
}
}
else
{
v9 = -1073741306;
}
if( v7 )
CmSiFreeMemory((PPRIVILEGE_SET)v7);
if( v8 )
MmUnlockPages(NonPaged);
if( NonPaged )
CmSiFreeMemory((PPRIVILEGE_SET)NonPaged);
return(unsigned int)v9;
}Referenced by:
SmQueryStoreInformation