开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2134|回复: 1
收起左侧

[闲聊] 内存驱动读写问题

[复制链接]
结帖率:0% (0/1)
发表于 2011-12-10 14:36:26 | 显示全部楼层 |阅读模式   浙江省杭州市
内存驱动读写的后面读字节集是什么啊
发表于 2012-5-16 02:13:12 | 显示全部楼层   湖北省咸宁市
.版本 2

.子程序 加载驱动, 整数型, 公开, 成功返回驱动句柄,失败返回-1
.参数 驱动路径, 文本型, , sys驱动程序完整路径
.参数 服务名, 文本型, , 表示服务名称的字符串,名称中不允许使用"/"或"\"字符
.参数 显示名, 文本型, , 表示服务名称的字符串,这个名称是供用户界面程序识别函数时使用的
.参数 驱动名, 文本型, , 欲创建的驱动名,文本"\\.\"加上驱动名
.局部变量 hDevice, 整数型, , , 驱动句柄
.局部变量 hSCManager, 整数型, , , 控制管理器数据库的句柄
.局部变量 hService, 整数型, , , 服务句柄

hSCManager = OpenSCManagerA (字符 (0), 字符 (0), #SC_MANAGER_CREATE_SERVICE)
.如果真 (hSCManager = 0)
    返回 (-1)
.如果真结束
hService = CreateServiceA (hSCManager, 服务名, 显示名, #SERVICE_START, #SERVICE_KERNEL_DRIVER, #SERVICE_DEMAND_START, #SERVICE_ERROR_IGNORE, 驱动路径, 0, 0, 0, 0, 0)
.如果真 (hService = 0)
    hService = OpenServiceA (hSCManager, 服务名, #SERVICE_START)
    .如果真 (hService = 0)  ' 调用CreateService注册服务失败!
        CloseServiceHandle (hSCManager)
        返回 (-1)
    .如果真结束

.如果真结束
StartServiceA (hService, 0, 0)
CloseServiceHandle (hService)
CloseServiceHandle (hSCManager)
hDevice = CreateFileA (驱动名, #GENERIC_READ + #GENERIC_WRITE, 0, 0, #OPEN_EXISTING, 0, 0)
返回 (hDevice)  ' 返回驱动句柄

.子程序 卸载驱动, 逻辑型, 公开, 卸载驱动并删除服务,成功返回真,失败返回假
.参数 服务名, 文本型, , 表示服务名称的字符串,名称中不允许使用"/"或"\"字符
.参数 是否删除服务, 逻辑型, 可空, 为真表示删除服务
.局部变量 hService, 整数型, , , 服务句柄
.局部变量 hSCManager, 整数型, , , 控制管理器数据库的句柄
.局部变量 SERVICE_STATUS, SERVICE_STATUS

hSCManager = OpenSCManagerA (字符 (0), 字符 (0), #SC_MANAGER_CREATE_SERVICE)

.如果真 (hSCManager = 0)
    返回 (假)
.如果真结束
hService = OpenServiceA (hSCManager, 服务名, #DELETE + #SERVICE_STOP)
.如果真 (hService = 0)
    CloseServiceHandle (hSCManager)
    返回 (假)
.如果真结束
ControlService (hService, #SERVICE_CONTROL_STOP, SERVICE_STATUS)
.如果真 (是否删除服务)
    DeleteService (hService)  ' 删除服务后第二次不能正常创建服务,会安装失败??
.如果真结束
CloseServiceHandle (hService)
CloseServiceHandle (hSCManager)
返回 (真)


.子程序 与驱动程序通信, 逻辑型, 公开
.参数 句柄, 整数型, , 加载驱动返回的句柄
.参数 驱动控制码, 整数型, , 与驱动程序通信的控制码,十进制
.参数 输入指针, 整数型, , 欲输入数据的指针,无用请写将此参数设置为0
.参数 输入指针长度, 整数型, , 无用请写将此参数设置为0
.参数 输出指针, 整数型, , 欲输出数据的指针,无用请写将此参数设置为0
.参数 输出指针长度, 整数型, , 无用请写将此参数设置为0
.局部变量 重叠操作_, OVERLAPPED

返回 (DeviceIoControl (句柄, 驱动控制码, 输入指针, 输入指针长度, 输出指针, 输出指针长度, 0, 重叠操作_))

.子程序 内存_驱动加载, 逻辑型, 公开
.局部变量 驱动名, 文本型

驱动名 = 取运行目录 () + “\ramint.sys”
.如果真 (写到文件 (驱动名, #驱动_内存))
    驱动句柄 = 加载驱动 (驱动名, “ialdnwxf”, “ialdnwxf”, “\\.\ialdnwxf”)
    .如果真 (驱动句柄 ≠ -1)
        删除文件 (驱动名)
        返回 (真)
    .如果真结束

.如果真结束
删除文件 (驱动名)
返回 (假)

.子程序 内存_驱动卸载, 逻辑型, 公开

返回 (卸载驱动 (“ialdnwxf”, 假))

.子程序 内存_读整数, 整数型, 公开, 失败返回-1
.参数 进程ID, 整数型
.参数 内存地址, 整数型
.局部变量 内存结构, 内存结构
.局部变量 内存结构地址, 整数型
.局部变量 输出数据, 字节集
.局部变量 输出指针, 整数型
.局部变量 临时字节集, 字节集

内存结构.进程ID = 进程ID
内存结构.内存地址 = 内存地址
内存结构.欲写入值 = 0
内存结构地址 = lstrcpyn_内存结构 (内存结构, 内存结构, 0)

输出数据 = 取空白字节集 (12)
输出指针 = lstrcpyn_字节集 (输出数据, 输出数据, 0)

.如果 (与驱动程序通信 (驱动句柄, 2236416, 内存结构地址, 12, 输出指针, 12))

.否则
    返回 (-1)
.如果结束



临时字节集 = 取字节集右边 (输出数据, 4)
返回 (取字节集数据 (临时字节集, 3, ))

.子程序 内存_写整数, 逻辑型, 公开, 失败返回-1,成功返回0
.参数 进程ID, 整数型
.参数 内存地址, 整数型
.参数 欲写入数据, 整数型
.局部变量 内存结构, 内存结构
.局部变量 内存结构地址, 整数型

内存结构.进程ID = 进程ID
内存结构.内存地址 = 内存地址
内存结构.欲写入值 = 欲写入数据
内存结构地址 = lstrcpyn_内存结构 (内存结构, 内存结构, 0)
返回 (与驱动程序通信 (驱动句柄, 2236421, 内存结构地址, 12, 0, 0))


.子程序 内存_读字节集, 字节集, 公开, 失败返回空字节集
.参数 进程ID, 整数型
.参数 读取地址, 整数型
.参数 读取长度, 整数型
.局部变量 返回内容, 整数型
.局部变量 i, 整数型
.局部变量 返回字节, 字节集
.局部变量 内存结构, 内存结构
.局部变量 内存结构地址, 整数型
.局部变量 输出数据, 字节集
.局部变量 输出指针, 整数型
.局部变量 临时字节集, 字节集

内存结构.进程ID = 进程ID
内存结构.欲写入值 = 0
返回字节 = {  }
.如果真 (读取长度 = 0)
    读取长度 = 8
.如果真结束
.计次循环首 (取整 (读取长度 ÷ 4) + 1, i)
    内存结构.内存地址 = 读取地址 + (i - 1) × 4
    内存结构地址 = lstrcpyn_内存结构 (内存结构, 内存结构, 0)
    输出数据 = 取空白字节集 (12)
    输出指针 = lstrcpyn_字节集 (输出数据, 输出数据, 0)
    .如果 (与驱动程序通信 (驱动句柄, 2236416, 内存结构地址, 12, 输出指针, 12))

    .否则
        跳出循环 ()
    .如果结束
    临时字节集 = 取字节集右边 (输出数据, 4)
    返回内容 = 取字节集数据 (临时字节集, 3, )
    .如果真 (返回内容 ≠ -1)
        返回字节 = 返回字节 + 到字节集 (返回内容)
    .如果真结束

.计次循环尾 ()
返回字节 = 取字节集左边 (返回字节, 读取长度)
返回 (返回字节)

.子程序 内存_写字节集, 逻辑型, 公开
.参数 进程ID, 整数型
.参数 内存地址, 整数型
.参数 字节集数据, 字节集
.局部变量 写入内容, 整数型
.局部变量 i, 整数型
.局部变量 返回, 逻辑型
.局部变量 长度, 整数型
.局部变量 内存结构, 内存结构
.局部变量 内存结构地址, 整数型

内存结构.进程ID = 进程ID
长度 = 取字节集长度 (字节集数据)
返回 = 真
.计次循环首 (长度, i)
    写入内容 = 数值_字节集到整数 (字节集数据, i)
    内存结构.内存地址 = 内存地址 + i - 1
    内存结构.欲写入值 = 写入内容
    内存结构地址 = lstrcpyn_内存结构 (内存结构, 内存结构, 0)
    .如果 (与驱动程序通信 (驱动句柄, 2236421, 内存结构地址, 12, 0, 0))

    .否则
        返回 = 假
        跳出循环 ()
    .如果结束

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

.子程序 数值_字节集到整数, 整数型
.参数 字节集, 字节集
.参数 位置, 整数型, 可空, 默认为1
.局部变量 ret, 整数型
.局部变量 address, 整数型
.局部变量 len, 整数型

address = lstrcpyn_字节集 (字节集, 字节集, 0)
len = 取字节集长度 (字节集)
.如果真 (是否为空 (位置))
    位置 = 1
.如果真结束
.如果真 (位置 > len 或 位置 < 1)
    返回 (0)
.如果真结束
.如果 (len - 位置 < 4)
    RtlMoveMemory_读整数 (ret, address + 位置 - 1, len - 位置 + 1)
.否则
    RtlMoveMemory_读整数 (ret, address + 位置 - 1, 4)
.如果结束
返回 (ret)

看看吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表