KiOpIsPrefix
NTSTATUS __stdcall KiOpIsPrefix(INT64 a1, CHAR a2, CHAR *a3){
NTSTATUS v3;
CHAR v6;
int v7;
__int64 v8;
__int64 *v9;
int v11;
int v12;
int v13;
v3 = 0;
v6 = 0;
v7 = 0;
if( !*(_BYTE *)(a1 + 58) && (a2 & 0xF0) == 64 )
{
v11 = 2048;
*(_BYTE *)(a1 + 64) = a2;
}
else
{
v8 = 0i64;
v9 = KiOpPrefixTable;
while( *(_BYTE *)v9 != a2 )
{
v8 = (unsigned int)(v8 + 1);
v9 = (__int64 *)((char *)v9 + 12);
if( (unsigned int)v8 >= 0xB )
goto LABEL_6;
}
v11 = *((_DWORD *)KiOpPrefixTable + 3 * v8 + 1);
v7 = *((_DWORD *)&KiOpPrefixTable[1] + 3 * v8);
if( !v11 )
goto LABEL_6;
}
v12 = *(_DWORD *)(a1 + 48);
if( (v12 & v11) != 0 )
return -1073741795;
v13 = *(_DWORD *)(a1 + 52);
if( (v13 & v7) != 0 )
return -1073741795;
v6 = 1;
*(_DWORD *)(a1 + 48) = v11 | v12;
*(_DWORD *)(a1 + 52) = v7 | v13;
LABEL_6:
*a3 = v6;
return v3;
}Referenced by:
KiOpDecode