sub_1403E91C0
UINT8 __fastcall sub_1403E91C0(__int64 a1, __int64 a2, __int64 a3){
__int64 v4;
__int64 v7;
int v8;
__int64 v9;
_QWORD *v10;
_MDL *v11;
unsigned __int128 v12;
int v13;
unsigned int *p_ByteCount;
__int64 v15;
unsigned __int64 v16;
unsigned int *v17;
_MDL *v18;
VOID *v19;
UINT8 result;
v4 = a2 ^ __ROL8__(a2, 17);
v7 = (0x7010008004002001i64 * v4) ^ (((unsigned __int64)v4 * (unsigned __int128)0x7010008004002001ui64) >> 64);
v8 = 4;
v9 = v7;
v10 = (_QWORD *)(a2 + 24);
do
{
*v10-- ^= v9;
v9 = __ROL8__(v9, v8--);
}
while( v8 );
v11 = *(_MDL **)a2;
if( ((unsigned __int8)v7 & 0xFu) < 7 )
{
v12 = ((unsigned __int64)v11 ^ __ROL8__(v11, 17)) * (unsigned __int128)0x7010008004002001ui64;
v13 = 6;
*((_QWORD *)&v12 + 1) ^= v12;
p_ByteCount = &v11->ByteCount;
v15 = *((_QWORD *)&v12 + 1) + v9;
do
{
*(_QWORD *)p_ByteCount ^= v15;
p_ByteCount -= 2;
v15 = __ROL8__(v15, v13--);
}
while( v13 );
v16 = ((unsigned __int64)(unsigned int)v11->Size - 48) >> 3;
if( (_DWORD)v16 )
{
v17 = &v11->ByteCount + 2 * (int)v16;
do
{
*(_QWORD *)v17 ^= v15;
v15 = __ROL8__(v15, v16);
v17 -= 2;
LODWORD(v16) = v16 - 1;
}
while( (_DWORD)v16 );
}
}
v18 = *(_MDL **)a2;
v19 = MmMapLockedPagesWithReservedMapping(*(VOID **)(a2 + 8), *(unsigned int *)(a2 + 16), *(_MDL **)a2, MmCached);
result = MmSetPageProtection(
v19,
(v18->ByteCount + 4095 + ((LODWORD(v18->StartVa) + v18->ByteOffset) & 0xFFF)) & 0xFFFFF000,
0x40ui64);
*(_QWORD *)(a1 + 40) = 0i64;
*(_QWORD *)(a1 + 32) = a3;
return result;
}Referenced by:
No references.