[用户投稿] Win 64 驱动编程 第六课 为驱动添加默认派遣例程

  2018年04月21日  深蓝  24828 阅读 Tag:

感谢本站用户:shenyizhe 投稿为大家分享。

 

废话不说,直接上源码

 

#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 条