Win32 a Win64 > Obecné

Odstranění DENY ACE z ACL

(1/1)

pepak:
Ahoj, nemáte někdo tušení, jak odstranit DENY ACE (access control entry) z ACL (access control list)? Přidat ACE do ACL je triviální, stačí správně zavolat SetEntriesInAcl. Pro odebrání ACE z ACL jsem vhodnou funkci nenašel, ale pro ALLOW ACE by to mělo jít udělat také přes SetEntriesInAcl s access mode REVOKE_ACCESS. Pro odebrání DENY ACE nejde použít ani tohle. Jediný způsob, o kterém vím, spočívá v tom, že si vytvořím nový ACL, zjistím si počet ACE v původním ACL pomocí GetAclInformation, následně procházím starý ACL, vyzvedávám si ACE pomocí GetAce a přidávám ho do nového ACL na správné místo pomocí AddAce. Přitom přeskočím ten ACE, kterého se chci zbavit. Zde ale narážím na problém, že nedokážu rozpoznat ten správný ACE - hledám nějaké "compare ACE" nebo tak něco, ale nedaří se... Netušíte někdo? Díky.

pepak:
Tak nic, už jsem to prorazil. Je potřeba to dělat přes GetExplicitEntriesFromAcl a následně v nich vyhledávat, přes GetAcl a spol. se mi to nepodařilo. Pozor na to, Delphi nejméně do 7 včetně mají v unitě AccCtrl blbě nadefinované struktury (chybí MINENUMSIZE 4) a Delphi nejméně do 10 včetně mají v unitě AccApi blbě nadeklarované funkce (přinejmenším GetNamedSecurityInfo, SetEntriesInAcl).

Navigace

[0] Seznam témat

Přejít na plnou verzi