SmProcessConfigRequest
NTSTATUS __stdcall SmProcessConfigRequest(VOID *UserData, UINT64 UserDataLength, INT8 RequestorMode){
NTSTATUS v4;
__int64 v5;
unsigned __int64 v6;
unsigned int v7;
unsigned __int64 v8;
unsigned int v9;
unsigned int v11;
unsigned __int64 v12;
unsigned __int64 v13;
v4 = 0;
if( (_DWORD)UserDataLength != 8 )
return -1073741306;
if( RequestorMode )
{
if( ((unsigned __int8)UserData & 3) != 0 )
ExRaiseDatatypeMisalignment();
v5 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)UserData < 0x7FFFFFFF0000i64 )
v5 = (__int64)UserData;
*(_BYTE *)v5 = *(_BYTE *)v5;
*(_BYTE *)(v5 + 7) = *(_BYTE *)(v5 + 7);
}
v6 = *(_QWORD *)UserData;
if( (_BYTE)v6 != 4 )
return -1073741735;
if( (v6 & 0xFFFF00) != 0 )
return -1073741811;
v7 = BYTE3(v6);
if( BYTE3(v6) >= 3u )
return -1073741811;
if( v7 )
{
v11 = v7 - 1;
if( v11 )
{
if( v11 != 1 )
return v4;
v12 = HIDWORD(v6);
if( (unsigned int)(v12 - 4) <= 0x1C && (((_DWORD)v12 - 1) & (unsigned int)v12) == 0 )
{
*(&stru_140C4DB30 + 947) = v12;
return v4;
}
}
else
{
v13 = HIDWORD(v6);
if( (unsigned int)v13 <= 1 )
{
*(&stru_140CF2E80 + 1817) = v13;
return v4;
}
}
return -1073741811;
}
v8 = HIDWORD(v6);
if( (unsigned int)v8 >= 0x100 )
return -1073741811;
if( (((unsigned int)v8 >> 2) & 3) == 3 )
return -1073741811;
v9 = v8 & 0x30;
if( v9 >= 0x30 )
return -1073741811;
if( ((((unsigned int)v8 >> 2) & 3) == 2 || v9 == 32)
&& !SeSinglePrivilegeCheck(*(_QWORD *)&SeLockMemoryPrivilege, RequestorMode) )
{
return -1073741790;
}
dword_140D23180 = v8 & 0xC0 | dword_140D23180 & 0xFFFFFF00 | ((unsigned int)v8 >> 2) & 0xF | (16 * (v8 & 3));
if( (dword_140D23180 & 3) != 0 )
SmpSystemStoreCreate();
return v4;
}Referenced by:
SmSetStoreInformation