手动加载驱动时的一些问题!!

这几天在用代码加载驱动的时候,莫名其妙的StartServices启动不了,Getlasterror为2,网上找了下资料,可分为两点,一个是驱动路径用绝对路径.如:D;\\12.sys.另一个是在加载失败后调用一次驱动卸载过程!这时候再加载就可以了.

//

编程(不利用现成工具)加载驱动程序的问题总结

大概步骤,网上有源码,只总结下我遇到的问题:

OpenSCManager 打开服务管理器

CreateService 创建服务

如果服务已经存在

     OpenService  打开服务

StartService 启动服务

 

问题1:

        StartService  总是返回2,ERROR_FILE_NOT_FOUND。

        我这里是穿进去的驱动文件的路径不正确,我直接像 windows应用程序编程 一样传入文件名称,然后把驱动文件sys放到程序相同目录下面,以为这样就能加载起来,其实不然,需要传入绝对路径。

       这里我首先获取了当前程序的运行路径,利用GetModuleFileName ,不要用 GetCurrentDirectory  ,他们的区别我在另外一篇文章中转载了下http://hi.baidu.com/lang2858/blog/item/2be95960e0ff68c78cb10d2c.html  ,这里我开始犯了个错误,得到的路径有问题。

 

问题2:

       当我得到正确路径后,继续调试,发现还是返回错误代码2

       百度了一下,发现csdn里面有人说路径前面需要加 \\??   ,这种说法没有我没有试,因为我是在用户层加载驱动的,不是在内核层,所以我想应该不会是这样的目录,直接跳过,本来就走错了,不要绕得更远。

        后面csdn里面有几个人问了类似问题,结果LZ的回答说是解决了,办法没有提供,我强烈的鄙视下!不回答别人可以,但是一堆人一起解决了问题,结果还保密上了。

        

         我想应该是我的服务先前创建成功了,只是StartService 失败,继续调试,发现真的没有重新创建,只是open了下,然后就启动,那就是这里有问题,没有重新创建服务,那服务里面指向的驱动地址应该还是原来那个错误的地址。

 

         于是我用winobj 查看了几次,主机是win7的 ,试了一下没有发现driver下面有我创建的驱动名称,辅机是xp的也没有看见,迷惑了半天。  最后打开 SRVINSTW.EXE  ,就是网上的一个安装/移除 驱动服务的工具,点击移除服务,在 服务名中也没有找到,又迷惑了一回,发现下面 包含设备驱动 没有勾选上 ,勾选上,终于找到我创建的那个服务了,直接移除掉,然后重新打开我的加载程序去加载,成功!

 

         这里解释下winobj  查看对象的为什么查看不到,后来我专门用SRVINSTW.EXE   提供的安装服务功能随便安装了一个服务,中间选择手动启动,结果用winobj查看,发现里面没有,然后 net start一下 ,发现就有了,说明winobj查看的是启动中的服务,还没有 start的他没有显示。

 

        所以我两台电脑都是由于原来路径有问题而后面改成正确的路径后 ,又由于服务没有被重新创建而启动失败的!

 

        这也是我在网上看到的一个driverload的程序,开始不太熟悉直接拿过来学习的,这个程序可能很多人在,可能需要优化下,在启动服务失败的情况下,它没有清除已经创建的服务,我觉得这块可以清除,还有好几个地方都是没有经过优化的!有空我优化下了再发出来下。

 

        关于这一点一定一定谨记每个地方出错的时候的逻辑处理,不然后面的所有程序搞正确了还要浪费很多时间来排查。

 

问题3:

        win7下面调试状态运行加载没有问题,xp下面加载也没有问题,直接在win7下面运行发现启动服务没有启动成功,这是因为权限问题,右键管理员模式运行程序就行了。

 

加载Mysql驱动程序出现ClassNotFoundException异常,这通常是由于以下几个原因导致的: 1. 缺少Mysql驱动程序:请确保你的项目中包含了正确的Mysql驱动程序。你可以从Mysql官方网站下载并添加到你的项目中,或者使用构建工具(如Maven或Gradle)来管理依赖。 2. 驱动程序的类名错误:请确保你在代码中使用的驱动程序类名是正确的。根据你提供的异常信息,正确的Mysql驱动程序类名应该是com.mysql.cj.jdbc.Driver。 3. 驱动程序的版本不匹配:请确保你使用的Mysql驱动程序版本与你连接的Mysql数据库版本兼容。不同版本的驱动程序可能具有不同的类名或API,因此需要根据实际情况选择合适的驱动程序版本。 解决这个问题的方法是: 1. 确保你的项目中包含了正确的Mysql驱动程序。可以通过手动添加jar包或使用构建工具来管理依赖。 2. 检查你在代码中使用的驱动程序类名是否正确,应该是com.mysql.cj.jdbc.Driver。 3. 确保你使用的Mysql驱动程序版本与你连接的Mysql数据库版本兼容。 下面是一个简单的示例代码,演示如何加载Mysql驱动程序: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Main { public static void main(String[] args) { try { // 加载Mysql驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立数据库连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // 执行数据库操作... // 关闭数据库连接 connection.close(); } catch (ClassNotFoundException e) { System.out.println("找不到Mysql驱动程序"); e.printStackTrace(); } catch (SQLException e) { System.out.println("数据库连接错误"); e.printStackTrace(); } } } ``` 请注意,上述代码中的"jdbc:mysql://localhost:3306/mydatabase"、"username"和"password"需要根据你的实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值