易语言枚举进程所有句柄信息的代码

DLL命令表

.版本 2
.DLL命令 GetCurrentProcessId, 整数型, "kernel32.dll", "GetCurrentProcessId"
.DLL命令 GetCurrentProcess, 整数型, "kernel32.dll", "GetCurrentProcess"
.DLL命令 RtlMoveMemory_SYSTEM_HANDLE_INFORMATION, , "kernel32.dll", "RtlMoveMemory"
  .参数 Destination, SYSTEM_HANDLE_INFORMATION
  .参数 Source, 整数型
  .参数 Length, 整数型
.DLL命令 DuplicateHandle, 逻辑型, "kernel32.dll", "DuplicateHandle"
  .参数 hSourceProcessHandle, 整数型
  .参数 hSourceHandle, 整数型
  .参数 hTargetProcessHandle, 整数型
  .参数 lpTargetHandle, 整数型, 传址
  .参数 dwDesiredAccess, 整数型
  .参数 bInheritHandle, 逻辑型
  .参数 dwOptions, 整数型
.DLL命令 OpenProcess, 整数型, "kernel32.dll", "OpenProcess"
  .参数 dwDesiredAccess, 整数型
  .参数 bInheritHandle, 逻辑型
  .参数 dwProcessId, 整数型
.DLL命令 CloseHandle, 逻辑型, "kernel32.dll", "CloseHandle"
  .参数 hObject, 整数型
.DLL命令 ZwQuerySystemInformation, 整数型, "ntdll.dll", "ZwQuerySystemInformation"
  .参数 SystemInformationClass, 整数型
  .参数 SystemInformation, 字节集
  .参数 SystemInformationLength, 整数型
  .参数 ReturnLength, 整数型, 传址
.DLL命令 ZwQueryObject, 整数型, "ntdll.dll", "ZwQueryObject"
  .参数 ObjectHandle, 整数型
  .参数 ObjectInformationClass, 整数型
  .参数 ObjectInformation, 字节集
  .参数 ObjectInformationLength, 整数型
  .参数 ReturnLength, 整数型, 传址
.DLL命令 ZwQueryObject_SYSTEM_HANDLE_STATE, 整数型, "ntdll.dll", "ZwQueryObject"
  .参数 ObjectHandle, 整数型
  .参数 ObjectInformationClass, 整数型
  .参数 ObjectInformation, SYSTEM_HANDLE_STATE
  .参数 ObjectInformationLength, 整数型
  .参数 ReturnLength, 整数型, 传址
.DLL命令 RtlUnicodeStringToAnsiString, 整数型, "ntdll.dll", "RtlUnicodeStringToAnsiString"
  .参数 DestinationString, STRING
  .参数 SourceString, 字节集
  .参数 AllocateDestinationString, 逻辑型
.DLL命令 RtlFreeAnsiString, 整数型, "ntdll.dll", "RtlFreeAnsiString"
  .参数 AnsiString, STRING

常量数据表

.版本 2
.常量 sizeof_SYSTEM_HANDLE_INFORMATION, "16"
.常量 sizeof_SYSTEM_HANDLE_STATE, "56"
.常量 SystemHandleInformation, "16", , 0x10
.常量 ObjectBasicInformation, "0"
.常量 ObjectNameInformation, "1"
.常量 ObjectTypeInformation, "2"
.常量 STATUS_INFO_LENGTH_MISMATCH, "-1073741820", , 0xC0000004L
.常量 STATUS_INVALID_HANDLE, "-1073741816", , 0xC0000008L
.常量 DUPLICATE_SAME_ACCESS, "2", , 0x00000002
.常量 PROCESS_ALL_ACCESS, "2097151"

自定义数据类型表

.版本 2
.数据类型 SYSTEM_HANDLE_INFORMATION
  .成员 ProcessId, 整数型
  .成员 ObjectTypeNumber, 字节型
  .成员 Flags, 字节型
  .成员 Handle, 短整数型
  .成员 Object, 整数型
  .成员 GrantedAccess, 整数型
.数据类型 STRING
  .成员 Length, 短整数型
  .成员 MaximumLength, 短整数型
  .成员 Buffer, 整数型
.数据类型 SYSTEM_HANDLE_STATE
  .成员 r1, 整数型
  .成员 GrantedAccess, 整数型
  .成员 HandleCount, 整数型
  .成员 ReferenceCount, 整数型
  .成员 r5, 整数型
  .成员 r6, 整数型
  .成员 r7, 整数型
  .成员 r8, 整数型
  .成员 r9, 整数型
  .成员 r10, 整数型
  .成员 r11, 整数型
  .成员 r12, 整数型
  .成员 r13, 整数型
  .成员 r14, 整数型

