@@ -205,7 +205,7 @@ public static string LookupPackageName(Sid sid)
205205 {
206206 if ( ! IsPackageSid ( sid ) )
207207 {
208- throw new ArgumentException ( "Sid not a package sid" , " sid" ) ;
208+ throw new ArgumentException ( "Sid not a package sid" , nameof ( sid ) ) ;
209209 }
210210
211211 return _package_names . GetOrAdd ( sid , _ =>
@@ -246,7 +246,7 @@ public static string LookupDeviceCapabilityName(Sid sid)
246246 {
247247 if ( ! IsCapabilitySid ( sid ) )
248248 {
249- throw new ArgumentException ( "Sid not a capability sid" , " sid" ) ;
249+ throw new ArgumentException ( "Sid not a capability sid" , nameof ( sid ) ) ;
250250 }
251251
252252 var device_capabilities = GetDeviceCapabilities ( ) ;
@@ -257,6 +257,24 @@ public static string LookupDeviceCapabilityName(Sid sid)
257257 return null ;
258258 }
259259
260+ /// <summary>
261+ /// Convert a package SID to a capability.
262+ /// </summary>
263+ /// <param name="sid">The package SID to convert.</param>
264+ /// <returns>The package SID as a capability.</returns>
265+ public static Sid PackageSidToCapability ( Sid sid )
266+ {
267+ if ( ! IsPackageSid ( sid ) )
268+ {
269+ throw new ArgumentException ( "Sid not a package sid" , nameof ( sid ) ) ;
270+ }
271+
272+ uint [ ] sub_authorities = sid . SubAuthorities . ToArray ( ) ;
273+ // Convert to a package SID.
274+ sub_authorities [ 0 ] = 3 ;
275+ return new Sid ( sid . Authority , sub_authorities ) ;
276+ }
277+
260278 /// <summary>
261279 /// Convert a security descriptor to SDDL string
262280 /// </summary>
@@ -2472,6 +2490,7 @@ private static SidName GetNameForSidInternal(Sid sid)
24722490 {
24732491 switch ( sid . SubAuthorities . Count )
24742492 {
2493+ case 12 :
24752494 case 8 :
24762495 uint [ ] sub_authorities = sid . SubAuthorities . ToArray ( ) ;
24772496 // Convert to a package SID.
0 commit comments