实现一个虚拟的驱动设备,实现应用层与驱动设备对象简单的交互

本文介绍如何从零开始实现一个虚拟驱动设备,包括设备的创建、打开和关闭,以及应用层与驱动层的交互。通过控制台应用程序,当驱动的MyCreate函数被调用时,会在Debug窗口显示相关信息,后续的MyCleanUp和MyClose函数也会按预期执行。
摘要由CSDN通过智能技术生成

学习自:

B站:写驱动的女装大佬 《–从零开始造核弹—windows驱动程序开发(中级篇-课2)》

知识点:

设备的创建、打开、关闭,应用层怎么把请求传到驱动层

实现效果:

控制台程序运行后,驱动的MyCreate函数开始工作 ,在Debug窗口打印了 My Device has be opende
按任意键后驱动调用了MyCleanUp函数和MyClose,分别打印出了这两个函数设置的打印内容

驱动层(SYS)代码:

/**********************驱动程序学习例程************************
*  平台:visual studio 2019
*  功能:创建驱动虚拟设备(驱动端)
*  编写:逆行者
*  日期:2021-01-15
*  更改记录:未更改
******************************************************************/

#include <ntddk.h>
#define DEVICE_NAME L"\\Device\\MyfirstDevice" //定义一个驱动的名字
#define SYM_NAME    L"\\??\\MyfirstDevice"//定义一个符号链接


VOID nothing(HANDLE ppid, HANDLE mypid, BOOLEAN bcreate)
{
   
	//回调函数,有程序打开或关闭显示提示信息
	DbgPrint("ProcessNotify\n");

}

/*
MyCreate自己定义的驱动设备的派遣函数
pdevice:设备对象

*/
NTSTATUS MyCreate(PDEVICE_OBJECT pdevice, PIRP pirp)
{
   
	NTSTATUS status = STATUS_SUCCESS;
	DbgPrint("My Device has be opende\n");

	pirp->IoStatus.Status = status; //请求成功
	pirp->IoStatus.Information = 0;//信息处理了0字节
	IoCompleteRequest(pirp,IO_NO_INCREMENT);//完成请求
	return STATUS_SUCCESS;

}

/*
MyClose关闭函数

*/
NTSTATUS MyClose(PDEVICE_OBJECT pdevice, PIRP pirp)
{
   
	NTSTATUS status = STATUS_SUCCESS;
	DbgPrint("My Device has be closed\n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值