驱动程序五花八门,最简单的驱动完成一种特定的功能,特定的上层应用在启动的时候加载设备驱动,应用完成了任务就卸载掉驱动,不再占用系统的内存空间。这类驱动知名的如winio,winflash等。
动态加载驱动程序,其实很简单,只需要调用几个系统函数,所有的驱动动态加载大同小异,其实可以做一个库函数,只要提供驱动程序的名字,和驱动程序.sys所在的位置就可以完成加载和卸载。
本来根据ioctrl例子和参考winio等驱动的代码,对原来的代码进行了简化,完成了一个动态库。头文件和用法:
#ifdef DRIVERINSTALL_EXPORTS #define DRIVERINSTALL_API __declspec(dllexport) #else #define DRIVERINSTALL_API __declspec(dllimport) #endif
#include <windows.h>
#define IN
#define DRIVER_FUNC_INSTALL 0x01 //install
#define DRIVER_FUNC_REMOVE 0x02 //remove
#define BOOLEAN bool
extern DRIVERINSTALL_API BOOLEAN ManageDriver( IN LPCTSTR DriverName, IN LPCTSTR ServiceName, IN USHORT Function );
//usage example:
//install:
// ManageDriver("hellotest", "D:\\WINDDK\\3790.1830\\src\\general\\ioctl\\exe\\objchk_wxp_x86\\i386\\sioctl.sys", DRIVER_FUNC_INSTALL);
//remove:
// ManageDriver("hellotest","D:\\WINDDK\\3790.1830\\src\\general\\ioctl\\exe\\objchk_wxp_x86\\i386\\sioctl.sys", DRIVER_FUNC_REMOVE);
|
install之后就可以调用CreateFile函数来获取驱动的HANDLE然后控制它了。
阅读(2779) | 评论(0) | 转发(0) |