scene effect
Messages postés4Date d'inscriptiondimanche 1 mai 2005StatutMembreDernière intervention26 février 2007
-
11 juil. 2006 à 13:58
yves911
Messages postés4Date d'inscriptionlundi 15 novembre 2004StatutMembreDernière intervention18 juillet 2006
-
13 juil. 2006 à 16:31
J'ai developpé une appli client serveur pour eteindre automatiquement les postes de mon reseau.
J'utilise sur le client installé sur tous les postes l'API ExitWindowsEx .
Ca marche impec sauf que si aucune session n'est ouverte sur la machine, le poste plante mais ne s'arrete pas, alors que si une session est ouverte sur le reseau, le poste eteind normalement.
Cela ne se produit que sur xp, sur 98 tout se passe bien.
scene effect
Messages postés4Date d'inscriptiondimanche 1 mai 2005StatutMembreDernière intervention26 février 2007 11 juil. 2006 à 16:30
C'est deja fait tu pense bien
Sous 98 aucun probleme connecté ou non alors que sous xp apres le test d'os et utilise le code pour arreter la machine ca marche si on est conneste mais si on attend le nom d'utilisateur et le mot de passe à l'ouverture de session ca bloque.
En fait mon appli est lancée en service windows donc demarre des le lancement de windows.
je voudrais pouvoir arreter les machine sur lequelle aucune session n'est ouverte sinon celle la resteront allumé et c'est pad le but.
yves911
Messages postés4Date d'inscriptionlundi 15 novembre 2004StatutMembreDernière intervention18 juillet 2006 13 juil. 2006 à 16:31
J'utilise le code suivant et ca marche bien. Mon application est en service et aucune session n'est ouverte. Il reste à ajuster les params de la fonction ExitWindowsEx dépendant si l'on veut un shutdown ou un reboot.
Public Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
Public Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
Public Const EWX_SHUTDOWN As Long = 1
Public Const EWX_FORCE As Long = 4
Public Const EWX_REBOOT = 2
Public Declare Function ExitWindowsEx Lib "user32" (ByVal _
dwOptions As Long, ByVal dwReserved As Long) As Long
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function OpenProcessToken Lib "advapi32" (ByVal _
ProcessHandle As Long, _
ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Public Declare Function LookupPrivilegeValue Lib "advapi32" _
Alias "LookupPrivilegeValueA" _
(ByVal lpSystemName As String, ByVal lpName As String, lpLuid _
As LUID) As Long
Public 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 redemarrage()
Call AdjustToken
ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_REBOOT), &HFFFF
End Sub
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