软件教程 2018年04月21日 深蓝 24828 阅读 Tag:
废话不说,直接上源码
#include<DriverTest003.h>
#pragma INITCODE
// TYPEDEF LONG NTSTATUS
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING B) {
// KdBreakPiont();
//__debugbreak(); 设置断点
pDriverObject->MajorFunction[IRP_MJ_CREATE] = ddk_DispatchRoutine_CONTROL; // IRP_MJ_CREATE 创建相关的IRP处理函数
pDriverObject->MajorFunction[IRP_MJ_CLOSE] = ddk_DispatchRoutine_CONTROL; // IRP_MJ_CREATE 创建相关的IRP处理函数
pDriverObject->MajorFunction[IRP_MJ_READ] = ddk_DispatchRoutine_CONTROL; // IRP_MJ_CREATE 创建相关的IRP处理函数
pDriverObject->MajorFunction[IRP_MJ_WRITE] = ddk_DispatchRoutine_CONTROL; // IRP_MJ_CREATE 创建相关的IRP处理函数
pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ddk_DispatchRoutine_CONTROL; // IRP_MJ_CREATE 创建相关的IRP处理函数
KdPrint(("驱动加载成功...Success!"));
//注册派遣函数
CreateMyDevice(pDriverObject); //创建相应的设备
pDriverObject->DriverUnload = DDK_Unload;
return(1);
}
#pragma PAGECODE
VOID DDK_Unload(IN PDRIVER_OBJECT pDriverObject) {
PDEVICE_OBJECT pDev; // 取得要删除的设备对象
UNICODE_STRING symLinkName;
pDev = pDriverObject->DeviceObject;
IoDeleteDevice(pDev); // 删除设备
RtlInitUnicodeString(&symLinkName, L"\\??\\DriverTest003"); // 取得符号链接的名字
IoDeleteSymbolicLink(&symLinkName); // 删除符号链接
KdPrint(("驱动成功卸载...OK!"));
// 删除所有设备
DbgPrint("卸载成功!");
}
#pragma PAGECODE
NTSTATUS ddk_DispatchRoutine_CONTROL(IN PDEVICE_OBJECT pDevObj,IN PIRP pIrp) {
// 对相应的IRP进行处理
pIrp->IoStatus.Information = 0; // 设置操作的字节数为0,这里无实际意义
pIrp->IoStatus.Status = STATUS_SUCCESS; // 返回成功
IoCompleteRequest(pIrp,IO_NO_INCREMENT); // 指示完成此IRP
KdPrint(("离开派遣函数\n")); // 调试信息
return STATUS_SUCCESS; // 返回成功
}
我的工单留言列表与站长回复 . 共有留言: 28 条