PB结束进程

 结束进程---举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"

 

//声明前先创建结构

unsignedlong structsize

unsignedlong usage

unsignedlong processid

unsignedlong defaultheapid

unsignedlong moduleid

unsignedlong threads

unsignedlong parentprocessid

unsignedlong classbase

unsignedlong flags

character filename[260]

//构造对象uf_get_exename的函数of_getexe()

 

///of_getexe()

功能:枚举进程并返回指定进程号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()

do while 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]) = 'iexplore.exe' 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)

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))

//结束进程,成功返回非零

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外的所有进程了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值