SaferCreateLevel SAFER_LEVELID_UNTRUSTED: Die Anwendung konnte nicht korrekt gestartet werden (0xc0000142)
ich versuche zu starten, einen Prozess (alle - Verfahren) als "nicht vertrauenswürdigen" mit der SaferCreateLevel
mit der SAFER_LEVELID_UNTRUSTED
sicherer Ebene:
Können Programme ausführen, mit Zugang nur zu den Ressourcen gewährt zu öffnen, die bekannten Gruppen, die Sperrung des Zugangs zu Administrator und Power-User Privilegien und persönlich gewährten Rechte.
Mit dem code von Michael Howards DropMyRights MSDN Artikel (Das surfen im Web und das Lesen von E-mail-Sicher wie ein Administrator) der pseudo-code ist:
//get a handler on a Safer level
hSaferLevel = SaferCreateLevel(SAFER_SCOPEID_USER, SAFER_LEVELID_UNTRUSTED);
//Create a security token out of the safer level handle
hSecurityToken = SaferComputeTokenFromLevel(hSaferLevel);
//Create process as user
CreateProcessAsUser(hSecurityToken, "myapp.exe");
Außer, dass der Prozess nicht gestartet:
Die Anwendung konnte nicht korrekt gestartet werden (0xc0000142).
Was ist denn hier Los?
Hinweis: das Starten eines Prozesses auf die SAFER_LEVELID_NORMALUSER
gut funktioniert:
Können Programme ausführen als Benutzer, der nicht über Administrator oder Power-User Benutzer-Rechte. Software kann den Zugriff auf Ressourcen zugänglich durch normale Benutzer.
Obwohl da schon jeder läuft als "Normalen Benutzer" in diesen Tagen, es gibt wenig Wert in es.
Meine Anwendung ist in der Lage zu handhaben die Ausführung als "niedrig" user.
Ziel war es, den Prozess laufen mit der gleichen privelages als MandatoryIntegrity\Low Prozess bekommen würde (obwohl nicht markiert als "low"). Also habe ich getestet.
ich verwendet icacls
zu markieren meine Anwendung ausführen Mandatory Integrity Level\Low:
C:\Develop>icacls RTMS.exe /setintegritylevel Low
processed file: RTMS.exe
Successfully processed 1 files; Failed processing 0 files
Und meine Anwendung startet korrekt und läuft bei der niedrigen integrity level:
Während ich vielleicht in der Lage zu verwenden, die AddMandatoryAce
API, oder Geige mit den ACLs in den security-token selbst, ich bin gespannt, was sich mit einem UNTRUSTED
Sicherer Niveau - und das ist, warum ich kann nicht alles bekommen, um zu starten.
Hinweis: Auf Windows 7, wenn Sie daneben calc
oder notepad
als /setintegritylevel low
Sie wird nicht mehr starten (keine Fehlermeldung, einfach nie erscheinen), auch obwohl in diesem MSDN-Artikel spricht über die Verwendung von calc wie ein test der low integrity level:
Du musst angemeldet sein, um einen Kommentar abzugeben.
0xc0000142
=STATUS_DLL_INIT_FAILED
Vielleicht Process Monitor wird dir einige Hinweise geben?
UNTRUSTED
ist wohl zu eingeschänkter für die meisten Dinge. Sie können nicht auf Ihr eigenes Profil, z.B.:Haben Sie versucht
CONSTRAINED
?Andere alternative ist die Verwendung CreateRestrictedToken und berechnen Sie ein token, das ist nur restriktiv genug.
Ich vermute, dass MS irgendwie vergessen, über den Safer*Level-Funktionen in NT6 und wir haben die Benutzerkontensteuerung statt. (Der RunAs-GUI-Dialogfeld auf XP hatte, der meinen computer schützen option, aber das Dialogfeld ist jetzt Weg (Auch in XP, es war zu restriktiv für die meisten Dinge))
constrained
; es funktioniert, aber es hat auch mehr Berechtigungen, die ich möchte. Auf der anderen Seiteuntrusted
scheint zu restriktiv. ich denke, es ist durchaus denkbar, dass es keine Sicherer - Ebene entspricht, das die Erlaubnis gibt, zu einemMandatoryIntegrityLevel\Low
Prozess.Low
mehr; ich glaube nicht, zu versuchen, um zu sehen, warum meine Anwendung (die starten können alsLow
) Fehler beim starten der als "eingeschränkt". Wahrscheinlich alle adds bis auf die Tatsache, dass keineSafer
Ebene kann verwendet werden, um imitieren die Einschränkungen derLow
.SaferComputeTokenFromLevel()
zu erstellenSAFER_LEVELID_NORMALUSER
token und verwenden Sie dannSetTokenInformation()
um die token ' s Integrity Level Low.