掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
2003Serverの、ユーザ名がSYSTEMのプロセスの強制終了の仕方 (ID:85351)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
あんさん、ありがとうございました。解決できました。 APIを調べているうちに、システム特権を有効にしてTerminateProcessを行えば強制終了できるようになりました。 参照はVBレスキュー花ちゃんサイトが主です。 '下記ソース 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 Declare Function OpenProcessToken Lib "advapi32" _ (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _ TokenHandle As Long) As Long 'カレントプロセスの擬似ハンドルを返す(P656) Public Declare Function GetCurrentProcess Lib "KERNEL32" () As Long 'ローカル一意識別子(LUID)を取得し、指定された特権名を表現します 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 Public Const TOKEN_QUERY = &H8 Public Const TOKEN_ADJUST_PRIVILEGES = &H20 Public Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege" Public Const SE_DEBUG_NAME = "SeDebugPrivilege" Public Const SE_PRIVILEGE_ENABLED = &H2 Private Function ProcessDelete() As Boolean Dim lngResult As Long Dim hTokenHandle As Long Dim tmpLuid As LUID Dim tkpNew As TOKEN_PRIVILEGES Dim tkpPrevious As TOKEN_PRIVILEGES ProcessDelete = True 'プロセスに関連づけアクセストークンのオープン lngResult = OpenProcessToken(GetCurrentProcess, TOKEN_QUERY Or TOKEN_ADJUST_PRIVILEGES, hTokenHandle) If lngResult = 0 Then ProcessDelete = False Exit Function End If 'ローカルシステムのシステムプロセス特権を取得 lngResult = LookupPrivilegeValue(vbNullString, SE_DEBUG_NAME, tmpLuid) If lngResult = 0 Then ProcessDelete = False Exit Function End If tkpNew.PrivilegeCount = 1 tkpNew.TheLuid = tmpLuid tkpNew.Attributes = SE_PRIVILEGE_ENABLED 'アクセストークンの特権を変更する lngResult = AdjustTokenPrivileges(hTokenHandle, False, tkpNew, Len(tkpPrevious), tkpPrevious, 0&) If lngResult = 0 Then ProcessDelete = False Exit Function End If End Function 上記のProcessDeleteを戻り値Trueで正常に通ってきたあとで、 希望のプロセスIDからハンドル取得、TerminateProcessでプロセス終了ができました。 ありがとうございました!
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.