Zeer veel gehoorde misconceptie, ook sterk levende bij de techneuten hier blijkbaar: het schrijven naar speciale gedeeltes van partities / register / bijzondere directories etc. is niet precies datgene dat een UAC melding oplevert als UAC aan staat! Dat geldt namelijk alleen maar als je dat handmatig als gebruiker probeert, of als *CORRECT* geschreven applicatie. Ik zal hieronder proberen verder uitleg te geven over dit belangrijke onderscheid.
Als je een programma wilt ontwikkelen dat naar dergelijke omgevingen schrijft, zoals bijvoorbeeld een process explorer kloon, of een registertweaker, of een geheugenopschoner, etc. (of natuurlijk een virus

) zul je in je code Process Elevation moeten aanvragen. Dat was ook al in Windows XP zo, maar daar regelde XP het vanzelf als het gebruikersaccount waaronder de operatie liep een admin account was. Anyway, dat is hetgene dat vanaf Vista een UAC melding triggert. Een call voor Process Elevation zorgt dat het programma tegen Windows zegt: "Hallo, ik wil iets potentiëel gevaarlijks gaan doen, daarvoor heb ik als proces nodig dat ik administrator rechten krijg." Windows gaat vervolgens bekijken of hij zelf die beslissing moet nemen of dat hij het bij de gebruiker neerlegt. Vista UAC legt het altijd bij de gebruiker neer als UAC aan staat, en nooit als 't uit staat. W7 UAC verdeelt 't onder in categorieën en die kun je dus kiezen, dat is die slider.
Maar nu iets belangrijks: vraag je géén Process Elevation aan en ga je bijvoorbeeld of proberen een proces te killen, een RunAs te gebruiken, een service te installeren, een registerwijziging te doen, of een door UAC beveiligd bestand te wijzigen/verwijderen, dan zullen veel M$ API's vanaf Vista oftewel zelf triggeren dat er alsnog process elevation wordt aangevraagd via UAC, oftewel altijd een TRUE (of i.i.g. non-false maar bogus) waarde retourneren terwijl ze het klusje zelf juist NIET uitvoeren. En dàt is juist een van de toffe dingen eraan! In Windows XP vond automatische process elevation plaats, dat werd altijd toegestaan onder een admin account, en nooit (tenzij handmatig bij 'uitvoeren als' en dan een admin account) toegestaan bij niet-admin! Helaas, zoals gezegd, was je vrijwel standaard een absolute admin in XP, zeker als thuisgebruiker.
De wijziging dat er WEL een TRUE waarde wordt teruggegeven maar NIET het werk gedaan wordt zonder Process Elevation, zorgt ervoor dat malware die zo mooi van de automatische P.E. gebruik maakten, in één klap niet meer werken in Vista (en hoger). Vista antwoordt bij een diepe systeemkritische opdracht zonder expliciet aangevraagde process elevation: "oh, jij wilt in het register tweaken? Geen probleem joh! Ja hoor, 't is gelukt. (Ga nou maar weer lekker buiten spelen.)" terwijl de wijziging dus niet plaatsvindt. De niet-UAC-aware malware denkt dat de schade is aangericht, maar 't is (lekker puh) toch lekker niet zo.
Dit werkt overigens alleen maar bij directe diepe calls - de software die via dingen als abstraction layers of virtual machines werkt (ouwe meuk zoals W9x apps/games) zal gewoon een fout oplopen, en een gebruikersactie zal ook gewoon een fout oplopen, en een netjes aangevraagde operatie vanuit legitieme software zal ook meestal een fout oplopen (of UAC triggeren dus), zodat het debuggen van software die geen geniepige dingen doet niet zo moeilijk is en je tenminste gewoon een foutmelding aan je gebruiker kunt geven i.p.v. dat je moet gissen/hopen of met omwegen moet controleren of je opdracht is gelukt.
Ik ben dit alles door schade en schande wijs geworden i.v.m. een UITGEBREID script dat ik jaren geleden ten tijde van XP ben begonnen te ontwikkelen om klanten te helpen met shortcuts naar belangrijke beveiligingsinstellingen, instellingen van geleverde antivirussoftware, en geautomatiseerde operaties van system tools zoals hijackthis, ccleaner, en vele vele SysInternals Suite tools.
/edit: overigens, voor al die lui die zo mekkeren dat UAC zo'n domme operatie is van M$: ik vind dat onzin, het is een poging de wereld te verbeteren. Wellicht om rotzooi op te ruimen die ze ZELF in het verleden hebben veroorzaakt met te ver doorgeslagen user friendliness (is trouwens ook gewoon omgekeerd evenredig met security IMHO, 't is helaas niet anders), maar toch is het lovenswaardig. Punt is: UAC IS NIET BEDOELD OM GEBRUIKERTJE TE PESTEN! Het is bedoeld om te beveiligen, en wel, om precies te zijn, door ontwikkelaars te dwingen zorgvuldig om te springen met het OS, en dàn en slechts dàn als het ècht niet anders kan, systeemkritische dingen te doen (zoals naar de program files schrijven of zo) en anders een niet-systeemkritische oplossing te verzinnen. Je kunt zeggen wat je wilt maar het ligt niet alleen aan M$ dat de Windows wereld wat dit betreft zo "onveilig" is, het ligt ook voor een deel aan luie of onwetende ontwikkelaars die gewoon niet willen opletten op security. Als je programma tegenwoordig drie, vier keer een UAC triggert dan heb je 99% van de keren gewoon iets op niet-voldoende-doordachte manier aangepakt (of je bent een system-related tool of een virus aan het ontwikkelen natuurlijk

).
[Reactie gewijzigd door Verwijderd op 22 juli 2024 17:46]