Shutdown sous NT

nico - 30 mars 2001 à 16:53
cs_jipef Messages postés 55 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 1 août 2008 - 12 mai 2005 à 09:35
Je développe une appli sous vb qui doit pouvoir rédémarrer, quiter et éteindre toutes les versions de windows.

Sous NT 4, mes scripts ne font que déloguer l'utilisateur !

De quoi cela vient-il ??

(même le shell exit kernel est inefficasse. )

3 réponses

Salut...

Si tu parle de redemarrer windows utilise.

'met ceci dans la declaration general..
Private Declare Function SHShutdownDialog Lib "shell32" Alias "#60" (ByVal Yourguess As Long) As Long

Private Sub Command1_Click()
'commande associe a la function du haut
SHShutdownDialog 1
End Sub
0
Merci, mais j'ai enfin trouvé, il faut attribuer les droits machines à mon programme puis lancer les routines.

Si cela peut servir à quelqu'un :

'pour le délog
Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Public Const EWX_POWEROFF = 8

#If Win32 Then
Public Declare Function ShutdownWindows _
Lib "user32" Alias _
"ExitWindowsEx" (ByVal uFlags As Long, _
ByVal dwReserved As Long) As Long
#Else
Public Declare Function ShutdownWindows _
Lib "UseR" Alias _
"ExitWindows" (ByVal wReturnCode As Integer, _
ByVal dwReserved As Integer) As Integer
#End If


'fin du délog

' Shutdown Flags

Const SE_PRIVILEGE_ENABLED = &H2
Const TokenPrivileges = 3
Const TOKEN_ASSIGN_PRIMARY = &H1
Const TOKEN_DUPLICATE = &H2
Const TOKEN_IMPERSONATE = &H4
Const TOKEN_QUERY = &H8
Const TOKEN_QUERY_SOURCE = &H10
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_ADJUST_GROUPS = &H40
Const TOKEN_ADJUST_DEFAULT = &H80
Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Const ANYSIZE_ARRAY = 1
Private Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type
Private Type Luid
lowpart As Long
highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
'pLuid As Luid
pLuid As LARGE_INTEGER
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, ByVal lpMessage As String, ByVal dwTimeout As Long, ByVal bForceAppsClosed As Long, ByVal bRebootAfterShutdown As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LARGE_INTEGER) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (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 Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Public Function InitiateShutdownMachine(ByVal Machine As String, Optional force As Variant, Optional restart As Variant, Optional AllowLocalShutdown As Variant, Optional Delay As Variant, Optional message As Variant) As Boolean
Dim hProc As Long
Dim OldTokenStuff As TOKEN_PRIVILEGES
Dim OldTokenStuffLen As Long
Dim NewTokenStuff As TOKEN_PRIVILEGES
Dim NewTokenStuffLen As Long
Dim pSize As Long
If IsMissing(force) Then force = False
If IsMissing(restart) Then restart = True
If IsMissing(AllowLocalShutdown) Then AllowLocalShutdown = False
If IsMissing(Delay) Then Delay = 0
If IsMissing(message) Then message = ""
'Make sure the Machine-name doesn't start with '\\'
If InStr(Machine, "\") = 1 Then
Machine = Right(Machine, Len(Machine) - 2)
End If
'check if it's the local machine that's going to be shutdown
If (LCase(GetMyMachineName) = LCase(Machine)) Then
'may we shut this computer down?
If AllowLocalShutdown = False Then Exit Function
'open access token
If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hProc) = 0 Then
MsgBox "OpenProcessToken Error: " & GetLastError()
Exit Function
End If
'retrieve the locally unique identifier to represent the Shutdown-privilege name
If LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, OldTokenStuff.Privileges(0).pLuid) = 0 Then
MsgBox "LookupPrivilegeValue Error: " & GetLastError()
Exit Function
End If
NewTokenStuff = OldTokenStuff
NewTokenStuff.PrivilegeCount = 1
NewTokenStuff.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
NewTokenStuffLen = Len(NewTokenStuff)
pSize = Len(NewTokenStuff)
'Enable shutdown-privilege
If AdjustTokenPrivileges(hProc, False, NewTokenStuff, NewTokenStuffLen, OldTokenStuff, OldTokenStuffLen) = 0 Then
MsgBox "AdjustTokenPrivileges Error: " & GetLastError()
Exit Function
End If
'initiate the system shutdown
If InitiateSystemShutdown("\" & Machine, message, Delay, force, restart) = 0 Then
Exit Function
End If
NewTokenStuff.Privileges(0).Attributes = 0
'Disable shutdown-privilege
If AdjustTokenPrivileges(hProc, False, NewTokenStuff, Len(NewTokenStuff), OldTokenStuff, Len(OldTokenStuff)) = 0 Then
Exit Function
End If
Else
'initiate the system shutdown
If InitiateSystemShutdown("\" & Machine, message, Delay, force, restart) = 0 Then
Exit Function
End If
End If
InitiateShutdownMachine = True
End Function
Function GetMyMachineName() As String
Dim sLen As Long
'create a buffer
GetMyMachineName = Space(100)
sLen = 100
'retrieve the computer name
If GetComputerName(GetMyMachineName, sLen) Then
GetMyMachineName = Left(GetMyMachineName, sLen)
End If
End Function
0
cs_jipef Messages postés 55 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 1 août 2008
12 mai 2005 à 09:35
jpf
ultra simple sous XP ( voir sous NT)........
Microsoft Windows XP [version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.


C:\Documents and Settings\jean-paul>shutdown /?
Utilisation : shutdown [-i | -l | -s | -r | -a] [-f] [-m [file://\\nom_ordinateur \\nom_ordinateur]] [-t x
x] [-c "commentaire"] [-d up:xx:yy]


Sans argument Affiche ce message (identique à -?)
-i Affiche l'interface graphique, doit être la 1ère
option
-l Ferme la session (ne peut pas être utilisé avec
l'option -m)
-s Met l'ordinateur hors tension
-r Met l'ordinateur hors tension et le redémarre
-a Annule une mise hors tension système
-m [file://\\nom_ordinateur \\nom_ordinateur] Ordinateur distant à mettre hors tension/redémar
rer/annuler
-t xx Définir le délai d'expiration pour la mise hors
tension à xx secondes
-c "commentaire" Commentaire de la mise hors tension (max
imum de 127 caractères)
-f Force des applications en cours d'exécution à se
fermer sans avertissement
-d [u][p]:xx:yy Le code de raison de la mise hors tension
u est le code utilisateur
p est un code de mise hors tension planifié
xx est le code de raison majeur (valeur entière
inférieure à 256)
yy est le code de raison mineur (valeur entière
positive inférieure à 65536)

En VB

commande$="shutdown -s -f -t 10"
shell(commande)
0
Rejoignez-nous