• 5017阅读
  • 8回复

api-结束进程中DLL-(昭姐易语言) [复制链接]

上一主题 下一主题
离线小昭
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2013-06-09
— 本帖被 啊冲 从 易语言 移动到本区(2013-10-28) —

.版本 2
.支持库 eAPI
.支持库 xplib
.支持库 iext
.支持库 spec

.程序集 窗口程序集1
.程序集变量 系统进程, 进程信息, , "0"
.程序集变量 I, 整数型
.程序集变量 X, 整数型
.程序集变量 系统进程1, 进程信息, , "0"
.程序集变量 I1, 整数型
.程序集变量 系统进程数组, 整数型, , "0"
.程序集变量 I2, 整数型
.程序集变量 i3, 整数型
.程序集变量 i4, 整数型
.程序集变量 i5, 整数型
.程序集变量 硬盘信息, 硬盘信息
.程序集变量 路径, 文本型

.子程序 __启动窗口_创建完毕

提升进程权限 ()
置随机数种子 (取秒 (取现行时间 ()))
_启动窗口.标题 = 到文本 (取随机数 (100000, 999999))
表项 ()
列表 ()
XP风格 (1)

.子程序 提升进程权限, 逻辑型, 公开
.参数 目标进程, 整数型, 可空
.参数 权限类别, 文本型, 可空
.局部变量 hdlProcessHandle, 整数型
.局部变量 hdlTokenHandle, 整数型
.局部变量 tmpLuid, LuID
.局部变量 tkp, TOKEN_PRIVILEGES
.局部变量 tkpNewButIgnored, TOKEN_PRIVILEGES

.如果真 (取操作系统类别 () ≠ 3)
    返回 (假)
.如果真结束
.如果真 (是否为空 (目标进程))
    hdlProcessHandle = 获取线程 ()
.如果真结束
.如果真 (是否为空 (权限类别))
    权限类别 = #调试
.如果真结束
打开令牌 (hdlProcessHandle, 40, hdlTokenHandle)
恢复权限 (“”, 权限类别, tmpLuid)
tkp.PrivilegeCount = 1
tkp.lowpart = tmpLuid.lowpart
tkp.highpart = tmpLuid.highpart
tkp.Attributes = 2
返回 (获取令牌特权 (hdlTokenHandle, 0, tkp, 28, 0, 0))

.子程序 列表

超级列表框1.全部删除 ()
重定义数组 (系统进程, 假, 0)
连续赋值 (0, X, I)
系统进程 = 取系统进程列表 ()
数组排序 (系统进程, 真)
.计次循环首 (取数组成员数 (系统进程), I)
    X = X + 1
    超级列表框1.插入表项 (X, 到文本 (系统进程 [I].进程标识符), , , , )
    超级列表框1.置标题 (X - 1, 1, 系统进程 [I].进程名称)
    超级列表框1.置标题 (X - 1, 2, 到文本 (系统进程 [I].线程优先权))
    超级列表框1.置标题 (X - 1, 3, 到文本 (系统进程 [I].线程数))
    超级列表框1.置标题 (X - 1, 4, 到文本 (系统进程 [I].父进程标识符))
    超级列表框1.置标题 (X - 1, 5, 到文本 (系统进程 [I].进程模块标识符))
    路径 = 取模块路径 (系统进程 [I].进程标识符)
    .如果 (寻找文本 (路径, “\??\”, , 真) ≠ -1)
        路径 = 取文本右边 (路径, 取文本长度 (路径) - 4)
    .否则

    .如果结束
    超级列表框1.置标题 (X - 1, 6, 路径)

.计次循环尾 ()

.子程序 _按钮1_被单击

列表 ()

.子程序 表项

超级列表框1.插入列 (0, “PID”, 40, , , )
超级列表框1.插入列 (1, “映像名称”, 100, 1, , )
超级列表框1.插入列 (2, “线程优先权”, 75, 1, , )
超级列表框1.插入列 (3, “线程数”, 50, 1, , )
超级列表框1.插入列 (4, “父进程标识”, 75, 1, , )
超级列表框1.插入列 (5, “模块标识”, 60, 1, , )
超级列表框1.插入列 (6, “路径”, 260, 1, , )


