AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Konsolenprogramm und Shutdown verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Konsolenprogramm und Shutdown verhindern

Offene Frage von "xpmd"
Ein Thema von xpmd · begonnen am 28. Jul 2008 · letzter Beitrag vom 29. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
xpmd

Registriert seit: 8. Jul 2008
9 Beiträge
 
#1

Konsolenprogramm und Shutdown verhindern

  Alt 28. Jul 2008, 14:54
Hi,

ich habe folgendes Szenario: Ich habe einen Dienst der normal unter SYSTEM-Account läuft. Auf diesen Dienst habe ich Codetechnisch keinen Zugriff. Dieser Dienst startet allerdings eine von mir geschriebene Konsolenanwendung. Nun muss diese Konsolenanwendung die Fähigkeit haben, wärend sie läuft, den Shutdown zu verhindern.

Da ich ja kein Fenster habe, und die Konsolenanwendung auch vom Dienst unter SYSTEM gestartet wird, kann ich die Lösung über WM_QueryEndSession vergessen.

Bleibt mir quasi noch die SetConsoleCtrlHandler und dort CTRL_SHUTDOWN_EVENT abfangen. Klappt soweit gut, Nur weiß ich jetzt nicht wie ich innerhalb dieses Events den Shutdown tatsächlich verhindern kann, so wie es über WMQueryEndSession gehen würde. Weiß jemand eine Lösung?

Grüße,
xpmd
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Konsolenprogramm und Shutdown verhindern

  Alt 28. Jul 2008, 15:23
Unter nt4-xp:

mit NtSetInformationProcess (und NtCreateToken) allen Prozessen das SeShutdownPrivilege entziehen.

Achtung: Die Funktion ist nicht von ms dokumentiert und funktioniert nicht mehr unter vista!


Und noch ne Lösung [einfacher und besser]:

Mit SuspendThread alle Threads von winlogon auf eis legen. dann dürfte das system erst runterfahren, wenn winlogon wieder mit ResumeThread aufgetaut wird.
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Konsolenprogramm und Shutdown verhindern

  Alt 28. Jul 2008, 15:43
Moin!

Es gibt aber gute Literatur dazu: http://www.amazon.de/exec/obidos/ASIN/1578701996/delphipraxis-21

MfG
Muetze1
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Konsolenprogramm und Shutdown verhindern

  Alt 28. Jul 2008, 15:55
Ein sehr gutes Buch!
Aber wie der Titel schon sagt nt/2k!

Unter vista lässt sich das AccessToken nicht mehr ändern wenn der Prozess läuft (wie ich letztens erfahren musste).

Von daher ist es besser Winlogon einzufrieren.
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Konsolenprogramm und Shutdown verhindern

  Alt 28. Jul 2008, 22:07
Zitat von new32:
mit NtSetInformationProcess (und NtCreateToken) allen Prozessen das SeShutdownPrivilege entziehen.
Warum schon wieder eine undokumentierte API-Funktion? Einfach beim Abfangen der Nachricht den entsprechenden Wert zurück geben. Allerdings kann man unter Vista das Runterfahren nicht mehr so einfach verhindern.

Warum darf der Rechner denn nicht runtergefahren werden, wenn dein Programm läuft?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: Konsolenprogramm und Shutdown verhindern

  Alt 28. Jul 2008, 23:09
Die Lösung über WM_QUERYENDSESSION geht doch nicht, weil er einen Service verwendet.

Mach doch einen Hook auf ExitWindowsEx.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Konsolenprogramm und Shutdown verhindern

  Alt 28. Jul 2008, 23:13
Was spricht gegen einen zusätzlichen Thread mit einem Fenster, über das man die Nachricht erhält?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Konsolenprogramm und Shutdown verhindern

  Alt 29. Jul 2008, 10:07
Zitat von Luckie:
Warum schon wieder eine undokumentierte API-Funktion?
Sorry mir is in dem Moment keine andere Lösung eingefallen.
Aber ich hab ja auch davon noch abgeraten; ich wollte es nur nicht komplett löschen, weil es ja auch ne Lösung ist.

Aber was spricht gegen die Methode mit winlogon?
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Konsolenprogramm und Shutdown verhindern

  Alt 29. Jul 2008, 10:08
2x auf absenden gedrückt sorry. Ich dachte der Browser würde hängen
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
xpmd

Registriert seit: 8. Jul 2008
9 Beiträge
 
#10

Re: Konsolenprogramm und Shutdown verhindern

  Alt 29. Jul 2008, 11:00
Zitat von new32:
Zitat von Luckie:
Warum schon wieder eine undokumentierte API-Funktion?
Sorry mir is in dem Moment keine andere Lösung eingefallen.
Aber ich hab ja auch davon noch abgeraten; ich wollte es nur nicht komplett löschen, weil es ja auch ne Lösung ist.

Aber was spricht gegen die Methode mit winlogon?
Hmm alle Winlogon-Threads schlafen lassen? Ist das nicht etwas brachial? Der PC sollte in der Zeit eigentlich ganz normal weiter arbeiten können. Im Hintergrund läuft währenddessen eine Software-Installation.


Zitat von new32:
Unter nt4-xp:

mit NtSetInformationProcess (und NtCreateToken) allen Prozessen das SeShutdownPrivilege entziehen.

Achtung: Die Funktion ist nicht von ms dokumentiert und funktioniert nicht mehr unter vista!


Und noch ne Lösung [einfacher und besser]:

Mit SuspendThread alle Threads von winlogon auf eis legen. dann dürfte das system erst runterfahren, wenn winlogon wieder mit ResumeThread aufgetaut wird.
Wär für XP ne Lösu8ng. Undokumentierte API-Funktionen will ich aber eigentlich vermeiden. Für Vista gibts ja die neue Shutdown-API. Mit der könnt ich mir schon ne Lösung vorstellen. Aber Vista hat auch eine undokumentierte CancelShutdown Funktion




Zitat von Zacherl:
Die Lösung über WM_QUERYENDSESSION geht doch nicht, weil er einen Service verwendet.

Mach doch einen Hook auf ExitWindowsEx.
Hab mich noch überhaupt nicht mit Hooks beschäftigt. Wär evtl ne Lösung aber wie gesagt noch ein absolut unberührtes Thema für mich.


Zitat von Apollonius:
Was spricht gegen einen zusätzlichen Thread mit einem Fenster, über das man die Nachricht erhält?
Hatte ich schon probiert. Komischerweise erhielt das Fenster keine Message. Lags evtl daran dass das Konsolenprogramm eben von einem Dienst unter SYSTEM gestartet wurde, und das Fenster unsichtbar ist.? Oder hab ich da was im Code verpeilt, werds mir nochmal anschaun.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:10 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