Seite 1 von 1

Rechner abschalten

Verfasst: 01.04.2010 15:02
von Tombi
Liebe Community,
sicher denkt ihr jetzt, einen Rechner abzuschalten sei' doch ganz einfach.

Dafür habe ich bisher immer folgenden Code verwendet:

Code: Alles auswählen

RunProgram("C:\Windows\System32\shutdown.exe","-s -t 0 -f","",0)
Leider musste ich feststellen, das dies' nur mit Administratorrechte bei Windows XP funktioniert.
Andere Betriebssysteme habe ich noch nicht getestet, da ich sowieso nur WinXP überall verwenden werde.


Wie kann ich nun dieses Problem lösen?
Kennt jemand eine andere Möglichkeit, den Rechner herunterzufahren - auch ohne Adminrechten?


MFG,
Tombi

Re: Rechner abschalten

Verfasst: 01.04.2010 15:08
von ts-soft

Code: Alles auswählen

Procedure EnableShutDown()
  Protected Privileges.TOKEN_PRIVILEGES
  Protected hToken.i
  OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES  | #TOKEN_QUERY, @hToken)
  Privileges\PrivilegeCount           = 1
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
  CloseHandle_(hToken)
EndProcedure

EnableShutDown()
ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_FORCE, 0)

Re: Rechner abschalten

Verfasst: 01.04.2010 15:34
von Tombi
Kenne mich damit nicht sehr aus.
Funktioniert prima, aber vielleicht können Sie mir ein wenig erklären was diese Procedure genau ausführt?

Re: Rechner abschalten

Verfasst: 01.04.2010 15:45
von ts-soft
EnableShutdown holt sich vom System die Rechte zum beenden, die seit Win2K erforderlich sind.
Mit diesen Rechten ausgestattet funktioniert dann auch die ExitWindows API, die ohne diese
Rechte nur unter Win 9x funktionieren würde.

Ansonsten hilft google