.子程序 _按钮2_被单击

.如果 (终止进程 (到数值 (超级列表框1.取标题 (超级列表框1.现行选中项, ))) = 假)
    _启动窗口.总在最前 = 假
    信息框 (“该进程为关键进程,不能结束!”, 0, )
    _启动窗口.总在最前 = 真
.否则
    按钮2.禁止 = 真
.如果结束


.子程序 _时钟1_周期事件

系统进程1 = 取系统进程列表 ()
连续赋值 (0, I2, i4, i3)
i3 = 超级列表框1.取表项数 ()
i5 = 取数组成员数 (系统进程1)
.如果 (i3 < i5)
    .计次循环首 (i5, i4)
        .计次循环首 (i3, I2)
            .如果 (系统进程1 [i4].进程标识符 = 到数值 (超级列表框1.取标题 (I2 - 1, 0)))
                跳出循环 ()
            .否则
                I2 = I2 + 1
                .如果 (I2 > i3)
                    超级列表框1.插入表项 (i3, 到文本 (系统进程1 [i4].进程标识符), , , , )
                    超级列表框1.置标题 (i3, 1, 系统进程1 [i4].进程名称)
                    超级列表框1.置标题 (i3, 2, 到文本 (系统进程1 [i4].线程优先权))
                    超级列表框1.置标题 (i3, 3, 到文本 (系统进程1 [i4].线程数))
                    超级列表框1.置标题 (i3, 4, 到文本 (系统进程1 [i4].父进程标识符))
                    超级列表框1.置标题 (i3, 5, 到文本 (系统进程1 [i4].进程模块标识符))
                    路径 = 取模块路径 (系统进程1 [i4].进程标识符)
                    .如果 (寻找文本 (路径, “\??\”, , 真) ≠ -1)
                        路径 = 取文本右边 (路径, 取文本长度 (路径) - 4)
                    .否则

                    .如果结束
                    超级列表框1.置标题 (i3, 6, 路径)
                .否则

                .如果结束

            .如果结束

        .计次循环尾 ()
    .计次循环尾 ()

.否则
    .计次循环首 (i3, I2)
        .计次循环首 (i5, i4)
            .如果 (到数值 (超级列表框1.取标题 (I2 - 1, )) = 系统进程1 [i4].进程标识符)
                跳出循环 ()
            .否则
                i4 = i4 + 1
                .如果 (i4 > i5)
                    超级列表框1.删除表项 (I2 - 1)
                .否则

                .如果结束

            .如果结束

        .计次循环尾 ()
    .计次循环尾 ()
.如果结束


.子程序 _选择框1_被单击

.如果 (选择框1.选中 = 真)
    时钟1.时钟周期 = 1000
    按钮1.禁止 = 真
.否则
    时钟1.时钟周期 = 0
    按钮1.禁止 = 假
.如果结束


.子程序 _超级列表框1_左键单击表项

按钮2.禁止 = 假

.子程序 取模块路径, 文本型
.参数 processid, 整数型
.局部变量 snap, 整数型
.局部变量 mod, 模块信息

snap = CreateToolhelp32Snapshot (8, processid)
.如果真 (snap = -1)
    返回 (“”)
.如果真结束
mod.size = 1024
Module32First (snap, mod)
返回 (取字节集数据 (到字节集 (mod.szpath), 10))

.子程序 列调用的模块
.参数 pid, 整数型
.局部变量 snap, 整数型
.局部变量 mod, 模块信息
.局部变量 b, 整数型

列表框1.清空 ()
snap = CreateToolhelp32Snapshot (8, pid)
mod.size = 1024
b = Module32First (snap, mod)
.判断循环首 (b ≠ 0)
    列表框1.加入项目 (取字节集数据 (到字节集 (mod.szpath), 10, ), mod.pid)
    b = Module32Next (snap, mod)
