win32api.InitiateSystemShutdown and 'Access is denied'

Mark Hammond mhammond at skippinet.com.au
Fri Aug 30 01:15:18 CEST 2002


Uwe Becher wrote:
> Hi,
> 
> I'm trying to shutdown my local W2K machine using
> 
> win32api.InitiateSystemShutdown(computer, "Rebooting!", 0, 1, 1)
> 
> an receive
> 
> pywintypes.api_error: (5, 'InitiateSystemShutdown', 'Access is denied.')
> 
> while shutting down any remote machine works fine. The error happens on 
> a Python 2.1.1 as well as on Python 2.2.1.
> 
> Does someone have an idea?
> Thanks.
> 
> Uwe

 From my favourite book, Python Programming on Win32 ;)

Mark.

# RebootServer.py - Reboots a remove server
import win32security
import win32api
import sys
import time
from ntsecuritycon import *

def AdjustPrivilege(priv, enable = 1):
     # Get the process token.
     flags = TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY
     htoken = 
win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags)
     # Get the ID for the system shutdown privilege.
     id = win32security.LookupPrivilegeValue(None, priv)
     # Now obtain the privilege for this process.
     # Create a list of the privileges to be added.
     if enable:
         newPrivileges = [(id, SE_PRIVILEGE_ENABLED)]
     else:
         newPrivileges = [(id, 0)]
     # and make the adjustment.
     win32security.AdjustTokenPrivileges(htoken, 0, newPrivileges)

def RebootServer(message="Server Rebooting", timeout=30, bForce=0, 
bReboot=1):
     AdjustPrivilege(SE_SHUTDOWN_NAME)
     try:
         win32api.InitiateSystemShutdown(None, message, timeout, bForce, 
bReboot)
     finally:
         # Now we remove the privilege we just added.
         AdjustPrivilege(SE_SHUTDOWN_NAME, 0)

def AbortReboot():
     AdjustPrivilege(SE_SHUTDOWN_NAME)
     try:
         win32api.AbortSystemShutdown(None)
     finally:
         # Now we remove the privilege we just added.
         AdjustPrivilege(SE_SHUTDOWN_NAME, 0)

if __name__=='__main__':
         message = "This server is pretending to reboot\r\n"
         message = message + "The shutdown will stop in 10 seconds"
         RebootServer(message)
         print "Sleeping for 10 seconds"
         time.sleep(10)
         print "Aborting shutdown"
         AbortReboot()






More information about the Python-list mailing list