List

.版本 2
.程序集 List
.程序集变量 _data, 字节集
.程序集变量 _size, 整数型
.子程序 List, , 公开, 构造函数
.参数 data, 字节集
.参数 size, 整数型
_data = data
_size = size
.子程序 Count, 整数型, 公开
.局部变量 count, 整数型
置入代码 ({ 139, 69, 8, 139, 0, 139, 64, 4, 131, 192, 8, 139, 0, 201, 194, 4, 0 })
返回 (0)
.子程序 GetItem, 整数型, 公开
.参数 index, 整数型, , 从0开始
置入代码 ({ 139, 77, 8, 139, 9, 139, 65, 4, 139, 89, 8, 139, 85, 12, 131, 192, 12, 15, 175, 218, 1, 216, 201, 194, 8, 0 })
返回 (0)

载入

.版本 2
.程序集 程序集1
.子程序 _启动子程序, 整数型
载入 (窗口1, , 假)
返回 (0)

枚举进程所有句柄信息的代码

.版本 2
.支持库 iext
.程序集 窗口程序集_窗口1
.程序集变量 cpid, 整数型
.子程序 _窗口1_创建完毕
cpid = GetCurrentProcessId ()
进程ID编辑框.内容 = 到文本 (cpid)
.子程序 _查询按钮_被单击
.局部变量 pid, 整数型
.局部变量 list, List
.局部变量 i, 整数型
.局部变量 info, SYSTEM_HANDLE_INFORMATION
.局部变量 handle, 整数型
.局部变量 hProcess, 整数型
.局部变量 index, 整数型
超级列表框.全部删除 ()
pid = 到整数 (进程ID编辑框.内容)
list = 获取系统所有句柄信息 ()
.如果真 (pid ≠ cpid)
  hProcess = OpenProcess (#PROCESS_ALL_ACCESS, 假, pid)
.如果真结束
.变量循环首 (0, list.Count () - 1, 1, i)
  RtlMoveMemory_SYSTEM_HANDLE_INFORMATION (info, list.GetItem (i), #sizeof_SYSTEM_HANDLE_INFORMATION)
  .如果真 (info.ProcessId = pid)
    .如果 (pid = cpid)
      handle = info.Handle
    .否则
      DuplicateHandle (hProcess, info.Handle, GetCurrentProcess (), handle, #DUPLICATE_SAME_ACCESS, 假, #DUPLICATE_SAME_ACCESS)
    .如果结束
    index = 超级列表框.插入表项 (, 获取句柄类型 (handle), , , , )
    超级列表框.置标题 (index, 1, 获取句柄名 (handle))
    超级列表框.置标题 (index, 2, 到文本 (info.Handle))
    超级列表框.置标题 (index, 3, 到文本 (info.Object))
    超级列表框.置标题 (index, 4, 到文本 (info.ObjectTypeNumber))
    超级列表框.置标题 (index, 5, 到文本 (获取句柄引用数 (handle)))
    .如果真 (pid ≠ cpid)
      CloseHandle (handle)
    .如果真结束
  .如果真结束
.变量循环尾 ()
.如果真 (hProcess ≠ 0)
  CloseHandle (hProcess)
.如果真结束
.子程序 获取系统所有句柄信息, List
.局部变量 len, 整数型
.局部变量 buffer, 字节集
.局部变量 status, 整数型
.局部变量 list, List
len = 16534 ' 0x4096
.循环判断首 ()
  buffer = 取空白字节集 (len)
  status = ZwQuerySystemInformation (#SystemHandleInformation, buffer, len, 0)
  .如果真 (status = #STATUS_INFO_LENGTH_MISMATCH)
    len = len + 16534 ' 0x4096
  .如果真结束
.循环判断尾 (status = #STATUS_INFO_LENGTH_MISMATCH)
list.List (buffer, #sizeof_SYSTEM_HANDLE_INFORMATION)
返回 (list)
.子程序 获取句柄名, 文本型
.参数 handle, 整数型
.局部变量 size, 整数型
.局部变量 unicode, 字节集
.局部变量 ansi, STRING
.局部变量 str, 文本型
.如果 (ZwQueryObject (handle, #ObjectTypeInformation, unicode, 0, size) ≠ #STATUS_INVALID_HANDLE)
  unicode = 取空白字节集 (size)
  ZwQueryObject (handle, #ObjectNameInformation, unicode, size, 0)
  RtlUnicodeStringToAnsiString (ansi, unicode, 真)
  str = 指针到文本 (ansi.Buffer)
  RtlFreeAnsiString (ansi)
.否则
  str = “无法获取”
.如果结束
返回 (str)
.子程序 获取句柄类型, 文本型
.参数 handle, 整数型
.局部变量 size, 整数型
.局部变量 unicode, 字节集
.局部变量 ansi, STRING
.局部变量 str, 文本型
.如果 (ZwQueryObject (handle, #ObjectTypeInformation, unicode, 0, size) ≠ #STATUS_INVALID_HANDLE)
  unicode = 取空白字节集 (size)
  ZwQueryObject (handle, #ObjectTypeInformation, unicode, size, 0)
  RtlUnicodeStringToAnsiString (ansi, unicode, 真)
  str = 指针到文本 (ansi.Buffer)
  RtlFreeAnsiString (ansi)
.否则
  str = “无法获取”
.如果结束
返回 (str)
.子程序 获取句柄引用数, 整数型
.参数 handle, 整数型
.局部变量 state, SYSTEM_HANDLE_STATE
ZwQueryObject_SYSTEM_HANDLE_STATE (handle, #ObjectBasicInformation, state, #sizeof_SYSTEM_HANDLE_STATE, 0)
返回 (state.ReferenceCount - 1)

运行结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • 易语言的进程检测程序制作

    许多易语言新手朋友在制作软件的过程中也许可能会碰到需要为自己的程序增加一个检测进程的功能,可能是为了防止自己的程序被其他工具修改或者其他目的,但是却又不知道怎么编写代码,所以为了帮助大家解决这个问题,今天小编就来叫大家如何用易语言编写一个检测指定进程的工具. 1.首先,我们先将界面画好,如图所示. 2.接着双击启动窗口跳转到代码编辑区域开始写代码.接着双击启动窗口跳转到代码编辑区域开始写代码. 3.首先我们新建一个子程序,用来检测指定进程是否存在的,相当于程序的核心部分了.将子程序命名为"进程是

  • 易语言获取进程id的方法

    本文介绍如何通过易语言,来获取进程ID.(本次教程不需要用到dll和模块,十分简单) 1.启动易语言,新建"Windows窗口程序". 2.建立一个"按钮" 3.双击"按钮" 4.放入以下代码: .版本 2 .支持库 eAPI .支持库 spec .程序集 窗口程序集1 .子程序 _按钮1_被单击 .局部变量 进程信息, 进程信息, , "0" .局部变量 n, 整数型 .局部变量 取进程ID, 整数型 进程信息 = 取系统进

  • 易语言枚举进程通过窗口句柄获取已经登录的QQ号码

    DLL命令表 .版本 2 .DLL命令 GetDesktopWindow, 整数型, "user32.dll", "GetDesktopWindow" .DLL命令 CreateToolhelp32Snapshot, 整数型, "kernel32", "CreateToolhelp32Snapshot" .参数 dwFlags, 整数型, , 0 .参数 th32ProcessIE, 整数型, , 0 .DLL命令 Proce

  • 易语言检测文件被哪个进程占用的代码

    检测文件占用的代码 此功能需要加载贝贝吧模块6.6 .版本 2 .支持库 eAPI .程序集 窗口程序集_启动窗口 .子程序 _查询按钮_被单击 .局部变量 进程名, 进程信息, , "0" .局部变量 进程id, 整数型, , "0" .局部变量 a, 整数型, , "0" .局部变量 i, 整数型 进程名 = 取系统进程列表 () 显示占用列表框.清空 () .计次循环首 (取数组成员数 (进程名), i) .如果真 (寻找文本 (到小写 (

  • 易语言优化进程内存方法

    本篇文章主要向您介绍如何使用编程软件"易语言"做到指定进程进行"内存优化" 1.启动"易语言". 2.选择"菜单栏"中的"f.程序",再在弹出的列表中选择"N.新建". 3.在弹出的标题为"新建:"的窗口中选择"Windows窗口程序",再点击标题为"确定(o)"的按钮. 4.在背景为灰色的,且标题为""(空

  • 易语言关于程序进程和线程的基础知识

    程序是计算机指令的集合,它以文件的形式存储在磁盘上. 进程:通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动. 进程是资源申请.调度和独立运行的单位,因此,它使用系统中的运行资源:而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源. 进程由两个部分组成: 1.操作系统用来管理进程的内核对象.内核对象也是系统用来存放关于进程的统计信息的地方. 2.地址空间.它包含所有可执行模块或DLL模块的代码和数据.它还包含动态内存分

  • 易语言枚举进程所有句柄信息的代码

    DLL命令表 .版本 2 .DLL命令 GetCurrentProcessId, 整数型, "kernel32.dll", "GetCurrentProcessId" .DLL命令 GetCurrentProcess, 整数型, "kernel32.dll", "GetCurrentProcess" .DLL命令 RtlMoveMemory_SYSTEM_HANDLE_INFORMATION, , "kernel32

  • 易语言实现自动发送QQ信息的代码

    全局变量表 .版本 2 .全局变量 局_句柄, 整数型 .全局变量 b, 整数型 QQ自动发送信息 此功能需要加载精易模块5.6 .版本 2 .支持库 spec .支持库 eAPI .程序集 窗口程序集_启动窗口 .程序集变量 逻辑, 逻辑型 .子程序 _暂停按钮_被单击 时钟1.时钟周期 = 0 .子程序 _好友按钮_被单击 逻辑 = 假 时钟1.时钟周期 = 1500 .子程序 功能_取句柄, 整数型 .参数 名称, 文本型 局_句柄 = 窗口_取句柄 (, , "TXGuiFoundati

  • 易语言取mp3相关信息的教学

    利用编程软件"易语言"取MP3的备注等等. 1.启动易语言. 2.弹出"易语言"的窗口后,在菜单栏中鼠标左键单击第一个,标题为"F.程序"的菜单. 3.在弹出的新菜单框中鼠标左键单击第一个,标题为"N.新建"的项. 4.然后在新弹出的标题为"新建:"的窗口中,在窗口左边的列表中鼠标左键单击标题为"Windows 空白程序"的项: 再在右边新出现的列表中鼠标左键单击标题为"Win

  • 易语言编写的算术题程序实例代码

    这是一个用易语言编写的一款自动出题的软件 程序下载地址:https://www.jb51.net/codes/645872.html 以下是源码内容: .版本 2 .程序集 窗口程序集1 .子程序 _按钮1_被单击 .判断开始 (编辑框1.内容 = "" 或 编辑框2.内容 = "") 信息框 ("账户名或密码不能为空!", 0, "提示", ) 编辑框1.获取焦点 () .判断 (编辑框1.内容 = "sau123

  • 易语言子程序数据传递的应用代码

    子程序数据传递应用代码 .版本 2 .程序集 窗口程序集1 .子程序 _显示按钮_被单击 .局部变量 整数变量1, 整数型 .局部变量 整数变量2, 整数型 .局部变量 小数变量1, 小数型 .局部变量 小数变量2, 小数型 .局部变量 文本型变量1, 文本型 .局部变量 文本型变量2, 文本型 参数赋值 (整数变量1, 整数变量2, 小数变量1, 小数变量2, 文本型变量1, 文本型变量2) 编辑框1.加入文本 ("参考整数型参数中的变量:" + 到文本 (整数变量1) + #换行符

  • 易语言关闭多线程句柄方法

    命令名 :关闭线程句柄 返回真表示已成功关闭线程句柄.在Linux下,如果线程已经结束,本命令可能返回假.本命令为初级命令. 参数 数据类型 说明 线程句柄 整数型(int) 可通过"启动线程"的第三个参数获取线程句柄. 使用例子: .版本 2 .支持库 EThread .程序集 程序集1 .程序集变量 线程句柄, 整数型 .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行 启动线程 (&子程序1, , 线程句柄) 关闭线程句柄 (线程句柄) 返回 (0) '

  • 易语言制作语音聊天机器人的代码

    常量数据表 .版本 2 .常量 对话前, "<文本长度: 7>", , text":" .常量 对话后, "<文本长度: 2>", , "} .常量 token前, "<文本长度: 16>", , "access_token":" .常量 双撇号, "<文本长度: 1>", , " .常量 apikey, &q

  • 易语言多线程多任务下载器的代码

    多线程多任务下载模块源码 1.DLL命令表 .版本 2 .DLL命令 InternetGetConnectedStateHTTP, , "Wininet.dll", "InternetGetConnectedState", 公开 .参数 lpdwFlags, 整数型, 传址 .参数 dwReserved, 整数型 .DLL命令 InternetOpenAHTTP, 整数型, "Wininet.dll", "InternetOpenA&q

  • 易语言表格不显示滚动条的代码

    DLL命令代码 .版本 2 .DLL命令 滚动条, 整数型, , "ShowScrollBar" .参数 句柄, 整数型 .参数 类型, 整数型 .参数 与否, 逻辑型 表格不显示滚动条代码 .版本 2 .程序集 窗口程序集1 .程序集变量 滚动条状态 .程序集变量 数据库名, 文本型 .子程序 __启动窗口_创建完毕 .局部变量 运行目录, 文本型 .局部变量 字段, 字段信息, , "6" 滚动条状态 = 表格1.取窗口句柄 () 运行目录 = 取运行目录 ()

随机推荐