|
JLI Spieleprogrammierung
|
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
|
Verfasst am: 03.12.2003, 12:15 Titel: InitialateSystemShutdown() |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 03.12.2003, 12:25 Titel: |
|
|
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 |
|
|
Zo0oL Mini JLI'ler
Anmeldedatum: 02.12.2003 Beiträge: 11 Wohnort: Pb Medaillen: Keine
|
Verfasst am: 03.12.2003, 12:34 Titel: |
|
|
"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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 03.12.2003, 15:11 Titel: |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 03.12.2003, 20:49 Titel: |
|
|
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 |
|
|
Mäscht JLI'ler
Anmeldedatum: 22.05.2003 Beiträge: 150 Wohnort: Bad Hofgastein\Österreich Medaillen: Keine
|
Verfasst am: 05.12.2003, 12:53 Titel: |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 05.12.2003, 18:14 Titel: |
|
|
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 |
|
|
Mäscht JLI'ler
Anmeldedatum: 22.05.2003 Beiträge: 150 Wohnort: Bad Hofgastein\Österreich Medaillen: Keine
|
Verfasst am: 09.12.2003, 11:54 Titel: |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 09.12.2003, 21:40 Titel: |
|
|
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 |
|
|
|
|
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
|