开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 2776|回复: 6
收起左侧

[已解决] 请教与驱动有关的API

 关闭 [复制链接]
结帖率:75% (3/4)
发表于 2011-10-2 23:18:18 | 显示全部楼层 |阅读模式   湖南省衡阳市
2精币
我在整驱动操作方面的,需要几个API,即加载(安装)驱动、驱动通信、驱动暂停继续、驱动卸载。

请对API熟练的高手能告诉我这对应的API,包括声明,这个时候我也该睡了,先闪。

最佳答案

查看完整内容

好吧。。。上来了

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

结帖率:100% (6/6)
发表于 2011-10-2 23:18:19 | 显示全部楼层   重庆市重庆市
好吧。。。上来了

新建 易程序.rar

5.31 KB, 下载次数: 99

评分

参与人数 2好评 +1 精币 +1 荣誉 +1 收起 理由
a307 + 1 热心帮助他人,奖励1点荣誉
qwqw1351734 + 1 + 1 多谢了!我只能加这么点

查看全部评分

回复

使用道具 举报

结帖率:100% (6/6)
发表于 2011-10-2 23:30:48 | 显示全部楼层   重庆市重庆市
操作驱动?



.版本 2

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

hSCManager = Api_OpenSCManagerA (字符 (0), 字符 (0), #SC_MANAGER_CREATE_SERVICE)
.如果真 (hSCManager = 0)
    返回 (-1)
.如果真结束
hService = Api_CreateServiceA (hSCManager, 服务名, 显示名, #SERVICE_START, #SERVICE_KERNEL_DRIVER, #SERVICE_DEMAND_START, #SERVICE_ERROR_IGNORE, 驱动路径, 0, 0, 0, 0, 0)
.如果真 (hService = 0)
    hService = Api_OpenServiceA (hSCManager, 服务名, #SERVICE_START)
    .如果真 (hService = 0)
        Api_CloseServiceHandle (hSCManager)
        返回 (-1)
    .如果真结束

.如果真结束
Api_StartServiceA (hService, 0, 0)
Api_CloseServiceHandle (hService)
Api_CloseServiceHandle (hSCManager)
hDevice = Api_CreateFileA (驱动名, #GENERIC_READ + #GENERIC_WRITE, 0, 0, #OPEN_EXISTING, 0, 0)
返回 (hDevice)

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

hSCManager = Api_OpenSCManagerA (字符 (0), 字符 (0), #SC_MANAGER_CREATE_SERVICE)
.如果真 (hSCManager = 0)
    返回 (假)
.如果真结束
hService = Api_OpenServiceA (hSCManager, 服务名, #DELETE + #SERVICE_STOP)
.如果真 (hService = 0)
    Api_CloseServiceHandle (hSCManager)
    返回 (假)
.如果真结束
Api_ControlService (hService, #SERVICE_CONTROL_STOP, SERVICE_STATUS)
.如果真 (是否删除服务)
    Api_DeleteService (hService)
.如果真结束
Api_CloseServiceHandle (hService)
Api_CloseServiceHandle (hSCManager)
返回 (真)

.子程序 CTL_CODE, 整数型, , 返回控制代码.
.参数 DeviceType, 整数型, , #FILE_DEVICE_UNKNOWN
.参数 Function, 整数型, , 根据实际控制代码填写.
.参数 Method, 整数型, , #METHOD_BUFFERED
.参数 Access, 整数型, , #FILE_READ_ACCESS或#FILE_WRITE_ACCESS或#FILE_ANY_ACCESS
.局部变量 Return, 整数型

Return = 位或 (左移 (DeviceType, 16), 左移 (Function, 2), Method, 左移 (Access, 14))
返回 (Return)

.子程序 Control, 逻辑型
.参数 驱动句柄, 整数型, , 加载驱动返回的句柄
.参数 驱动控制码, 整数型, , CTL_CODE
.参数 输入指针, 整数型, , 欲输入数据的指针,无用请写将此参数设置为0
.参数 输入指针长度, 整数型, , 无用请写将此参数设置为0
.参数 输出指针, 整数型, , 欲输出数据的指针,无用请写将此参数设置为0
.参数 输出指针长度, 整数型, , 无用请写将此参数设置为0
.参数 返回值, 整数型, , lpBytesReturned实际装载到输出缓冲区的字节数量
.参数 重叠操作_, 整数型, , lpOverlappedOVERLAPPED这个结构用于重叠操作.针对同步操作请用ByVal As Long传递零值

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


.版本 2

.DLL命令 Api_lstrcpyn, 整数型, "kernel32.dll", "lstrcpynA"
    .参数 lpString1, 字节集
    .参数 lpString2, 整数型
    .参数 iMaxLength, 整数型

.DLL命令 Api_CreateServiceA, 整数型, "advapi32.dll", "CreateServiceA", , 创建服务,创建服务
    .参数 hSCManager, 整数型, , SCM句柄OpenSCManager返回值
    .参数 lpServiceName, 文本型, , 指向一个以0字符结尾的表示服务名称的字符串,字符串的最大长度是256个字符字符串的最大长度是256个字符,名称中不允许使用/或者\字符(因为这些字符会和注册表的路径表示方式冲突),这个值和注册表中的键名是相对应的
    .参数 lpDisplayName, 文本型, , 指向一个以0字符结尾表示服务名称的字符串,这个名称是供用户界面程序识别函数时使用的,同样,它的最大长度也是256个字符。这个值和注册表中的DisplayName键的值是相对应的
    .参数 dwDesiredAccess, 整数型, , 指定需要访问服务的操作可以有以下取值:SERVICE_ALL_ACCESS--可以进行所有操作SERVICE_START--允许调用StartService函数来启动服SERVICE_STOP--允许调用ControlService函数来停止服务DELETE--允许调用DeleteService函数来删除服务
    .参数 dwServiceType, 整数型, , 服务的类型我们的教程中只用得到SERVICE_KERNEL_DRIVER,这个值和注册表中的Type键的值是相对应的
    .参数 dwStartType, 整数型, , 表示在什么时候启动服务,如果我们需要手动启动驱动的话,那么使用SERVICE_DEMAND_START参数,如果驱动程序需要在系统启动的时候就被启动,那么使用SERVICE_AUTO_START参数,这个取值和注册表中的Start键的取值是相对应的
    .参数 dwErrorControl, 整数型, , 表示当驱动初始化的时候出错该如何处理,取值SERVICE_ERROR_IGNORE表示忽略错误,取值SERVICE_ERROR_NORMAL表示将错误记录到系统日志中去,这个取值和注册表中的ErrorControl键值是相对应的
    .参数 lpBinaryPathName, 文本型, , 指向以0结尾的表示驱动程序文件名的字符串,这个值和注册表中的ImagePath的键值是相对应的
    .参数 lpLoadOrderGroup, 整数型, , 指向以0结尾的表示组名称的字符串,表示该驱动属于哪个组,既然我们的例子程序不属于任何组,那么这里就用NULL好了
    .参数 lpdwTagId, 整数型, , 指向一个32位的缓冲区,用来接收驱动在lpLoadOrderGroup参数指定的组中的唯一的标识,我们的例子中不需要用到这个表示,所以参数指定为NULL
    .参数 lpDependencies, 整数型, , 对于驱动程序来说,这个参数没什么用途,设置为NULL好了
    .参数 lpServiceStartName, 整数型, , 指向一个以0结尾的表示帐号名称的字符串,用于指定服务允许在哪个帐号下运行,如果服务类型是SERVICE_KERNEL_DRIVER的话,该帐号就是系统装入服务的模块名称,我们在这里使用NULL,表示由默认的模块装入
    .参数 lpPassword, 整数型, , 对于驱动程序来说,这个参数没什么用途,设置为NULL好了

.DLL命令 Api_OpenServiceA, 整数型, "advapi32.dll", "OpenServiceA", , 打开服务,
    .参数 hSCManager, 整数型, , 由CreateServiceA返回的句柄
    .参数 lpServiceName, 文本型, , 服务名称
    .参数 dwDesiredAccess, 整数型, , 983551指定需要访问服务的操作

.DLL命令 Api_StartServiceA, 整数型, "advapi32.dll", "StartServiceA", , 开始启动系统服务,开始运行服务
    .参数 服务句柄, 整数型, , CreateService返回的驱动的句柄
    .参数 dwNumServiceArgs, 整数型, , 0
    .参数 lpServiceArgVectors, 整数型, , 0

.DLL命令 Api_CloseServiceHandle, 整数型, "advapi32.dll", "CloseServiceHandle", , 关闭SC服务管理句柄_,
    .参数 SC对象句柄, 整数型, , 由OpenSCManagerA和CreateServiceA返回的句柄关闭时应关闭两个

.DLL命令 Api_CreateFileA, 整数型, "kernel32.dll", "CreateFileA", , 创建文件_,这是一个全功能的例程可打开和创建文件、管道、邮槽、通信服务、设备以及控制台 ——返回值:如执行成功则返回文件句柄.INVALID_HANDLE_VALUE表示出错会设置GetLastError.即使函数成功但若文件存在且指定了CREATE_ALWAYS 或 OPEN_ALWAYSGetLastError也会设为ERROR_ALREADY_EXISTS 例子:查看例程API程序自杀
    .参数 打开文件名, 文本型, , lpFileName要打开的文件的名字
    .参数 访问权限, 整数型, , dwDesiredAccess如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零表示只允许获取与一个设备有关的信息
    .参数 共享方式, 整数型, , dwShareMode
    .参数 安全特性, 整数型, , lpSecurityAttributes是指向SECURITY_ATTRIBUTES结构的指针,指定了目录的安全属性,但要求文件系统支持如NTFS的格式。Windows 98不支持此属性,在函数调用时应设置为NULL
    .参数 创建方式, 整数型, , dwCreationDispositiondwCreationDisposition Long下述常数之一:
    .参数 文件属性, 整数型, , dwFlagsAndAttributesdwFlagsAndAttributes Long一个或多个下述常数
    .参数 从文件复制文件属性, 整数型, , hTemplateFile如果不为零则指定一个文件句柄.新文件将从这个文件中复制扩展属性

.DLL命令 Api_ControlService, 整数型, "advapi32.dll", "ControlService", , 停止系统服务_,用来停止系统服务
    .参数 hService, 整数型, , 用 OpenService 返回的句柄
    .参数 dwControl, 整数型, , 用于驱动程序的时候,这个参数总是设置为NULL
    .参数 lpServiceStatus, SERVICE_STATUS, 传址, 同上,也为NULL

.DLL命令 Api_OpenSCManagerA, 整数型, "advapi32.dll", "OpenSCManagerA", , 打开SC管理服务_,建立服务首先应用此函数打开然后再用OpenServiceA打开服务获得服务控制管理器数据库的句柄
    .参数 机器名称, 文本型, , lpMachineName用取本机名取得就是本机的名称指向需要打开的计算机名字符串,字符串以NULL结尾,如果参数指定为NULL,表示连接到本机上的SCM
    .参数 数据库名, 文本型, , lpDatabaseName指向以NULL结尾的包含SCM数据库名称的字符串,字符串应该指定为"ServicesActive",如果参数指定为NULL,则默认打开"ServicesActive"
    .参数 数据库, 整数型, , dwDesiredAccess指定访问SCM的权限,这个参数告诉SCM我们需要进行什么样的操作,常用的取值有三个:SC_MANAGER_CREATE_SERVICESC_MANAGER_CREATE_SERVICESC_MANAGER_ALL_ACCESS

.DLL命令 Api_DeviceIoControl, 逻辑型, "kernel32.dll", "DeviceIoControl", , 设备操作_,对设备执行指定的操作
    .参数 驱动句柄, 整数型, , 加载驱动返回的句柄
    .参数 驱动控制码, 整数型, , 与驱动程序通信的控制码,十进制
    .参数 输入指针, 整数型, , 欲输入数据的指针,无用请写将此参数设置为0
    .参数 输入指针长度, 整数型, , 无用请写将此参数设置为0
    .参数 输出指针, 整数型, , 欲输出数据的指针,无用请写将此参数设置为0
    .参数 输出指针长度, 整数型, , 无用请写将此参数设置为0
    .参数 缓冲区字节数, 整数型, , lpBytesReturned实际装载到输出缓冲区的字节数量
    .参数 OVERLAPPED结构地址, 整数型, , lpOverlappedOVERLAPPED这个结构用于重叠操作.针对同步操作请用ByVal As Long传递零值

.DLL命令 Api_DeleteService, 整数型, "advapi32.dll", "DeleteService", , 删除服务,成功返回0失败返回非0
    .参数 hService, 整数型, , OpenSCManager的数据库句柄
回复

使用道具 举报

结帖率:75% (3/4)
 楼主| 发表于 2011-10-2 23:33:59 | 显示全部楼层   湖南省衡阳市
本帖最后由 qwqw1351734 于 2011-10-2 23:42 编辑
易团俊 发表于 2011-10-2 23:30
操作驱动?


能附上E工程文件么?子程序弄成中文的OK?英文我看不懂

另外,我得告诉你这个无法编译,还是拿E工程文件来吧
回复

使用道具 举报

结帖率:75% (3/4)
 楼主| 发表于 2011-10-2 23:42:46 | 显示全部楼层   湖南省衡阳市
易团俊 发表于 2011-10-2 23:42
好吧。。。上来了

OK,我去试试看
回复

使用道具 举报

结帖率:75% (3/4)
 楼主| 发表于 2011-10-2 23:43:38 | 显示全部楼层   湖南省衡阳市
OK,多谢了,我现在采纳
回复

使用道具 举报

结帖率:0% (0/1)

签到天数: 1 天

发表于 2011-10-2 23:46:12 | 显示全部楼层   广东省汕尾市
驱动,卧槽.驱动.帮不了
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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