BOOL InitiateSystemShutdown(
  LPTSTR lpMachineName,      // computer name
  LPTSTR lpMessage,          // message to display
  DWORD dwTimeout,           // length of time to display
  BOOL bForceAppsClosed,     // force closed option
  BOOL bRebootAfterShutdown  // reboot option
);
Parameters
lpMachineName 
[in] Pointer to the null-terminated string that specifies the network name of the computer to shut down. If lpMachineName is NULL or an empty string, the function shuts down the local computer. 
lpMessage 
[in] Pointer to a null-terminated string that specifies a message to display in the shutdown dialog box. This parameter can be NULL if no message is required. 
dwTimeout 
[in] Specifies the time (in seconds) that the shutdown dialog box should be displayed. While this dialog box is displayed, the shutdown can be stopped by the AbortSystemShutdown function. 
If dwTimeout is not zero, InitiateSystemShutdown displays a dialog box on the specified computer. The dialog box displays the name of the user who called the function, displays the message specified by the lpMessage parameter, and prompts the user to log off. The dialog box beeps when it is created and remains on top of other windows in the system. The dialog box can be moved but not closed. A timer counts down the remaining time before a forced shutdown. If the user logs off, the system shuts down immediately. Otherwise, the computer is shut down when the timer expires. If dwTimeout is zero, the computer shuts down without displaying the dialog box, and the shutdown cannot be stopped by AbortSystemShutdown. bForceAppsClosed 
[in] Specifies whether applications with unsaved changes are to be forcibly closed. If this parameter is TRUE, such applications are closed. If this parameter is FALSE, a dialog box is displayed prompting the user to close the applications. 
bRebootAfterShutdown 
[in] Specifies whether the computer is to restart immediately after shutting down. If this parameter is TRUE, the computer is to restart. If this parameter is FALSE, the system flushes all caches to disk, clears the screen, and displays a message indicating that it is safe to power down. 
Return Values
If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError. Res
To shut down the local computer, the calling process must have the SE_SHUTDOWN_NAME privilege. To shut down a remote computer, the calling process must have the SE_REMOTE_SHUTDOWN_NAME privilege on the remote computer. By default, users can enable the SE_SHUTDOWN_NAME privilege on the computer they are logged onto, and administrators can enable the SE_REMOTE_SHUTDOWN_NAME privilege on remote computers. Common reasons for failure include an invalid or inaccessible computer name or insufficient privilege. 

解决方案 »

  1.   

    howker的分数得得蹊跷,该函数在没有启动SE_SHUTDOWN_NAME的特权情况下不能
    工作啊.到是CASIAT,尽管从MSDN里PASTE了一大段.但却是正确答案.
      

  2.   

    lu0老兄讲的一点都没错,小弟初到此地,立即有人捧场,奖赏是应该的,
    我也想给casiat兄和lu0兄各20分,how can i?
      

  3.   

    怎样使程序有SE_SHUTDOWN_NAME privilege?
      

  4.   

    HOWKER,你看看你REBOOT的时候SE_SHUTDOWN_NAME的特权已经启动了么?
    如果的确是没有SE_SHUTDOWN_NAME特权而启动,看来我要研究研究NT的热启动了.
    在LSA中可以将用户权限缺省设置为允许.也许你的NT上将该权限设置为缺省
    ENABLE了.