SmFixSingleBitCorruption
NTSTATUS __stdcall SmFixSingleBitCorruption(UINT8 *a1, UINT64 a2, INT64 a3){
UINT8 *v3;
UINT64 v4;
__int64 v5;
UINT64 v6;
UINT64 v7;
UINT8 *v10;
char v11;
char v12;
NTSTATUS result;
UINT8 v14;
__int64 v15;
int v16;
v16 = a3;
v3 = a1 - 1;
v4 = 8 * a2;
v5 = 0i64;
v6 = 0i64;
v7 = 0i64;
if( !(8 * a2) )
return 0;
do
{
v10 = v3 + 1;
v11 = v7 & 7;
if( (v7 & 7) != 0 )
v10 = v3;
v15 = 0i64;
v3 = v10;
v12 = 1 << v11;
v14 = (1 << v11) ^ *v10;
*v10 = v14;
MetroHash64::Hash(a1, a2, (unsigned __int8 *const)&v15);
if( (_DWORD)v15 == v16 )
{
++v5;
v6 = v7;
}
++v7;
*v3 = v14 ^ v12;
}
while( v7 < v4 );
if( v5 != 1 )
return 0;
result = 1;
a1[v6 >> 3] ^= 1 << (v6 & 7);
return result;
}Referenced by:
ST_STORE::StDmHandleDecompressionFailure