- 注册时间
- 2021-4-16
- 最后登录
- 2023-8-13
- 在线时间
- 4 小时
编程入门
- 龙马币
- 48
|
开发驱动基本框架源代码,发一篇驱动的基本框架吧!
- // DriverDemo.cpp文件
- extern "C"
- {
- #include <ntddk.h>
- }
- //自定义函数的声明
- NTSTATUS DispatchCreateClose(PDEVICE_OBJECT pDevObj,PIRP pIrp);
- void DriverUnload(PDRIVER_OBJECT pDriverObj);
- //驱动内部名称和连接名称
- #define DEVICE_NAME L"\\Device\\devDriverDemo "
- #define LINK_NAME L“\\??\\sldevDriverDemo ”
- 驱动程序加载时调用DriverEntry例程
- NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)
- {
- NTSTATUS status=STATUS_SUCCESS;
- DbgPrint("DriverDemo:DriverEntry...\n");
- //初始化各派遣例程
- pDriverObj->MajorFunction[IRP_MJ_CREATE]=DispatchCreateClose;
- pDriverObj->MajorFunction[IRP_MJ_CLOSE]=DispatchCreateClose;
- pDriverObj->DriverUnload=DriverUnload;
- //设备名称
- UNICODE_STRING ustrDeviceName;
- RtlInitUnicodeString(&ustrDeviceName,DEVICE_NAME);
- //创建设备对象
- PDEVICE_OBJECT pDevObj;
- status = IoCreateDevice(pDriverObj,0,&ustrDeviceName,FILE_DEVICE_UNKNOWN,0,false,&pDevObj);
- if(!NT_SUCCESS(status))
- {
- DbgPrint("IoCreateDevice创建设备失败! \n");
- return status;
- }
- //符号连接名称
- UNICODE_STRING ustrLinkName;
- RtlInitUnicodeString(&ustrLinkName,LINK_NAME);
- //创建关联
- status=IoCreateSymbolicLink(&ustrLinkName,&ustrDeviceName);
- if(!NT_SUCCESS(status))
- {
- IoDeleteDevice(pDevObj);
- DbgPrint("IoCreateSymbolicLink创建关联失败! \n");
- return status;
- }
- return STATUS_SUCCESS;
- }
- //自定义驱动卸载函数
- void DriverUnload(PDRIVER_OBJECT pDriverObj)
- {
- DbgPrint("DriverDemo:DriverUnload...\n");
- //删除符号连接名称
- UNICODE_STRING strLink;
- RtlInitUnicodeString(&strLink,LINK_NAME);
- IoDeleteSymbolicLink(&strLink);
- IoDeleteDevice(pDriverObj->DeviceObject);
- }
- //处理IRP_MJ_CREATE
- NTSTATUS DispatchCreateClose(PDEVICE_OBJECT pDevObj,PIRP pIrp)
- {
- DbgPrint("DriverDemo:DriverUnload...\n");
- pIrp->IoStatus.Status=STATUS_SUCCESS;
- IoCompleteRequest(pIrp,IO_NO_INCREMENT);
- return STATUS_SUCCESS;
- }
复制代码
|
|