@@ -307,6 +307,7 @@ void DeleteObjectDACL(HANDLE hObject)
307
307
}
308
308
309
309
// add necessary permissions for "Authenticated Users" group (all non-anonymous users)
310
+ // and for "All Application Packages", "All Restricted Application Packages" for UWP support
310
311
void AdjustObjectDACL (HANDLE hObject)
311
312
{
312
313
ACL* pOldDACL;
@@ -317,20 +318,41 @@ void AdjustObjectDACL(HANDLE hObject)
317
318
SID_IDENTIFIER_AUTHORITY authNt = SECURITY_NT_AUTHORITY;
318
319
AllocateAndInitializeSid (&authNt, 1 , SECURITY_AUTHENTICATED_USER_RID, 0 , 0 , 0 , 0 , 0 , 0 , 0 , &pSid);
319
320
320
- EXPLICIT_ACCESS ea = {};
321
- ea.grfAccessMode = GRANT_ACCESS;
322
- ea.grfAccessPermissions = GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE;
323
- ea.grfInheritance = NO_INHERITANCE;
324
- ea.Trustee .TrusteeType = TRUSTEE_IS_GROUP;
325
- ea.Trustee .TrusteeForm = TRUSTEE_IS_SID;
326
- ea.Trustee .ptstrName = static_cast <LPTSTR>(pSid);
321
+ PSID pAnyPackageSid = nullptr ;
322
+ SID_IDENTIFIER_AUTHORITY SIDAuthAppPackage = SECURITY_APP_PACKAGE_AUTHORITY;
323
+ AllocateAndInitializeSid (&SIDAuthAppPackage, SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT,
324
+ SECURITY_APP_PACKAGE_BASE_RID, SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE,
325
+ 0 , 0 , 0 , 0 , 0 , 0 ,
326
+ &pAnyPackageSid);
327
+
328
+ PSID pAnyRestrictedPackageSid = nullptr ;
329
+ AllocateAndInitializeSid (&SIDAuthAppPackage, SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT,
330
+ SECURITY_APP_PACKAGE_BASE_RID, SECURITY_BUILTIN_PACKAGE_ANY_RESTRICTED_PACKAGE,
331
+ 0 , 0 , 0 , 0 , 0 , 0 ,
332
+ &pAnyRestrictedPackageSid);
333
+
334
+ EXPLICIT_ACCESS ea[3 ] = {};
335
+ for (auto & item : ea)
336
+ {
337
+ item.grfAccessMode = GRANT_ACCESS;
338
+ item.grfAccessPermissions = GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE;
339
+ item.grfInheritance = NO_INHERITANCE;
340
+ item.Trustee .TrusteeType = TRUSTEE_IS_GROUP;
341
+ item.Trustee .TrusteeForm = TRUSTEE_IS_SID;
342
+ }
343
+
344
+ ea[0 ].Trustee .ptstrName = static_cast <LPTSTR>(pSid);
345
+ ea[1 ].Trustee .ptstrName = static_cast <LPTSTR>(pAnyPackageSid);
346
+ ea[2 ].Trustee .ptstrName = static_cast <LPTSTR>(pAnyRestrictedPackageSid);
327
347
328
348
ACL* pNewDACL = nullptr ;
329
- SetEntriesInAcl (1 , & ea, pOldDACL, &pNewDACL);
349
+ SetEntriesInAcl (std::size (ea), ea, pOldDACL, &pNewDACL);
330
350
331
351
Win32::SetSecurityInfo (hObject, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nullptr , nullptr , pNewDACL, nullptr );
332
352
333
353
FreeSid (pSid);
354
+ FreeSid (pAnyPackageSid);
355
+ FreeSid (pAnyRestrictedPackageSid);
334
356
LocalFree (pNewDACL);
335
357
LocalFree (pSD);
336
358
}
0 commit comments