Re:RE:如何用PB写删除指定进程!
默认分类 2005-11-28 18:15:29 阅读284 评论0 字号:大中小 订阅
【在hjs9225的大作中提到:】
:结束进程---举IE为例
:
:
: ......
加文集
-----------------------------------------------------------
结束进程---举IE为例
:结束进程---举IE为例
:
:
: ......
加文集
-----------------------------------------------------------
结束进程---举IE为例
//创建非可视对象uf_get_exename
//声明local external function(api)
Function Long CreateToolhelp32Snapshot(Long Flags,Long ProcessId) Library "kernel32.dll"
Function Integer Process32First(uLong Snapshot,ref s_Process Process) Library "kernel32.dll"
Function Integer Process32Next(uLong Snapshot,ref s_Process Process) Library "kernel32.
dll"
//声明前先创建结构
unsignedlongstructsize
unsignedlongusage如何删除ie
unsignedlongprocessid
unsignedlongdefaultheapid
unsignedlongmoduleid
//声明前先创建结构
unsignedlongstructsize
unsignedlongusage如何删除ie
unsignedlongprocessid
unsignedlongdefaultheapid
unsignedlongmoduleid
unsignedlongthreads
unsignedlongparentprocessid
unsignedlongclassbase
unsignedlongflags
character filename[260]
//构造对象uf_get_exename的函数of_getexe()
/
//////////////////////////of_getexe()////////////////////////
功能:枚举进程并返回指定进程号PID
传入:无
返回:Long
/////////////////////////////////////////////////////////////
s_Process lst_Process
string ls_filename[100] ,ls_curexename
功能:枚举进程并返回指定进程号PID
传入:无
返回:Long
/////////////////////////////////////////////////////////////
s_Process lst_Process
string ls_filename[100] ,ls_curexename
ulong ln_ProcessID,ln_SameCount,ln_Snapshot,ln_Circle,ln_Count,ul_PID
ul_PID = 0
ln_Snapshot = CreateToolhelp32Snapshot(2,0)
if (ln_Snapshot<1) then return 0
lst_Process.StructSize = 296
if Process32First(ln_Snapshot,lst_Process)=0 then return 0
//枚举当前权限下的进程
debugbreak()
dowhile true
if Process32Next(ln_Snapshot,lst_Process)=0 then exit
ln_Count = ln_Count + 1
//枚举当前权限下的进程
debugbreak()
dowhile true
if Process32Next(ln_Snapshot,lst_Process)=0 then exit
ln_Count = ln_Count + 1
ls_FileName[ln_Count] = lst_Process.FileName
If Lower(ls_FileName[ln_Count]) = '' Then
//取得进程号
ul_PID = lst_Process.ProcessID
//messagebox(string(ul_PID),ls_FileName[ln_Count])
End If
loop
return ul_PID
//接下来
//创建一个窗体,上面放一按钮cb_click
//在窗体声明local external function(api)
return ul_PID
//接下来
//创建一个窗体,上面放一按钮cb_click
//在窗体声明local external function(api)
FUNCTION ulong TerminateProcess(ulong hProcess,ulong uExitCode) LIBRARY "kernel32.dll"
FUNCTION ulong OpenProcess(ulong dwDesiredAccess,ulong bInheritHandle,ulong dwProcessId) LIBRARY "kernel32.dll"
//cb_click的clicked事件
uf_get_exename luf_get_exename
INTEGER li_rc
ULONG ul_PID
ULONG PROCESS_TERMINATE = 0001
ULONG hwdprocess
If messagebox('结束进程','确定吗?Kill?',question!,yesno!,1) = 2 Then return
//创建实例变量
luf_get_exename = create uf_get_exename
//获取指定进程号
ul_PID = luf_get_exename.of_getexe()
If ul_PID = 0 Then
Messagebox('结束进程','没有发现IE进程!')
return
End If
If ul_PID <> 0 Then
//获取指定进程号的进程句柄
hwdprocess = OpenProcess(PROCESS_TERMINATE,1,ul_PID)
//messagebox('',string(hwdprocess))
return
End If
If ul_PID <> 0 Then
//获取指定进程号的进程句柄
hwdprocess = OpenProcess(PROCESS_TERMINATE,1,ul_PID)
//messagebox('',string(hwdprocess))
//结束进程,成功返回非零
li_rc = TerminateProcess(hwdprocess,0)
If li_rc <> 0 Then Messagebox('结束进程','成功结束进程!')
End If
Destroy luf_get_exename;
补充:
1、进程相当于系统提供的一个平台,它可以包括一个或多个线程,如IE是个进程,
打开多个网页是它的多个线程,把IE进程Kill掉即可关闭多个打开网页的线程。
2、98和NT不一样。98下可以用CreateToolhelp32Snapshot函数Process32First和
Process32Next来枚举当前所有进程的进程ID(先调用函数CreateToolhelp32Snapshot)
NT下用EnumProcesses函数来枚举。2000是支持CreateToolhelp32Snapshot函数的。
得到进程ID后就可以用OpenProcess函数得到句柄了,在NT和2000下要通过安全检测。
3、EnumProcess 也可以得到系统中的进程列表
杀掉本地进程其实很简单,取得进程ID后,调用OpenProcess函数打开进程句柄,然
后调用TerminateProcess函数就可以杀掉进程了。有些情况下并不能直接打开进程句柄,
例如WINLOGON等系统进程,因为权限不够。这个时候我们就得先提升自己的进程的权限了。
提升权限过程也不复杂,先调用GetCurrentProcess函数取得当前进程的句柄,然后调用
OpenProcessToken打开当前进程的访问令牌,接着调用LookupPrivilegeValue函数取得你
想提升的权限的值,最后调用AdjustTokenPrivileges函数给当前进程的访问令牌增加权限
就可以了。一般有了SeDebugPrivilege特权后,就可以杀掉除Idle外的所有进程了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论