AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SetDefaultPrinterA mit SYSTEM-Rechten unter Vista

SetDefaultPrinterA mit SYSTEM-Rechten unter Vista

Ein Thema von CodeX · begonnen am 15. Nov 2008 · letzter Beitrag vom 16. Nov 2008
Antwort Antwort
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#1

SetDefaultPrinterA mit SYSTEM-Rechten unter Vista

  Alt 15. Nov 2008, 23:20
Ich habe das Problem, dass die Funktion SetDefaultPrinterA mit 1801 (Unbekannter Drucker) fehlschlägt, wenn das aktive Programm unter Vista mit SYSTEM-Rechten läuft (durch Service gestartet).

Unter XP funktioniert das gleiche Szenario problemlos. Unter Vista geht es auch, wenn das Programm mit normalen Rechten läuft.

Dem ganzen liegt die Funktion zu Grunde, die ich hier mit großer Hilfe von Dezipaitor erarbeitet habe. Das gestartete Programm hat damit also auch die Umgebung des angemeldeten Benutzers. Trotzdem werden die vorhandenen Drucker nicht erkannt. Der einzige Druckername, der als Fehlercode 0 liefert, ist "Microsoft XPS Document Writer". Da sich das aber dennoch nicht auf den Standarddrucker auswirkt, nehme ich an, dass hier eine andere Druckerliste angesprochen wird, als die des aktuellen Benutzers.
Woran könnte das liegen? Was kann man da machen?

Wenn jemand das Problem rekonstruieren will, bitte beispielsweise diese Funktion in ein Testprogramm packen und dieses mit diesem Tool von Dezipaitor mit SYSTEM-Rechten unter Vista starten.

(edit: Link korrigiert)
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

Re: SetDefaultPrinterA mit SYSTEM-Rechten unter Vista

  Alt 16. Nov 2008, 08:50
Zitat:
Das gestartete Programm hat damit also auch die Umgebung des angemeldeten Benutzers.
Das sieht nur so aus. Die Session ID ist dieselbe, aber sonst nutzt das Programm die Registrierungseinträge von SYSTEM.
Wenn ich notepad starte und drucken will, dann bekomme ich die im System installierten Drucker. Drucker von meinem Benutzer sind da nicht drin. Zudem darf man nicht erwarten, dass mit SYSTEM alles funktioniert. Da hat man soviel Macht, dass andere Komponenten mit diesem Account erst garnicht kommunizieren können - so funktioniert bei mir kein einziger Drucker. Hmm...

Aber warum willst du ein Prog mit SYSTEM Rechten standardmäßig laufen lassen? So ein Programm sollte wirklich nur zum Entwickeln und "ausprobieren" sein.


PS.
Der Link zur DelphiLibrary funkz nicht.

PPS.
Hast du den benutzer personifiziert?? (Impersonate)
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#3

Re: SetDefaultPrinterA mit SYSTEM-Rechten unter Vista

  Alt 16. Nov 2008, 15:13
Zitat von Dezipaitor:
Aber warum willst du ein Prog mit SYSTEM Rechten standardmäßig laufen lassen? So ein Programm sollte wirklich nur zum Entwickeln und "ausprobieren" sein.
Darüber hatten wirs ja nun schon ein paar Mal. Das Programm ermöglicht dem Benutzer das Ändern diverser System-Einstellungen, ohne dass er dabei mit höheren Rechten eingeloggt sein muss oder irgendwelche Administrator-Passwörter für RunAs o.ä. kennen muss. Die Lösung mit dem Service funktioniert auch recht gut so weit und bis auf die Sache mit dem Drucker habe ich auch alles soweit anpassen können, dass es funktioniert.

Zitat von Dezipaitor:
PS. Der Link zur DelphiLibrary funkz nicht.
Sorry, hab ich korrigiert.

Zitat von Dezipaitor:
Hast du den benutzer personifiziert?? (Impersonate)
Ähm, nein, die Funktion ist so wie die verlinkte aus dem damaligen Thread. Naja, drum herum sind schon noch ein paar Sachen, wie z.B. zum Prüfen der Signatur etc.
Hast Du denn bei Deinem RunAsSYS gemacht? Das Resultat (ob durch meinen Service oder durch das Tool) ist ja wie gesagt das gleiche.

Edit: Ach nein, Du meinst im Programm selbst, oder? Nein, habe ich auch nicht. Ich werde das mal testen...
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#4

Re: SetDefaultPrinterA mit SYSTEM-Rechten unter Vista

  Alt 16. Nov 2008, 17:27
Mit ImpersonateLoggedOnUser geht das. Vielen Dank für den Hinweis!
Ich dachte, dass das Mitgeben des EnvironmentBlocks im Prinzip das gleiche tut...
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

Re: SetDefaultPrinterA mit SYSTEM-Rechten unter Vista

  Alt 16. Nov 2008, 18:34
CreateProcessAsUser lässt einen neuen Prozess mit dem Token laufen.
Willst du Funktionen unter diesem Benutzer laufen lassen, dann muss es mit ImpersonateLoggedonUser gemacht werden. Dann bekommt der Thread das Token zugeteilt, welches die Funktionen verwenden - aber nicht alle! Damit nutzten die Funktionen auch die Registry-Einträge dieses Benutzers und damit alle seine Einstellungen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz