PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
10279 00/02/15 17:16:13 RE(5):コンピュータをシャットダウンする方法:95/98/NT (2) By serio
10184 00/02/09 14:10:08 RE(4):コンピュータをシャットダウンする方法:95/98/NT (2) By Taka
10183 00/02/09 11:19:39 RE(3):コンピュータをシャットダウンする方法:95/98/NT (1) By Taka
10173 00/02/08 17:11:27 RE(2):PB7.0: アプリケーションからコンピュータのシャットダウンをする方法について By serio
10149 00/02/07 13:37:45 RE(1):PB7.0: アプリケーションからコンピュータのシャットダウンをする方法について By Taka
10121 00/02/03 17:58:33 PB7.0: アプリケーションからコンピュータのシャットダウンをする方法について By serio

カテゴリ:スクリプトの記述
日付:2000年02月09日 14:10 発信者:Taka
題名:RE(4):コンピュータをシャットダウンする方法:95/98/NT (2)

(1)からのつづき

【スクリプト】
// Constant Values
Constant Long   TOKEN_ADJUST_PRIVILEGES = 32
Constant Long   TOKEN_QUERY = 8
Constant String SE_SHUTDOWN_NAME = \"SeShutdownPrivilege\"
Constant Long   SE_PRIVILEGE_ENABLED = 2

// Valiables
long  tkn, rtn, old
LUID  luid
TOKEN_PRIVILEGES  newTTP, oldTTP

// プロセスに関連づけられたアクセストークンをオープン
rtn = OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, tkn )

// 特権名を示すローカルに一意な識別子(LUID)を取得
rtn = LookupPrivilegeValue( \"\", SE_SHUTDOWN_NAME, luid )

// シャットダウン権限を有効に設定
newTTP.PrivilegeCount = 1
newTTP.Privileges[1].LUID = luid
newTTP.Privileges[1].Attributes = SE_PRIVILEGE_ENABLED
rtn = AdjustTokenPrivileges( tkn, 0, newTTP, 16, oldTTP, old )


// Windowsの終了
Constant Long EWX_LOGOFF   = 0
Constant Long EWX_SHUTDOWN = 1
Constant Long EWX_REBOOT   = 2
Constant Long EWX_FORCE    = 4

rtn = ExitWindowsEx( EWX_SHUTDOWN, 0 ) //EWX_FORCEとの組み合わせ可


注1:エラー判定は書いていません。
注2:実際には、Environment.OSType = WindowsNT! の条件で処理を振り分けると良いでしょう。

(補足)
取得したトークンハンドルは、AdjustTokenPrivileges()の後 CloseHandle()する必要があるようです。
どうせシャットダウンするなら無意味かもしれませんが念のため。
宣言:function long CloseHandle( long handle ) library \"kernel32.dll\"

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows NT 4.0
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.