Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than advapi32, prefix the name with the module name and a period.
// Flags that end up in the event log code.
SHTDN_REASON_FLAG_USER_DEFINED = 0x40000000,
SHTDN_REASON_FLAG_PLANNED = 0x80000000,
SHTDN_REASON_UNKNOWN = SHTDN_REASON_MINOR_NONE,
SHTDN_REASON_LEGACY_API = (SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED),
// This mask cuts out UI flags.
SHTDN_REASON_VALID_BIT_MASK = 0xc0ffffff
}
VB.NET Signature:
VB Signature:
<DllImport("advapi32.dll", SetLastError:=True)> _
Public Function InitiateSystemShutdownEx( _
Friend Shared Function InitiateSystemShutdownEx( _
ByVal lpMachineName As String, _
ByVal lpMessage As String, _
ByVal Timeout As UInteger, _
<MarshalAs(UnmanagedType.Bool)> ByVal bForceAppsClosed As Boolean, _
<MarshalAs(UnmanagedType.Bool)> ByVal bRebootAfterShutdown As Boolean, _
ByVal ShutdownReason As ShutdownReason) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<Flags()> _
Public Enum ShutdownReason As UInteger
' Microsoft major reasons.
SHTDN_REASON_MAJOR_OTHER = &H0UI
SHTDN_REASON_MAJOR_NONE = &H0UI
SHTDN_REASON_MAJOR_HARDWARE = &H10000UI
SHTDN_REASON_MAJOR_OPERATINGSYSTEM = &H20000UI
SHTDN_REASON_MAJOR_SOFTWARE = &H30000UI
SHTDN_REASON_MAJOR_APPLICATION = &H40000UI
SHTDN_REASON_MAJOR_SYSTEM = &H50000UI
SHTDN_REASON_MAJOR_POWER = &H60000UI
SHTDN_REASON_MAJOR_LEGACY_API = &H70000UI
' Flags that end up in the event log code.
SHTDN_REASON_FLAG_USER_DEFINED = &H40000000UI
SHTDN_REASON_FLAG_PLANNED = &H80000000UI
SHTDN_REASON_UNKNOWN = SHTDN_REASON_MINOR_NONE
SHTDN_REASON_LEGACY_API = (SHTDN_REASON_MAJOR_LEGACY_API Or SHTDN_REASON_FLAG_PLANNED)
' This mask cuts out UI flags.
SHTDN_REASON_VALID_BIT_MASK = &HC0FFFFFFUI
End Enum
User-Defined Types:
None.
Notes:
lpMachineName: The network name of the computer to be shut down. If lpMachineName is NULL or an empty string, the function shuts down the local computer.
dwReason: The ShutdownReason enum can be used for this parameter.
Tips & Tricks:
None
Sample Code:
C#:
None
void ShutdownWithPInvoke2()
{
const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
const short SE_PRIVILEGE_ENABLED = 2;
const short TOKEN_ADJUST_PRIVILEGES = 32;
const short TOKEN_QUERY = 8;
IntPtr hToken;
TOKEN_PRIVILEGES tkp;
Alternative Managed API:
None
// Get shutdown privileges...
OpenProcessToken(Process.GetCurrentProcess().Handle,
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken);
tkp.PrivilegeCount = 1;
tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
LookupPrivilegeValue("", SE_SHUTDOWN_NAME, out tkp.Privileges.pLuid);
AdjustTokenPrivileges(hToken, false, ref tkp, 0U, IntPtr.Zero,
IntPtr.Zero);
bool result = InitiateSystemShutdownEx("", "Shuting down upon request from Tablet", 3, true, false, ShutdownReason.SHTDN_REASON_MAJOR_APPLICATION | ShutdownReason.SHTDN_REASON_FLAG_USER_DEFINED);
}
// Structures needed for the API calls
private struct LUID
{
public int LowPart;
public int HighPart;
}
private struct LUID_AND_ATTRIBUTES
{
public LUID pLuid;
public int Attributes;
}
private struct TOKEN_PRIVILEGES
{
public int PrivilegeCount;
public LUID_AND_ATTRIBUTES Privileges;
}
[DllImport("advapi32.dll")]
static extern int OpenProcessToken(IntPtr ProcessHandle,
int DesiredAccess, out IntPtr TokenHandle);
// Flags that end up in the event log code.
SHTDN_REASON_FLAG_USER_DEFINED = 0x40000000,
SHTDN_REASON_FLAG_PLANNED = 0x80000000,
SHTDN_REASON_UNKNOWN = SHTDN_REASON_MINOR_NONE,
SHTDN_REASON_LEGACY_API = (SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED),
// This mask cuts out UI flags.
SHTDN_REASON_VALID_BIT_MASK = 0xc0ffffff
}
Alternative Managed API:
None
Defines the Shutdown reason for the user32.ExitWindowsEx method
5/7/2009 4:35:31 PM - -218.74.122.100
Please edit this page!
Do you have...
helpful tips or sample code to share for using this API in managed code?
corrections to the existing content?
variations of the signature you want to share?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).