Zitat von
blackdrake:
Irgendwie ist das alles ein bisschen unkonsistent. Es hieß, dass S... inkompatibel ist mit PS..., weswegen ich einfach den Pointer von S... genommen habe, also einfach ein @ daran gehängt. Eigentlich sollte ja der Name vor dem "P" eindeutig sein, oder? Ich habe ja lediglich einen Pointer gegeben, wo ein Pointer verlangt wurde. Das verwirrt mich irgendwie.
Ich gebe ja zu, dass es verwirrend ist. Diese Definition:
Delphi-Quellcode:
Pxxx = ^XXX;
LPxxx = ^XXX;
wurde konsequent überall verwendet, und ist erst jetzt durch die unterschiedliche Verwendung in der JWA und
JWSCL zum Problem geworden. Eigentlich sollte es dasselbe sein und deshalb habe ich es auch geändert (
SVN: 0.9.2a + trunk).
Zitat von
blackdrake:
Hört sich ein bisschen kompliziert an. Ich habe mit dem "nil" ein Problem: Ich denke, dass "nil" soviel wie "leere
ACL-Liste" bedeutet. Und da Windows bei Dateirechten die Regel Deny-Before-Allow verwendet, müsste eine leere Liste einen Zweifelsfall darstellen (in diesem Fall einen nicht definierten Fall 0-0), bei dem Windows sich für Deny entscheiden muss (deswegen vielleicht der Fehler "mapping file could not be accessed"?)
Denke dir einfach:
nil = garkeine DACL-Klasse und damit Vollzugriff für jeden
leere DACL-Klasse und damit Verweigerung für jeden
Zitat von
Apollonius:
Soweit ich das weiß, sind Mandatory Label und Integrity Label tatsächlich Synonyme.
Das ganze Prinzip nennt man "Integrity Level".
Prozesse haben ein "Integrity Level" definiert in ihrem Token (Gruppe). Integrity Levels (=Verbindlichkeitsstufen) sind vordefinierte Benutzergruppen,
die jedoch nicht über den Benutzermanager zuweisbar sind. Hier sind die SIDs:
Delphi-Quellcode:
const JwLowIL = 'S-1-16-4096';
JwMediumIL = 'S-1-16-8192';
JwHighIL = 'S-1-16-12288';
JwSystemIL = 'S-1-16-16384';
JwProtectedProcessIL = 'S-1-16-20480';
In DACLs kommen Mandatory Labels (Verbindliche Beschriftungen) = ACE zum Einsatz, die eine Verbindlichkeitsstufen aufnehmen.
Man verwendet also eine "Verbindliche Beschriftung" TJwSystemMandatoryAccessControlEntry und definiert im Konstruktor, welche Stufe es haben soll (und noch ein Flag).
Delphi-Quellcode:
MANDATORY_LEVEL = (
MandatoryLevelUntrusted, {= 0}
MandatoryLevelLow,
MandatoryLevelMedium,
MandatoryLevelHigh,
MandatoryLevelSystem,
MandatoryLevelSecureProcess, //MS vorbehalten
MandatoryLevelCount);
Das sind die Stufen für die verbindliche Beschriftung. Daher werden sie von MS auch verbindliche Stufen genannt (nur um noch mehr Verwirrung zu stiften). Man hätte auch die Verbindlichkeitsstufen (=Gruppen) direkt als ACE einfügen und es mit dem ACE Typ "Integrity" versehen können (So macht es die
JWSCL).
Die Flags (MandatoryPolicy) definieren, ob andere Objekte mit einem kleineren I.Level, das eigene Objekt schreiben, lesen und/oder ausführen können. Man setzt es, um dies zu verbieten.
Delphi-Quellcode:
type
TJwMandatoryPolicy = (mpNoWriteUp, mpNoReadUp, mpNoExecuteUp);
TJwMandatoryPolicyFlagSet = set of TJwMandatoryPolicy;
TJwSystemMandatoryAccessControlEntry setzt eine leere Policy Menge!