Re: Sicherheitseinstellungen von Dateien ändern
30. Sep 2007, 00:25
mit dem If-Ausdruck wird überprüft, ob ein Bit gesetzt wurde.
Das macht man, indem man eine Zahl (die aus Bits besteht) mit einer anderen Zahl, die nur ein bestimmtes Bit gesetzt hat, verundet.
nehmen wir diese Zahl :
1011 und wir wollen das erste Bit von rechts (wir starten beim Zählen mit 0!) herausfinden, ob es gesetzt ist.
also 1011 and 0010 = 0010
Das Ergebnis ist genau dieselbe Zahl, die auf der rechten Seite von and steht.
Wenn das gesuchte Bit nicht gesetzt ist, so ergibt sich das:
1011 and 0100 = 0000 - da hier eine andere Zahl als die rechts von and als Ergebnis rauskommt, wissen wir, dass das gesuchte Bit nicht gesetzt ist.
SE_DACL_AUTO_INHERITED wird übrigens nur gesetzt, wenn automatische Vererbung unterstützt wird. Ist es aktiv, bedeutet es, dass Änderungen automatisch auf Unterobjekte weitergegeben werden, wenn diese erben.
P.S.
mir ist aufgefallen, dass im obrigen Code nur der Besitzer der Datei ausgelesen wird.
GetFileSecurity(PChar(FiName),OWNER_SECURITY_INFORMATION,psd,0,dwLen);
Das müsste eigentlich so gehen:
GetFileSecurity(PChar(FiName),OWNER_SECURITY_INFORMATION or DACL_SECURITY_INFORMATION,psd,0,dwLen);
Um die ÜberwachungsACL lesen zu können muss man dann eben noch SACL_SECURITY_INFORMATION dazunehmen. Zusätzlich muss man noch das Privileg SE_SECURITY_NAME aktivieren. Das Privileg haben aber nur Administratoren.
Christian
|