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.