Archiv Server-Windows 15.877 Themen, 54.317 Beiträge

! Wie führe ich Befehle unter WinNT aus ?

Heppner1 / 2 Antworten / Baumansicht Nickles

Hi, ich hatte von FLOPPES folgende antwort auf die Frage bekommen, wie ich WinNT manuel herunterfahren kann(mit einem Befehl) ohne über den BUTTON \'START\',...
Nun weiss ich nicht, wie seine antwort gemeint ist. Wo soll ich den CODE Wie eingeben? Ist das Programmiersprach(wenn ja, welche) oder soll das irgentwie in der Regestry verzeichnet weerden?
Wer kann mir nun noch den Rest helfen? Danke...

Von: floppes
Geschrieben am: 24.02.2001

Bei NT ist das Herunterfahren per Befehl komplizierter, aber es geht.

Man muss sich erst die Rechte holen um den PC runterfahren zu können.

Hier der Code:

Unter Deklarationen:

Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type

Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type

Private Const EWX_SHUTDOWN As Long = 1
Private Const EWX_FORCE As Long = 4
Private Const EWX_REBOOT = 2

Private Declare Function ExitWindowsEx Lib "user32" (ByVal _
dwOptions As Long, ByVal dwReserved As Long) As Long

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal _
ProcessHandle As Long, _
ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" _
Alias "LookupPrivilegeValueA" _
(ByVal lpSystemName As String, ByVal lpName As String, lpLuid _
As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" _
(ByVal TokenHandle As Long, _
ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES _
, ByVal BufferLength As Long, _
PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long


Private Sub AdjustToken()
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long

hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _
TOKEN_QUERY), hdlTokenHandle

\' Get the LUID for shutdown privilege.
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid

tkp.PrivilegeCount = 1 \' One privilege to set
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED

\' Enable the shutdown privilege in the access token of this process.
AdjustTokenPrivileges hdlTokenHandle, False, _
tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded

End Sub



Zum Runterfahren den Code:

AdjustToken
ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE), &HFFFF

SeeksTheMoon Heppner1 „! Wie führe ich Befehle unter WinNT aus ?“
Optionen

Das sieht mir verdammt nach (Visual)-Basic oder Windows-Scripting-Host aus.
C/C++ ist das jedenfalls nicht.

Du kannst aber auch eine Verknüpfung erstellen und dort einen Shutdown-Befehl eintragen: rundll32.exe user,ExitWindows
Geh mal auf http://www.winfaq.de/faq_html/winfaq.htm
Da gibts bestimmt eine einfache Lösung für Dein Problem.

Heppner1 SeeksTheMoon „Das sieht mir verdammt nach Visual -Basic oder Windows-Scripting-Host aus. C/C...“
Optionen

Ich werds mal über die WINFAQ-Seite probieren, aber dein anderer tipp läuft nicht!
Es handelt sich doch bei mir um WinNT und NICHT Win9x. Da ist das ja einfach(so ähnlich wie du beschrieben hast). Aber unter WinNT ists halt Sauschwer (frisst den shutdownbefehl hier nicht...)
und ich bin schon froh über den langen Code, bloss weiss eben nicht wo und wie anzuwenden