我编写了个进程管理程序,但在XP下无法结束进程。设计了3个按钮和一个listview ,具体代码如下
Option Explicit
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongConst MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type'进程参数
Const TH32CS_SNAPheaplist = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPthread = &H4
Const TH32CS_SNAPmodule = &H8
Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule'系统提权参数
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal processhandle As Long, ByVal DesiredAccess As Long, tokenhandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private 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 LongPrivate Type LUID
UserdPart As Long
IgnoredForNowHigh32BitPart As Long
End TypePrivate Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End TypePrivate Sub Command1_Click()
Call AdjustTokenPrivilegesxp
Dim IDhandle, TMback As Long
If ListView1.SelectedItem.Text <> "" Then
IDhandle = OpenProcess(1&, True, Val("&H" & ListView1.SelectedItem.Text))
TMback = TerminateProcess(IDhandle, 0&)
If TMback <> 0 Then
MsgBox ListView1.SelectedItem.Text & "进程已结束"
Else
MsgBox ListView1.SelectedItem.Text & "不能被终止"
End If
CloseHandle IDhandle
Command2_Click
End If
End SubPrivate Sub Command2_Click()
Dim i As Long
Dim ID As Long
Dim pro As PROCESSENTRY32
Dim hsonp As LongListView1.ListItems.Clear
hsonp = CreateToolhelpSnapshot(TH32CS_SNAPall, 0)
pro.dwSize = Len(pro)
ID = ProcessFirst(hsonp, pro)
i = 0
Do While ID <> 0
ListView1.ListItems.Add , "first" & i, pro.szExeFile
ListView1.ListItems("first" & i).SubItems(1) = pro.th32ParentProcessID
i = i + 1
ID = ProcessNext(hsonp, pro)
Loop
CloseHandle hsonp
End SubPrivate Sub Command3_Click()
End
End SubPrivate Sub Form_Load()
Call AdjustTokenPrivilegesxp
ListView1.ColumnHeaders.Clear
ListView1.ColumnHeaders.Add , "first", "进程名称", 4000
ListView1.ColumnHeaders.Add , "second", "进程ID", 1550
ListView1.View = lvwReport
Command2_Click
End SubPublic Sub AdjustTokenPrivilegesxp()
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2 Dim processhandle As Long
Dim tokenhandle As Long
Dim tmpLUID As LUID
Dim tmpTOKEN As TOKEN_PRIVILEGES
Dim tmp As TOKEN_PRIVILEGES
Dim buffer As Long
processhandle = GetCurrentProcess()
OpenProcessToken processhandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), tokenhandle
LookupPrivilegeValue "windows xp", "SeDebugPrivilege", tmpLUID
tmpTOKEN.Attributes = SE_PRIVILEGE_ENABLED
tmpTOKEN.TheLuid = tmpLUID
tmpTOKEN.PrivilegeCount = 1
AdjustTokenPrivileges tokenhandle, False, tmpTOKEN, Len(tmp), tmp, bufferEnd Sub
Option Explicit
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongConst MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type'进程参数
Const TH32CS_SNAPheaplist = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPthread = &H4
Const TH32CS_SNAPmodule = &H8
Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule'系统提权参数
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal processhandle As Long, ByVal DesiredAccess As Long, tokenhandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private 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 LongPrivate Type LUID
UserdPart As Long
IgnoredForNowHigh32BitPart As Long
End TypePrivate Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End TypePrivate Sub Command1_Click()
Call AdjustTokenPrivilegesxp
Dim IDhandle, TMback As Long
If ListView1.SelectedItem.Text <> "" Then
IDhandle = OpenProcess(1&, True, Val("&H" & ListView1.SelectedItem.Text))
TMback = TerminateProcess(IDhandle, 0&)
If TMback <> 0 Then
MsgBox ListView1.SelectedItem.Text & "进程已结束"
Else
MsgBox ListView1.SelectedItem.Text & "不能被终止"
End If
CloseHandle IDhandle
Command2_Click
End If
End SubPrivate Sub Command2_Click()
Dim i As Long
Dim ID As Long
Dim pro As PROCESSENTRY32
Dim hsonp As LongListView1.ListItems.Clear
hsonp = CreateToolhelpSnapshot(TH32CS_SNAPall, 0)
pro.dwSize = Len(pro)
ID = ProcessFirst(hsonp, pro)
i = 0
Do While ID <> 0
ListView1.ListItems.Add , "first" & i, pro.szExeFile
ListView1.ListItems("first" & i).SubItems(1) = pro.th32ParentProcessID
i = i + 1
ID = ProcessNext(hsonp, pro)
Loop
CloseHandle hsonp
End SubPrivate Sub Command3_Click()
End
End SubPrivate Sub Form_Load()
Call AdjustTokenPrivilegesxp
ListView1.ColumnHeaders.Clear
ListView1.ColumnHeaders.Add , "first", "进程名称", 4000
ListView1.ColumnHeaders.Add , "second", "进程ID", 1550
ListView1.View = lvwReport
Command2_Click
End SubPublic Sub AdjustTokenPrivilegesxp()
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2 Dim processhandle As Long
Dim tokenhandle As Long
Dim tmpLUID As LUID
Dim tmpTOKEN As TOKEN_PRIVILEGES
Dim tmp As TOKEN_PRIVILEGES
Dim buffer As Long
processhandle = GetCurrentProcess()
OpenProcessToken processhandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), tokenhandle
LookupPrivilegeValue "windows xp", "SeDebugPrivilege", tmpLUID
tmpTOKEN.Attributes = SE_PRIVILEGE_ENABLED
tmpTOKEN.TheLuid = tmpLUID
tmpTOKEN.PrivilegeCount = 1
AdjustTokenPrivileges tokenhandle, False, tmpTOKEN, Len(tmp), tmp, bufferEnd Sub
权限问题
IDhandle = OpenProcess(PROCESS_ALL_ACCESS, True, ListView1.SelectedItem.SubItems(1))XP sp3 测试通过
pskill.exe请从这里下载:
http://technet.microsoft.com/en-us/sysinternals/bb545027.aspx
但我在listview中还是能看到那个进程,并且我在点结束进程也不能再结束他,显示进程不能终止。
现在的代码:
Option Explicit
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongConst MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type'进程参数
Const TH32CS_SNAPheaplist = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPthread = &H4
Const TH32CS_SNAPmodule = &H8
Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule'系统提权参数
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal processhandle As Long, ByVal DesiredAccess As Long, tokenhandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private 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 LongPrivate Type LUID
UserdPart As Long
IgnoredForNowHigh32BitPart As Long
End TypePrivate Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End TypePrivate Sub Command1_Click(Index As Integer)Dim IDhandle, TMback As Long
If ListView1.SelectedItem.Text <> "" Then
IDhandle = OpenProcess(1&, True, ListView1.SelectedItem.SubItems(1))
TMback = TerminateProcess(IDhandle, 0&)
If TMback <> 0 Then
MsgBox ListView1.SelectedItem.Text & "进程已结束"
Else
MsgBox ListView1.SelectedItem.Text & "不能被终止"
End If
CloseHandle IDhandle
End If
End SubPrivate Sub Command2_Click(Index As Integer)Dim i As Long
Dim ID As Long
Dim pro As PROCESSENTRY32
Dim hsonp As LongListView1.ListItems.Clear
hsonp = CreateToolhelpSnapshot(TH32CS_SNAPall, 0)
pro.dwSize = Len(pro)
ID = ProcessFirst(hsonp, pro)
i = 0
Do While ID <> 0
ListView1.ListItems.Add , "first" & i, pro.szExeFile
ListView1.ListItems("first" & i).SubItems(1) = pro.th32ParentProcessID
i = i + 1
ID = ProcessNext(hsonp, pro)
Loop
CloseHandle hsonp
End SubPrivate Sub Command3_Click(Index As Integer)
End
End SubPrivate Sub Form_Load()Call AdjustTokenPrivilegesxpListView1.ColumnHeaders.Clear
ListView1.ColumnHeaders.Add , "first", "进程名称", 4000
ListView1.ColumnHeaders.Add , "second", "进程ID", 1550
ListView1.View = lvwReport
Command2_Click (1)
End Sub
Public Sub AdjustTokenPrivilegesxp()Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const TOKEN_ASSIGN_PRIMARY = &H1
Const TOKEN_DUPLICATE = (&H2)
Const TOKEN_IMPERSONATE = (&H4)
Const TOKEN_QUERY = (&H8)
Const TOKEN_QUERY_SOURCE = (&H10)
Const TOKEN_ADJUST_PRIVILEGES = (&H20)
Const TOKEN_ADJUST_GROUPS = (&H40)
Const TOKEN_ADJUST_DEFAULT = (&H80)
Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or _
TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or _
TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
Const SE_PRIVILEGE_ENABLED = &H2 Dim processhandle As Long
Dim tokenhandle As Long
Dim tmpLUID As LUID
Dim tmpTOKEN As TOKEN_PRIVILEGES
Dim tmp As TOKEN_PRIVILEGES
Dim buffer As Long
processhandle = GetCurrentProcess()
OpenProcessToken processhandle, TOKEN_ALL_ACCESS, tokenhandle
LookupPrivilegeValue "", "SeDebugPrivilege", tmpLUID
tmpTOKEN.Attributes = SE_PRIVILEGE_ENABLED
tmpTOKEN.TheLuid = tmpLUID
tmpTOKEN.PrivilegeCount = 1
AdjustTokenPrivileges tokenhandle, False, tmpTOKEN, Len(tmp), tmp, bufferEnd Sub还可以怎么改