资源介绍:
易代码出于本人之手,另附VB代码注释,VB代码非原创,2年前从看雪某个角落瞄出来翻译的[因为我个人非常喜欢把各种语言互相转换- -],一直把这个功能集成在自己的私人模块里,今天拿出来与大家分享.
因为原代码申请内存释放内存用了自己写的内存控制函数[这个暂且不发了,sorry],我已经换为易语言自己的申请内存[注意,我没有释放],释放内存这些请自行解决,否则查询易论坛,一抓一大把.否则将导致内存大量浪费- -这个你懂的.不过不是经常调用也无所谓,
资源作者:
lms520
资源界面:
.版本 2
.支持库 spec
.程序集 窗口程序集1
.子程序 驱动操作_暴力枚举驱动, 整数型, , 暴力枚举驱动,成功返回驱动数量,失败返回0
.参数 驱动文件名, 内核驱动成员, 数组
.局部变量 Ret, 整数型
.局部变量 Buffer, 整数型
.局部变量 ModulesInfo, lms520_MODULES
.局部变量 i, 整数型
.局部变量 驱动服务名称, 文本型, , "0"
.局部变量 X, 整数型
.局部变量 位置A, 整数型
.局部变量 判断函数, 整数型
.局部变量 装载类型, 内核驱动成员
' '''''''''定义数据类型SYSTEM_MODULE_INFORMATION' '''''''''
' Option Explicit
' Private Type SYSTEM_MODULE_INFORMATION
' dwReserved(1) As Long
' dwBase As Long
' dwSize As Long
' dwFlags As Long
' Index As Integer
' Unknown As Integer
' LoadCount As Integer
' ModuleNameOffset As Integer
' ImageName As String * 256
' End Type
' '''''''''定义数据类型MODULES' '''''''''
' Private Type MODULES
' dwNumberOfModules As Long
' ModuleInformation As SYSTEM_MODULE_INFORMATION
' End Type
' '''''''''定义API函数'''''''''''''''''''
' Private Declare Function NtQuerySystemInformation Lib "NTDLL.DLL" ( _
' ByVal SystemInformationClass As Long, _
' ByVal pSystemInformation As Long, _
' ByVal SystemInformationLength As Long, _
' ByRef ReturnLength As Long) As Long
' Private Declare Function VirtualAlloc Lib "kernel32.dll" ( _
' ByVal Address As Long, _
' ByVal dwSize As Long, _
' ByVal AllocationType As Long, _
' ByVal Protect As Long) As Long
' Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
' ByVal pDst As Long, _
' ByVal pSrc As Long, _
' ByVal ByteLen As Long)
' '''''''''定义常量'''''''''''''''''''
' Private Const SystemModuleInformation = 11
' Private Const PAGE_READWRITE = &H4
' Private Const MEM_RELEASE = &H8000
' Private Const MEM_COMMIT = &H1000
清除数组 (驱动服务名称)
' Private Sub cmdEnum_Click()
' Dim Ret As Long
' Dim Buffer As Long
' Dim ModulesInfo As MODULES
' Dim i As Long
' NtQuerySystemInformation SystemModuleInformation, 0, 0, Ret
meiju_NtQuerySystemInformation (#SystemModuleInformation, 0, 0, Ret)
' Buffer = VirtualAlloc(0, Ret * 2, MEM_COMMIT, PAGE_READWRITE)
Buffer = 申请内存 (Ret × 2, 真)
' Buffer = meiju_VirtualAlloc (0, Ret × 2, #MEM_COMMIT, #PAGE_READWRITE)
调试输出 (Buffer)
' NtQuerySystemInformation SystemModuleInformation, Buffer, Ret * 2, Ret
meiju_NtQuerySystemInformation (#SystemModuleInformation, Buffer, Ret × 2, Ret)
' CopyMemory ByVal VarPtr(ModulesInfo), ByVal Buffer, LenB(ModulesInfo)
meiju_CopyMemory (ModulesInfo, Buffer, meiju_GlobalSize (ModulesInfo))
' lstModule.Clear '列表框.清空()
' lstModule.AddItem "Total: " & ModulesInfo.dwNumberOfModules & " Modules"
' lstModule.AddItem StrConv(ModulesInfo.ModuleInformation.ImageName, vbUnicode)
' 输出调试文本 (“Total: ” + 到文本 (ModulesInfo.dwNumberOfModules) + “ Modules”)
' 输出调试文本 (到文本 (ModulesInfo.ModuleInformation.ImageName))
加入成员 (驱动服务名称, 到文本 (ModulesInfo.ModuleInformation.ImageName))
' i = ModulesInfo.dwNumberOfModules
i = ModulesInfo.dwNumberOfModules
判断函数 = i
.判断循环首 (i > 1)
i = i - 1
Buffer = Buffer + 71 × 4
' While (i > 1)
' i = i - 1
' Buffer = Buffer + 71 * 4
meiju_CopyMemory (ModulesInfo, Buffer, meiju_GlobalSize (ModulesInfo))
' CopyMemory ByVal VarPtr(ModulesInfo), ByVal Buffer, LenB(ModulesInfo)
' 输出调试文本 (到文本 (ModulesInfo.ModuleInformation.ImageName))
加入成员 (驱动服务名称, 到文本 (ModulesInfo.ModuleInformation.ImageName))
' lstModule.AddItem StrConv(ModulesInfo.ModuleInformation.ImageName, vbUnicode)
' Wend
.判断循环尾 ()
.计次循环首 (取数组成员数 (驱动服务名称), X)
位置A = 倒找文本 (驱动服务名称 [X], “\”, , 假)
装载类型.驱动文件名 = 取文本右边 (驱动服务名称 [X], 取文本长度 (驱动服务名称 [X]) - 位置A)
装载类型.驱动全路径名 = 驱动服务名称 [X]
加入成员 (驱动文件名, 装载类型)
.计次循环尾 ()
.如果 (判断函数 > 1)
返回 (取数组成员数 (驱动服务名称))
.否则
返回 (0)
.如果结束
' 本源码来自三叶资源网(www.sanye.cx)
.子程序 _按钮1_被单击
.局部变量 局_驱动数据, 内核驱动成员, , "0"
.局部变量 循环, 整数型
编辑框1.内容 = “”
驱动操作_暴力枚举驱动 (局_驱动数据)
.计次循环首 (取数组成员数 (局_驱动数据), 循环)
编辑框1.加入文本 (“驱动文件名:” + 局_驱动数据 [循环].驱动文件名 + #换行符 + “驱动全路径名:” + 局_驱动数据 [循环].驱动全路径名 + #换行符)
.计次循环尾 ()
' 本源码来自三叶资源网(www.sanye.cx)
资源下载:
vb ntquerysysteminformation
NtQuerySystemInformation
NtQuerySystemInformation 检测驱动