PfpRpControlRequestCopy
NTSTATUS __stdcall PfpRpControlRequestCopy(
PF_ROBUSTNESS_CONTROL *UserRequest,
UINT64 UserRequestLength,
PF_ROBUSTNESS_CONTROL **RequestOut,
PF_ROBUSTNESS_CONTROL *LocalBuffer,
INT8 PreviousMode){
char *v7;
__m128i v8;
__int64 v9;
unsigned __int16 epi16;
unsigned __int64 v11;
__m128i *PoolWithTag;
__m128i v15;
if( PreviousMode && (_DWORD)UserRequestLength )
{
if( ((unsigned __int8)UserRequest & 7) != 0 )
ExRaiseDatatypeMisalignment();
v7 = (char *)UserRequest + (unsigned int)UserRequestLength;
if( (unsigned __int64)v7 > 0x7FFFFFFF0000i64 || v7 < (char *)UserRequest )
MEMORY[0x7FFFFFFF0000] = 0;
}
v8 = *(__m128i *)UserRequest;
v15 = *(__m128i *)UserRequest;
v9 = *((_QWORD *)UserRequest + 2);
if( (unsigned __int16)_mm_cvtsi128_si32(*(__m128i *)UserRequest) != 3 )
return -1073741811;
epi16 = _mm_extract_epi16(v8, 1);
if( epi16 >= 4u )
return -1073741811;
if( epi16 == 1 )
{
v15.m128i_i32[1] = _mm_cvtsi128_si32(_mm_srli_si128(v8, 4));
if( v15.m128i_i32[1] )
return -1073741811;
v15.m128i_i32[2] = _mm_cvtsi128_si32(_mm_srli_si128(v8, 8));
if( v15.m128i_i32[2] )
return -1073741811;
v15.m128i_i32[3] = _mm_cvtsi128_si32(_mm_srli_si128(v8, 12));
if( __PAIR64__(v15.m128i_u32[3], 0) != (unsigned int)v9 )
return -1073741811;
}
v11 = 8 * ((unsigned int)v9 + (unsigned __int64)v15.m128i_u32[3])
- ((8 * (v15.m128i_i8[4] + v15.m128i_i8[8]) + 23) & 7)
+ 8 * (v15.m128i_u32[1] + (unsigned __int64)v15.m128i_u32[2])
+ 31;
if( v11 > 0xFFFFFFFF )
return -1073741675;
if( (unsigned int)v11 != (unsigned __int64)(unsigned int)UserRequestLength )
return -1073741811;
if( (unsigned int)v11 <= 0x28ui64 )
{
PoolWithTag = (__m128i *)LocalBuffer;
}
else
{
PoolWithTag = (__m128i *)ExAllocatePoolWithTag(1ui64, (unsigned int)v11, 1129473616i64);
if( !PoolWithTag )
return -1073741670;
}
memmove(
PoolWithTag,
UserRequest,
8 * (v9 + v15.m128i_i32[3])
- ((8 * (v15.m128i_i8[4] + v15.m128i_i8[8]) + 23) & 7)
+ 8 * (v15.m128i_i32[1] + v15.m128i_i32[2])
+ 31);
*PoolWithTag = v8;
PoolWithTag[1].m128i_i64[0] = v9;
*RequestOut = (PF_ROBUSTNESS_CONTROL *)PoolWithTag;
return 0;
}Referenced by:
PfpRpControlRequest