偶写了一个驱动,在应用程序点加载后,然后点卸载,发现卸载不了。用DbgView看了下,UnOnload函数没有被调用,但是我把这个应用程序退出后驱动的UnOnload函数才被调用,这是怎么回事呢?是不是我的应用程序有什么问题?

解决方案 »

  1.   

    StopServices调用之前,最好用QueryServiceStatus查看一下状态,如果是某个操作正在PENDING
    ,就要采取相应的措施。此时是可能返回错误的。
    另外,CreateServices时是否给足了权限?
      

  2.   

    看你驱动启动的模式,有的是要重起卸载的。
    但是你说的问题,可能还是你程序的问题。你是你自己写的UnOnload都没被调用。
      

  3.   

    恩,是我自己写的卸载函数没有被调用,只有程序退出后才会被调用。难道是应用程序还有挂起的操作没完成?CreateServices权限有。
    很郁闷呢!!!。
      

  4.   

    到底会是应用程序的什么操作没有完成啊?发送IOCTL?还是其它什么的,应用程序和驱动通信只有IOCTL啊,难道是这个错了?
      

  5.   

    这个是新问题啊,什么句柄?我有两个线程和驱动通信,但是在调用unload之前我都把他们TerminateThread了。想不出别的问题了~~
      

  6.   

    TerminateThread是强行结束线程,不会释放线程使用的资源,要自己把句柄都关闭。