SmProcessStoreMemoryPriorityRequest
NTSTATUS __stdcall SmProcessStoreMemoryPriorityRequest(VOID *UserData, UINT64 UserDataLength, INT8 RequestorMode){
_OWORD *v3;
int v4;
int v5;
__int64 v7;
_EPROCESS *Process;
int v9;
INT64 a2;
VOID *ProcessHandle[2];
_KAPC_STATE ApcState;
v3 = UserData;
memset(&ApcState, 0, sizeof(ApcState));
a2 = 0i64;
Process = 0i64;
v4 = 0;
v9 = 0;
*(_OWORD *)ProcessHandle = 0i64;
if( (_DWORD)UserDataLength == 16 )
{
if( RequestorMode )
{
if( ((unsigned __int8)UserData & 7) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned __int64)UserData >= 0x7FFFFFFF0000i64 )
UserData = (VOID *)0x7FFFFFFF0000i64;
*(_BYTE *)UserData = *(_BYTE *)UserData;
*((_BYTE *)UserData + 15) = *((_BYTE *)UserData + 15);
}
*(_OWORD *)ProcessHandle = *v3;
if( LOBYTE(ProcessHandle[0]) == 1 )
{
if( ((__int64)ProcessHandle[0] & 0xFFFFFC00) != 0 )
{
v5 = -1073741811;
}
else if( ((__int64)ProcessHandle[0] & 0x100) != 0 )
{
v5 = SmRereferenceProcessObject(ProcessHandle[1], UserDataLength, RequestorMode, &Process);
if( v5 >= 0 )
{
_InterlockedOr((volatile signed __int32 *)&Process->2172, 0x40000u);
if( ((__int64)ProcessHandle[0] & 0x200) != 0 )
{
if( KeGetCurrentThread()->ApcState.Process != Process )
{
v4 = 1;
KiStackAttachProcess(Process, 0i64, &ApcState);
}
a2 = (INT64)Process;
LODWORD(v7) = SmpKeyedStoreEntryGet((UINT64)&KeyedStoreCtx, &a2, 0i64, 0i64);
if( v7 )
*(_BYTE *)(*(_QWORD *)SmKmStoreRefFromStoreIndex((__int64)SmGlobals, *(_WORD *)(v7 + 16) & 0x3FF) + 6023i64) = 1;
else
v5 = -1073741632;
}
else
{
v5 = 0;
}
}
}
else
{
v5 = -1073741637;
}
}
else
{
v5 = -1073741735;
}
}
else
{
v5 = -1073741306;
}
if( v4 )
KiUnstackDetachProcess(&ApcState, 0i64);
if( Process )
HalPutDmaAdapter((PADAPTER_OBJECT)Process);
return v5;
}Referenced by:
SmSetStoreInformation