- 注册时间
- 2014-1-27
- 最后登录
- 1970-1-1
TA的每日心情 | 开心 2021-2-22 22:11 |
---|
|
发表于 2020-12-31 01:19:23
|
显示全部楼层
发一篇驱动的基本框架吧!
//////////////////////////////////////////////////
// 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("DriverDemoriverEntry...\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("DriverDemoriverUnload...\n");
//删除符号连接名称
UNICODE_STRING strLink;
RtlInitUnicodeString(&strLink,LINK_NAME);
IoDeleteSymbolicLink(&strLink);
IoDeleteDevice(pDriverObj->DeviceObject);
}
//处理IRP_MJ_CREATE
NTSTATUS DispatchCreateClose(PDEVICE_OBJECT pDevObj,PIRP pIrp)
{
DbgPrint("DriverDemoriverUnload...\n");
pIrp->IoStatus.Status=STATUS_SUCCESS;
IoCompleteRequest(pIrp,IO_NO_INCREMENT);
return STATUS_SUCCESS;
} |
|