GetLastError ruft man nur dann auf, wenn eine
API Funktion einen Fehler über den Rückgabewert meldet.
Es ist nämlich nicht definiert, dass LastError auf 0 gesetzt wird im Erfolgsfall.
Daher kann es auch im Erfolgsfall einen Wert ungleich 0 von GetLastError zurückgegeben werden.
Self-Relative SDs ist ein SD, der aus einem Stück Speicher besteht, der alles notwendige enthält. Diese Art wird
von
API Funktionen zurückgegeben. Manche
API Funktionen melden einen Fehler, wenn man so einen angibt.
Absolute SD ist ein SD, der zwar auch ein Speicherblock ist, aber nur Zeiger auf den Inhalt enthält. So zeigen
Owner, Group, DACL und SACL alle auf anderen Speicher. Diese Art von SD wird nur durch den Benutzer erstellt
und an
API Funktionen übergeben.
Wie sieht denn nun dein String aus?
Meinst du mit DACL-Flags diese?: DACL_SECURITY_INFORMATION or PROTECTED_DACL_SECURITY_INFORMATION
PROTECTED_DACL_SECURITY_INFORMATION verwendet man, wenn übergeordnete Objekte ihre SD nicht ins aktuelle Objekt einbringen/vererben sollen. Soweit ich weiß unterstützt MS automatische Vererung nur bei Datei und Registry.
Wenn GetSecurityInfo bei einem Objekt UNPROTECTED_DACL_SECURITY_INFORMATION findet und es unterstützt Vererbund, dann sucht es beim Vorgänger rekursiv nach der DACL, bis es eine findet, die nicht vererbt ist. Dann wird die vererbte DACL zurückgegeben.
Man kann dieses System auf eigene Objekte übernehmen.