SeRmReferenceFindCapName

NTSTATUS __stdcall SeRmReferenceFindCapName(PVOID CapID, UINT64 *CapeCount, UNICODE_STRING **CapeNames){
  int v3; 
  RTL_DYNAMIC_HASH_TABLE_ENTRY *v5; 
  unsigned int v6; 
  UNICODE_STRING *PoolWithTag; 
  NTSTATUS v9; 
  NTSTATUS Cap; 
  __int64 Blink_high; 
  unsigned __int64 *p_Signature; 
  __int64 v13; 
  unsigned __int16 *v14; 
  unsigned int v15; 
  unsigned int v16; 
  UINT8 *i; 
  __int64 v18; 
  unsigned __int16 v19; 
  NTSTATUS result; 
  PVOID v21; 
  RTL_DYNAMIC_HASH_TABLE_ENTRY *v22; 
  UNICODE_STRING **v23; 
  v23 = CapeNames;
  v21 = CapID;
  v3 = 0;
  v22 = 0i64;
  v5 = 0i64;
  v6 = 0;
  PoolWithTag = 0i64;
  v9 = (unsigned int)SepValidateCAPIDs((INT64)CapID, (INT64)&v21);
  if( v9 >= 0 )
  {
    Cap = SepRmReferenceFindCap(CapID, &v22);
    v5 = v22;
    v9 = Cap;
    if( Cap >= 0 )
    {
      Blink_high = HIDWORD(v22[2].Linkage.Blink);
      if( (_DWORD)Blink_high )
      {
        p_Signature = &v22[2].Signature;
        v13 = (unsigned int)Blink_high;
        do
        {
          v14 = (unsigned __int16 *)*p_Signature++;
          v15 = *v14;
          if( v15 <= 2 )
            v15 = 0;
          v6 += v15;
          --v13;
        }
        while( v13 );
      }
      PoolWithTag = (UNICODE_STRING *)ExAllocatePoolWithTag(PagedPool, v6 + 16 * Blink_high, 0x70536553ui64);
      if( PoolWithTag )
      {
        v16 = 0;
        for( i = (UINT8 *)&PoolWithTag[HIDWORD(v5[2].Linkage.Blink)];
              v16 < HIDWORD(v5[2].Linkage.Blink);
              i += 2 * ((unsigned __int64)PoolWithTag[v18].Length >> 1) )
        {
          v18 = v16;
          PoolWithTag[v16].Buffer = (wchar_t *)i;
          v19 = **((_WORD **)&v5[2].Signature + v16);
          if( v19 <= 2u )
            v19 = 0;
          PoolWithTag[v16].MaximumLength = v19;
          PoolWithTag[v16].Length = v19;
          memmove(i, *(UINT8 **)(*(&v5[2].Signature + v16++) + 8), v19);
        }
      }
      else
      {
        v9 = -1073741801;
      }
    }
  }
  *v23 = PoolWithTag;
  if( v5 )
    v3 = HIDWORD(v5[2].Linkage.Blink);
  result = v9;
  *(_DWORD *)CapeCount = v3;
  return result;
}

Referenced by:

AdtpBuildContextFromSecurityDescriptor