JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=de03b4bb3d75e998b9e9b1f53fbd698cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

InitialateSystemShutdown()

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mäscht
JLI'ler



Anmeldedatum: 22.05.2003
Beiträge: 150
Wohnort: Bad Hofgastein\Österreich
Medaillen: Keine

BeitragVerfasst am: 03.12.2003, 12:15    Titel: InitialateSystemShutdown() Antworten mit Zitat

Wie funktionier diese Funktion! Ich habe ihr folgende Parameter übergegen: InitalialateSystemShutdown(NULL,NULL,0,FALSE,FALSE)!
_________________
Motz´z mi net o, i bin ofänga!! AEIOU für immer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 03.12.2003, 12:25    Titel: Antworten mit Zitat

Was soll denn die Funktion machen und was funktioniert nicht richtig?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Zo0oL
Mini JLI'ler



Anmeldedatum: 02.12.2003
Beiträge: 11
Wohnort: Pb
Medaillen: Keine

BeitragVerfasst am: 03.12.2003, 12:34    Titel: Antworten mit Zitat

"The InitiateSystemShutdown function initiates a shutdown and optional restart of the specified computer.


Parameters:

lpMachineName
Pointer to the null-terminated string that specifies the network name of the computer to shut down. If lpMachineName is NULL or points to an empty string, the function shuts down the local computer.

lpMessage
Pointer to a null-terminated string that specifies a message to display in the shutdown dialog box. This parameter can be NULL if no message is required.

dwTimeout
Specifies the time (in seconds) that the dialog box should be displayed. While this dialog box is displayed, the shutdown can be stopped by the AbortSystemShutdown function.
If dwTimeout is not zero, InitiateSystemShutdown displays a dialog box on the specified computer. The dialog box displays the name of the user who called the function, displays the message specified by the lpMessage parameter, and prompts the user to log off. The dialog box beeps when it is created and remains on top of other windows in the system. The dialog box can be moved but not closed. A timer counts down the remaining time before a forced shutdown. If the user logs off, the system shuts down immediately. Otherwise, the computer is shut down when the timer expires.
If dwTimeout is zero, the computer shuts down without displaying the dialog box, and the shutdown cannot be stopped by AbortSystemShutdown.


bForceAppsClosed
Specifies whether applications with unsaved changes are to be forcibly closed. If this parameter is TRUE, such applications are closed. If this parameter is FALSE, a dialog box is displayed prompting the user to close the applications.

bRebootAfterShutdown
Specifies whether the computer is to restart immediately after shutting down. If this parameter is TRUE, the computer is to restart. If this parameter is FALSE, the system flushes all caches to disk, clears the screen, and displays a message indicating that it is safe to power down."



(aus Microsoft MSDN)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 03.12.2003, 15:11    Titel: Antworten mit Zitat

Damit steht schonmal fest, dass ich keine Programme von Mäscht ausführen werde... hört sich sehr nach einem werdenden Scherzprogramm an. :P
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 03.12.2003, 20:49    Titel: Antworten mit Zitat

Quellcode [C#]:
Code:

using System;
using System.Runtime.InteropServices;

namespace IrgendeinNamespace {

  internal sealed class Services {

    private const uint EWX_LOGOFF=0;
    private const uint EWX_SHUTDOWN=1;
    private const uint EWX_REBOOT=2;
    private const uint EWX_POWEROFF=8;
    private const uint TOKEN_QUERY=8;
    private const uint TOKEN_ADJUST_PRIVILEGES=32;
    private const uint SE_PRIVILEGE_ENABLED=2;
    private struct LUID {
      public uint LowPart;
      public int HighPart;
    }

    private struct LUID_AND_ATTRIBUTES {
      public LUID Luid;
      public uint Attributes;
    }

    private struct TOKEN_PRIVILEGES {
      public uint PrivilegeCount;
      public LUID_AND_ATTRIBUTES Privileges;
    }

    [DllImport("Kernel32.dll", SetLastError=false)]
    private static extern uint GetCurrentProcess();
    [DllImport("Advapi32.dll", SetLastError=false)]
    private static extern int OpenProcessToken(uint ProcessHandle, uint DesiredAccess, out uint TokenHandle);
    [DllImport("Advapi32.dll", SetLastError=false)]
    private static extern int LookupPrivilegeValue(uint SystemName, string Name, out LUID Luid);
    [DllImport("Advapi32.dll", SetLastError=false)]
    private static extern unsafe int AdjustTokenPrivileges(uint TokenHandle, uint DisableAllPrivileges,
      TOKEN_PRIVILEGES* NewState, uint BufferLength, uint PreviousState, uint ReturnLength);
    [DllImport("User32.dll", SetLastError=false)]
    private static extern int ExitWindowsEx(uint Flags, uint Reason);

    public static unsafe bool SystemShutdown() {
      uint handle;
      TOKEN_PRIVILEGES tkp;
      if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, out handle)==0)
        return false;
      LookupPrivilegeValue(0, "SeShutdownPrivilege", out tkp.Privileges.Luid);
      tkp.PrivilegeCount=1;
      tkp.Privileges.Attributes=SE_PRIVILEGE_ENABLED;
      if(AdjustTokenPrivileges(handle, 0, &tkp, 0, 0, 0)==0)
        return false;
      if(ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF, 0xFFFFFFFF)==0)
        return false;
      return true;
    }

    public static unsafe bool SystemReboot() {
      uint handle;
      TOKEN_PRIVILEGES tkp;
      if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, out handle)==0)
        return false;
      LookupPrivilegeValue(0, "SeShutdownPrivilege", out tkp.Privileges.Luid);
      tkp.PrivilegeCount=1;
      tkp.Privileges.Attributes=SE_PRIVILEGE_ENABLED;
      if(AdjustTokenPrivileges(handle, 0, &tkp, 0, 0, 0)==0)
        return false;
      if(ExitWindowsEx(EWX_SHUTDOWN|EWX_REBOOT, 0xFFFFFFFF)==0)
        return false;
      return true;
    }

    public static unsafe bool SystemLogoff() {
      uint handle;
      TOKEN_PRIVILEGES tkp;
      if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, out handle)==0)
        return false;
      LookupPrivilegeValue(0, "SeShutdownPrivilege", out tkp.Privileges.Luid);
      tkp.PrivilegeCount=1;
      tkp.Privileges.Attributes=SE_PRIVILEGE_ENABLED;
      if(AdjustTokenPrivileges(handle, 0, &tkp, 0, 0, 0)==0)
        return false;
      if(ExitWindowsEx(EWX_LOGOFF, 0xFFFFFFFF)==0)
        return false;
      return true;
    }

  }

}