.判断循环尾 ()
关闭句柄 (snap)


.子程序 _超级列表框1_当前表项被改变

列调用的模块 (到数值 (超级列表框1.取标题 (超级列表框1.现行选中项, )))


.子程序 _列表框1_双击选择

结束进程中DLL (到数值 (超级列表框1.取标题 (超级列表框1.现行选中项, )), 列表框1.取项目文本 (列表框1.现行选中项))
_超级列表框1_当前表项被改变 ()


.子程序 结束进程中DLL, 逻辑型, , 不是所有的DLL都能结束,本函数可能造成被结束DLL的进程异常退出,请小心使用
.参数 进程ID, 整数型, , 需要结束其中DLL的进程ID号
.参数 Dll名称, 文本型, , 需要结束的DLL的名称
.局部变量 线程ID, 整数型
.局部变量 分配内存, 整数型
.局部变量 退出代码, 整数型
.局部变量 线程地址, 整数型
.局部变量 线程句柄, 整数型
.局部变量 长度, 整数型

线程ID = 打开进程 (2035711, 真, 进程ID)  ' 在进程中创建一个线程
.判断开始 (线程ID = 0)  ' 为0表示创建失败,直接返回
    返回 (假)
.默认
    长度 = 取文本长度 (Dll名称) + 1  ' 取出dll的全路径长度
    分配内存 = VirtualAllocEx (线程ID, 0, 长度, 4096, 4)  ' 分配内存用来保存GetModuleHandleA的参数
    .如果 (WriteProcessMemory (线程ID, 分配内存, 到字节集 (Dll名称), 长度, 0))  ' 将参数写到远程的进程内存中
        线程地址 = GetProcAddress (GetModuleHandle (“Kernel32”), “GetModuleHandleA”)  ' 远程取得GetModuleHandleA入口地址
        线程句柄 = CreateRemoteThread (线程ID, 0, 0, 线程地址, 分配内存, 0, 0)  ' 远程执行命令
        WaitForSingleObject (线程句柄, -1)  ' 等待执行退出
        GetExitCodeThread (线程句柄, 取变量地址 (退出代码))  ' 获得远程命令返回的结果
        VirtualFreeEx (线程ID, 分配内存, 长度, 16384)  ' 释放内存
        关闭句柄 (线程句柄)  ' 关闭线程
        线程地址 = GetProcAddress (GetModuleHandle (“Kernel32”), “FreeLibraryAndExitThread”)  ' 远程取得FreeLibraryAndExitThread入口地址
        线程句柄 = CreateRemoteThread (线程ID, 0, 0, 线程地址, 退出代码, 0, 0)  ' 远程执行命令
        WaitForSingleObject (线程句柄, -1)  ' 等待执行退出
        VirtualFreeEx (线程ID, 分配内存, 长度, 16384)  ' 释放内存
        关闭句柄 (线程句柄)  ' 关闭线程
        关闭句柄 (线程ID)
    .否则
        VirtualFreeEx (线程ID, 分配内存, 长度, 16384)
        返回 (假)
    .如果结束


.判断结束
返回 (真)

附件设置隐藏,需要回复后才能看到!
离线zhaofeng0601

只看该作者 沙发  发表于: 2013-08-20

必须顶起
必须顶起
必须顶起必须顶起必须顶起
离线小七七

只看该作者 板凳  发表于: 2014-04-04
    
离线xl8888

只看该作者 地板  发表于: 2014-04-20
    
离线w617594434

只看该作者 4楼 发表于: 2014-05-29
Re:api-结束进程中DLL-(昭姐易语言)
离线q402300320

只看该作者 5楼 发表于: 2014-09-10
必须顶起
离线xiaoda2012

只看该作者 6楼 发表于: 2014-11-13
不错,谢谢分享
离线xiaoda2012

只看该作者 7楼 发表于: 2014-11-13
值得学习啊!
离线qqmeimeipp

只看该作者 8楼 发表于: 2016-04-13
谢谢,,,,,,,,,,,,,
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个