RtlDeriveCapabilitySidsFromName
NTSTATUS __stdcall RtlDeriveCapabilitySidsFromName(
_UNICODE_STRING *CapName,
VOID *CapabilityGroupSid,
VOID *CapabilitySid){
NTSTATUS result;
__int128 v6;
__int128 v7;
unsigned int v8;
unsigned int v9;
__int128 v10;
__int128 v11;
_UNICODE_STRING DestinationString;
UINT8 pbResult[16];
__int128 v14;
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);
RtlInitializeSid(CapabilityGroupSid, (_SID_IDENTIFIER_AUTHORITY *)&RtlpNtAuthority, 9u);
v6 = *(_OWORD *)pbResult;
*((_DWORD *)CapabilityGroupSid + 2) = 32;
v7 = v14;
*(_OWORD *)((char *)CapabilityGroupSid + 12) = v6;
*(_OWORD *)((char *)CapabilityGroupSid + 28) = v7;
v8 = 0;
while( 1 )
{
v9 = v8 + 1;
if( (unsigned __int8)RtlEqualUnicodeString(
&DestinationString,
(PCUNICODE_STRING)&RtlpLegacyApplicationCapabilityNames[2 * v8],
0) )
break;
++v8;
if( v9 >= 0xC )
goto LABEL_8;
}
RtlInitializeSid(CapabilitySid, (_SID_IDENTIFIER_AUTHORITY *)&RtlpAppPackageAuthority, 2u);
*((_DWORD *)CapabilitySid + 2) = 3;
*((_DWORD *)CapabilitySid + 3) = v9;
LABEL_8:
RtlFreeAnsiString(&DestinationString);
if( v8 == 12 )
{
RtlInitializeSid(CapabilitySid, (_SID_IDENTIFIER_AUTHORITY *)&RtlpAppPackageAuthority, 0xAu);
v10 = *(_OWORD *)pbResult;
*((_DWORD *)CapabilitySid + 2) = 3;
v11 = v14;
*((_DWORD *)CapabilitySid + 3) = 1024;
*((_OWORD *)CapabilitySid + 1) = v10;
*((_OWORD *)CapabilitySid + 2) = v11;
}
return 0;
}
return result;
}Referenced by:
CmpHiveRootSecurityDescriptor
DbgkpCreateNotificationEvent
PiUEventInitClientRegistrationContext
PopCreateNotificationName
RtlCapabilityCheck
SepVariableInitialization