_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mäscht
JLI'ler



Anmeldedatum: 22.05.2003
Beiträge: 150
Wohnort: Bad Hofgastein\Österreich
Medaillen: Keine

BeitragVerfasst am: 05.12.2003, 12:53    Titel: Antworten mit Zitat

Eigentlich sollte es kein scherzprogramm werden! ich will einfach nur ein Programm schreiben, welches meine PC sperrt und mit dem man nur bestimmte programme ausführen kann(zB: Media Palyer)! damit will ich verhindern, dass mein Bruder in meiner abwesenheit vollen zugriff auf meinen PC hat! Die Funktion InitialateSystemShutdown() dient eigentlich nur dazu, dass man den PC ordnungsgemäß herunterfahren kann, ohne den Taskmanager oder die Taskleiste benutzen muss! (ist ja auch logisch, denn mit´m taskmanager hat er wieder vollen zugriff auf meinen PC)
_________________
Motz´z mi net o, i bin ofänga!! AEIOU für immer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 05.12.2003, 18:14    Titel: Antworten mit Zitat

Solche und ähnliche Programme hatte ich früher schon geschrieben. Sie müssen dann im Prinzip als alternative Schell eingetragen werden.
Man muß sich bei diesen Programmen aber genau überlegen, was man zuläßt - alleine der Datei-Öffnen-Dialog eines Beliebigen Programmes lässt vollen Zugriff zu. So könnte man, wenn man MS-Word zulässt von Word aus den Explorer starten und damit die Taskleiste...
Bester Schutz: Nicht sagen, dass/wie es funktioniert...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mäscht
JLI'ler



Anmeldedatum: 22.05.2003
Beiträge: 150
Wohnort: Bad Hofgastein\Österreich
Medaillen: Keine

BeitragVerfasst am: 09.12.2003, 11:54    Titel: Antworten mit Zitat

Könntest du mir vielleicht den Quelltext, den du weiter oben geschrieben hast irgendwie einfacher erklären? Ich komm irgendwie damit nicht so ganz zurecht! (mit ein paar erklärungen wäre fein!!) Danke
_________________
Motz´z mi net o, i bin ofänga!! AEIOU für immer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 09.12.2003, 21:40    Titel: Antworten mit Zitat

Dieser Quelltext ist ja schließlich auch C# und kein C++...
Aber eigendlich sollte das umsetzen kein Problem sein - naja, ich habe den Quelltext orginal von C++ auf C# umgesetzt.
Hier also nochmal der Original C++-Code aus der MSDN:
Code:
BOOL MySystemShutdown()
{
   HANDLE hToken;
   TOKEN_PRIVILEGES tkp;
 
   // Get a token for this process.
 
   if (!OpenProcessToken(GetCurrentProcess(),
        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
      return( FALSE );
 
   // Get the LUID for the shutdown privilege.
 
   LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
        &tkp.Privileges[0].Luid);
 
   tkp.PrivilegeCount = 1;  // one privilege to set   
   tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 
   // Get the shutdown privilege for this process.
 
   AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
        (PTOKEN_PRIVILEGES)NULL, 0);
 
   if (GetLastError() != ERROR_SUCCESS)
      return FALSE;
 
   // Shut down the system and force all applications to close.
 
   if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
      return FALSE;

   return TRUE;
}

Du musst dir vom System die Berechtigung zum Herunterfahren des Systemes erfragen. Dazu setzt man einige Privilegien. (LookupPrivilegeValue, AdjustTokenPrivileges). Damit man das machen kann benötigt man einen Prozesstoken. (OpenProcessToken, was auch immer das genau ist)
Ist dann kein Fehler aufgetreten, hat man die Berechtigung. (GetLastError)
und kann den Shutdown vollziehen ( ExitWindowsEx)

Beispiel und weitere Informationen zu finden unter:
ms-help://MS.VSCC/MS.MSDNQTR.2003APR.1033/sysinfo/base/shutting_down.htm
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum