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