RtlDeriveCapabilitySidsFromName

NTSTATUS __stdcall RtlDeriveCapabilitySidsFromName(
        UNICODE_STRING *CapName,
        PVOID CapabilityGroupSid,
        PVOID CapabilitySid){
  NTSTATUS result; 
  UINT64 v6; 
  __int128 v7; 
  __int128 v8; 
  unsigned int v9; 
  unsigned int v10; 
  UINT64 v11; 
  UINT64 v12; 
  __int128 v13; 
  __int128 v14; 
  struct _UNICODE_STRING DestinationString; 
  UINT8 pbResult[16]; 
  __int128 v17; 
  DestinationString = 0i64;
  if( !CapName || !CapabilityGroupSid || !CapabilitySid )
    __fastfail(5u);
  *(_OWORD *)CapabilitySid = 0i64;
  *((_OWORD *)CapabilitySid + 1) = 0i64;
  *((_OWORD *)CapabilitySid + 2) = 0i64;
  *(_OWORD *)CapabilityGroupSid = 0i64;
  *((_OWORD *)CapabilityGroupSid + 1) = 0i64;
  *((_QWORD *)CapabilityGroupSid + 4) = 0i64;
  *((_DWORD *)CapabilityGroupSid + 10) = 0;
  result = RtlUpcaseUnicodeString(&DestinationString, CapName, 1u);
  if( result >= 0 )
  {
    SymCryptSha256((UINT8 *)DestinationString.Buffer, DestinationString.Length, pbResult);
    LOBYTE(v6) = 9;
    RtlInitializeSid(CapabilityGroupSid, (SID_IDENTIFIER_AUTHORITY *)&RtlpNtAuthority, v6);
    v7 = *(_OWORD *)pbResult;
    *((_DWORD *)CapabilityGroupSid + 2) = 32;
    v8 = v17;
    *(_OWORD *)((char *)CapabilityGroupSid + 12) = v7;
    *(_OWORD *)((char *)CapabilityGroupSid + 28) = v8;
    v9 = 0;
    while( 1 )
    {
      v10 = v9 + 1;
      if( RtlEqualUnicodeString(&DestinationString, (UNICODE_STRING *)&RtlpLegacyApplicationCapabilityNames[2 * v9], 0) )
        break;
      ++v9;
      if( v10 >= 0xC )
        goto LABEL_8;
    }
    LOBYTE(v11) = 2;
    RtlInitializeSid(CapabilitySid, (SID_IDENTIFIER_AUTHORITY *)&RtlpAppPackageAuthority, v11);
    *((_DWORD *)CapabilitySid + 2) = 3;
    *((_DWORD *)CapabilitySid + 3) = v10;
LABEL_8:
    RtlFreeAnsiString(&DestinationString);
    if( v9 == 12 )
    {
      LOBYTE(v12) = 10;
      RtlInitializeSid(CapabilitySid, (SID_IDENTIFIER_AUTHORITY *)&RtlpAppPackageAuthority, v12);
      v13 = *(_OWORD *)pbResult;
      *((_DWORD *)CapabilitySid + 2) = 3;
      v14 = v17;
      *((_DWORD *)CapabilitySid + 3) = 1024;
      *((_OWORD *)CapabilitySid + 1) = v13;
      *((_OWORD *)CapabilitySid + 2) = v14;
    }
    return 0;
  }
  return result;
}

Referenced by:

CmpHiveRootSecurityDescriptor
DbgkpCreateNotificationEvent
PiUEventInitClientRegistrationContext
PopCreateNotificationName
RtlCapabilityCheck
SepVariableInitialization