初学驱动开发-windows驱动-helloWorld
2016-08-09 11:25
323 查看
1.准备工作-安装vm虚拟机+虚拟机下安装xp
2.下载DriverMonitor+DebugView
3.编写代码
编写makefile+sources文件
makefile 文件
#
# DO NOT EDIT THIS FILE!!! Edit .\sources. If you want to add a new source
# file to this component. This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#
!INCLUDE $(NTMAKEENV)\makefile.def
sources 文件
TARGETNAME=HelloDDK
TARGETTYPE=DRIVER
TARGETPATH=OBJ
SOURCES=HelloWord.cpp\
4.生成.sys文件
5.拷贝.sys文件到虚拟机
6.使用DriverMonitor加载驱动并且用DebugView查看输出
2.下载DriverMonitor+DebugView
3.编写代码
#ifdef __cplusplus extern "C" { #endif #include #ifdef __cplusplus } #endif #define PAGEDCODE code_seg("PAGE") #define LOCKEDCODE code_seg() #define INITCODE code_seg("INIT") #define PAGEDDATA data_seg("PAGE") #define LOCKEDDATA data_seg() #define INITDATA data_seg("INIT") #define arraysize(p) (sizeof(p)/sizeof((p)[0])) typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDevice; UNICODE_STRING ustrDeviceName; //设备名称 UNICODE_STRING ustrSymLinkName; //符号链接名 } DEVICE_EXTENSION, *PDEVICE_EXTENSION; /************************************************************************ * 函数名称:LoadDevice * 功能描述:加载设备对象,如果存在则使用现有设备对象,如果不存在则创建新的设备对象 *************************************************************************/ #pragma INITCODE NTSTATUS LoadDevice ( IN PDRIVER_OBJECT pDriverObject, IN PCWSTR SourceString) { NTSTATUS status; PDEVICE_OBJECT pDevObj; PDEVICE_EXTENSION pDevExt; UNICODE_STRING devName; //设备名称 RtlInitUnicodeString(&devName,SourceString); //创建设备 status = IoCreateDevice( pDriverObject, sizeof(DEVICE_EXTENSION), &(UNICODE_STRING)devName, FILE_DEVICE_UNKNOWN, 0, TRUE, &pDevObj ); if (!NT_SUCCESS(status)) { RtlFreeUnicodeString( &devName ); return status; } RtlZeroMemory(pDevObj->DeviceExtension, sizeof(DEVICE_EXTENSION)); pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension; pDevObj->Flags |= DO_BUFFERED_IO; pDevExt->pDevice = pDevObj; pDevExt->ustrDeviceName = devName; //创建符号链接 UNICODE_STRING symLinkName; RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK"); pDevExt->ustrSymLinkName = symLinkName; status = IoCreateSymbolicLink( &symLinkName,&devName ); if (!NT_SUCCESS(status)) { IoDeleteDevice( pDevObj ); RtlFreeUnicodeString( &devName ); RtlFreeUnicodeString( &symLinkName ); return status; } return STATUS_SUCCESS; } /************************************************************************ * 函数名称:UnloadDevice * 功能描述:卸载驱动设备 *************************************************************************/ #pragma PAGEDCODE VOID UnloadDevice (IN PDRIVER_OBJECT pDriverObject) { PDEVICE_OBJECT pNextObj; KdPrint(("Enter DriverUnload\n")); pNextObj = pDriverObject->DeviceObject; while (pNextObj != NULL) { PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION) pNextObj->DeviceExtension; //删除符号链接 UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName; IoDeleteSymbolicLink(&pLinkName); pNextObj = pNextObj->NextDevice; IoDeleteDevice( pDevExt->pDevice ); } } /************************************************************************ * 函数名称:DriverEntry * 功能描述:驱动程序入口函数 *************************************************************************/ #pragma INITCODE extern "C" NTSTATUS DriverEntry ( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { NTSTATUS status; KdPrint(("Enter DriverEntry\n")); KdPrint(("Hello World Driver\n")); KdPrint(("pRegistryPath:%ws\n", pRegistryPath->Buffer)); //信息 //创建驱动设备对象 status = LoadDevice(pDriverObject, L"\\Device\\HelloWordDDKDevice"); //卸载驱动设备对象 pDriverObject->DriverUnload = UnloadDevice; KdPrint(("DriverEntry end\n")); return status; }
编写makefile+sources文件
makefile 文件
#
# DO NOT EDIT THIS FILE!!! Edit .\sources. If you want to add a new source
# file to this component. This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#
!INCLUDE $(NTMAKEENV)\makefile.def
sources 文件
TARGETNAME=HelloDDK
TARGETTYPE=DRIVER
TARGETPATH=OBJ
SOURCES=HelloWord.cpp\
4.生成.sys文件
5.拷贝.sys文件到虚拟机
6.使用DriverMonitor加载驱动并且用DebugView查看输出
相关文章推荐
- 初学Windows驱动开发需要具备什么知识理论?
- 初学驱动开发-windows驱动-键盘过滤驱动
- 初学驱动开发-windows驱动-命令行编译环境
- 初学驱动开发-windows驱动-鼠标过滤驱动
- FAQ5:初学Windows驱动开发需要具备什么知识理论?
- Windows文件系统过滤驱动开发教程(4)
- Windows文件系统过滤驱动开发教程(5)
- Windows 驱动开发笔记(二)
- Windows 驱动开发笔记(三)
- Windows文件系统过滤驱动开发教程
- Windows文件系统过滤驱动开发教程(8)
- windows驱动开发学习进展----四
- Windows文件系统过滤驱动开发教程(7)
- Windows文件系统过滤驱动开发教程(11)
- Windows驱动开发,几个BLOG值得经常看看
- Windows驱动开发入门遇到的问题和困难
- Windows文件系统过滤驱动开发教程(9)
- Windows 驱动开发笔记(一)
- Windows文件系统过滤驱动开发教程
- Windows 驱动开发笔记(五)