1.搭建编译环境
(1) 安装编译器:vc6.0或vc2003、vc2005等。
(2) 安装驱动开发工具包DDK ( driver development kits )
下载:ftp://202.113.29.4/ISO/M$/WinDDK/winxp_ddk.rar
这个是winxp的,也就是说由他编译的驱动是在XP下运行。如果你想下载其他版本,可以到ftp://202.113.29.4/ISO/M$/WinDDK/下找到你要的目标平台。
注意:这里的版本指的是将要运行你编译的驱动的机器操作系统版本,与你自己现在运行操作系统版本无关。
2.编写第一个驱动
- /* hello.c */
- #include <wdm.h>
- VOID HelloUnload( IN PDRIVER_OBJECT DriverObject )
- {
- DbgPrint( "Bye driver" );
- }
- NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject,
- IN PUNICODE_STRING pRegistryPath )
- {
- DbgPrint( " hello driver world! " ) ;
- pDriverObject->DriverUnload = HelloUnload;
- return STATUS_SUCCESS;
- }
DriverEntry 驱动的入口函数,相当c中main函数。
DbgPrint 输出函数,相当c中printf函数。
DriverUnload:函数指针,指向驱动卸载函数,当驱动动态卸载的时候调用它释放资源,有点像析构函数。
makefile文件
- !INCLUDE $(NTMAKEENV)/makefile.def
sources文件
- TARGETNAME=hello
- TARGETTYPE=DRIVER
- TARGETPATH=obj
- INCLUDES=
- TARGETLIBS=
- SOURCES=hello.c
编译
(1) 开始/所以程序/Develompent kits/ Windows DDK 2600 / Build Environments /Win 2K Checked Build Environment
(2) 输入build进行编译。
(3)没有任何问题的话,将在objckd/i386/下面生成一个hello.sys,这就是驱动文件。
3.驱动动态加载程序
- #include <windows.h>
- #include <stdio.h>
- int _cdecl main(void)
- {
- HANDLE hSCManager;
- HANDLE hService;
- SERVICE_STATUS ss;
- hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
- printf("Load Driver/n");
- if(hSCManager)
- {
- printf("Create Service/n");
- hService = CreateService(hSCManager, "Example", "Example Driver", SERVICE_START | DELETE | SERVICE_STOP, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, "C://hello.sys", NULL, NULL, NULL, NULL, NULL);
- if(!hService)
- {
- hService = OpenService(hSCManager, "Example", SERVICE_START | DELETE | SERVICE_STOP);
- }
- if(hService)
- {
- printf("Start Service/n");
- StartService(hService, 0, NULL);
- printf("Press Enter to close service/r/n");
- getchar();
- ControlService(hService, SERVICE_CONTROL_STOP, &ss);
- CloseServiceHandle(hService);
- DeleteService(hService);
- }
- CloseServiceHandle(hSCManager);
- }
- return 0;
- }
4.运行驱动
(1).将hello.sys复制到c:/hello.sys
(2).运行查看消息工具Dbgview.exe(debug view)。
下载地址:http://download.sysinternals.com/Files/DebugView.zip
(3).运行驱动加载程序,加载hello.sys。
你将会在Dbgview.exe程序中看到第一条输出。
(4).在驱动加载程序上按任意键,卸载hello.sys驱动。
你将会在Dbgview.exe程序中看到第二条输出。
如下图