/*********************************************************************************
*Copyright(C),2016-$year$,Your Company
*FileName : Pnp.cpp
*Author : $username$
*Version : 0.01
*Date : $time$
*Description:
1.用于实现IRP_MJ_PNP请求相关功能的实现
*Others : //其他内容说明
*Function List: //主要函数列表,每条记录应包含函数名及功能简要说明
1.MJ_Pnp(), IRP_MJ_PNP请求的处理
2.DefaultPnpHandler(), 对PNP IRP进行缺省处理
*History : //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简介
1.Date:
Author:
Modification:
2.…………
**********************************************************************************/
#include "Pnp.h"
/************************************************************************
* 函数名称: DefaultPnpHandler
* 功能描述: 对PNP IRP进行缺省处理
* 参数列表:
|-pExtension: 设备对象的扩展
|-pIrp: IO请求包
* 返 回 值: 返回状态
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS DefaultPnpHandler(PDEVICE_EXTENSION pExtension, PIRP pIrp)
{
PAGED_CODE();
IoSkipCurrentIrpStackLocation(pIrp);
return IoCallDriver(pExtension->NextStackDevice, pIrp);
}
/************************************************************************
* 函数名称: MJ_Pnp
* 功能描述: 对即插即用IRP进行处理
* 参数列表:
|-PhysicalDeviceObject: 功能设备对象
|-pIrp: 从IO请求包
* 返 回 值: 返回状态
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS MJ_Pnp(IN PDEVICE_OBJECT PhysicalDeviceObject, IN PIRP pIrp)
{
PAGED_CODE();
NTSTATUS ntStatus = STATUS_SUCCESS;
PDEVICE_EXTENSION pExtension = (PDEVICE_EXTENSION)PhysicalDeviceObject->DeviceExtension;
PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);
static NTSTATUS(*fcntab[])(PDEVICE_EXTENSION pExtension, PIRP pIrp) =
{
DefaultPnpHandler, // IRP_MN_START_DEVICE
DefaultPnpHandler, // IRP_MN_QUERY_REMOVE_DEVICE
DefaultPnpHandler, // IRP_MN_REMOVE_DEVICE
DefaultPnpHandler, // IRP_MN_CANCEL_REMOVE_DEVICE
DefaultPnpHandler, // IRP_MN_STOP_DEVICE
DefaultPnpHandler, // IRP_MN_QUERY_STOP_DEVICE
DefaultPnpHandler, // IRP_MN_CANCEL_STOP_DEVICE
DefaultPnpHandler, // IRP_MN_QUERY_DEVICE_RELATIONS
DefaultPnpHandler, // IRP_MN_QUERY_INTERFACE
DefaultPnpHandler, // IRP_MN_QUERY_CAPABILITIES
DefaultPnpHandler, // IRP_MN_QUERY_RESOURCES
DefaultPnpHandler, // IRP_MN_QUERY_RESOURCE_REQUIREMENTS
DefaultPnpHandler, // IRP_MN_QUERY_DEVICE_TEXT
DefaultPnpHandler, // IRP_MN_FILTER_RESOURCE_REQUIREMENTS
DefaultPnpHandler, //
DefaultPnpHandler, // IRP_MN_READ_CONFIG
DefaultPnpHandler, // IRP_MN_WRITE_CONFIG
DefaultPnpHandler, // IRP_MN_EJECT
DefaultPnpHandler, // IRP_MN_SET_LOCK
DefaultPnpHandler, // IRP_MN_QUERY_ID
DefaultPnpHandler, // IRP_MN_QUERY_PNP_DEVICE_STATE
DefaultPnpHandler, // IRP_MN_QUERY_BUS_INFORMATION
DefaultPnpHandler, // IRP_MN_DEVICE_USAGE_NOTIFICATION
DefaultPnpHandler, // IRP_MN_SURPRISE_REMOVAL
};
ULONG fcn = stack->MinorFunction;
if (fcn >= arraysize(fcntab))
{ // 未知的子功能代码
ntStatus = DefaultPnpHandler(pExtension, pIrp); // some function we don't know about
return ntStatus;
}
ntStatus = (*fcntab[fcn])(pExtension, pIrp);
return ntStatus;
}
没有合适的资源?快使用搜索试试~ 我知道了~
VS2013驱动开发项目模板(详细)
共20个文件
cpp:8个
h:8个
filters:1个
5星 · 超过95%的资源 需积分: 50 109 下载量 13 浏览量
2016-05-25
21:29:17
上传
评论
收藏 16KB ZIP 举报
温馨提示
将不同的请求分开在各个文件中了。 VS2013驱动开发项目模板 基于 WDK 7600.16385.1 环境配置: 1:安装WDK 7600.16385.1 2:配置环境变量 WDKPATH 例如: WDKPATH=X:\WinDDK\7600.16385.1
资源推荐
资源详情
资源评论
收起资源包目录
WinDriver.zip (20个子文件)
Read.cpp 1KB
WinDriver.vcxproj 27KB
Close.cpp 1KB
Ioctls.cpp 1KB
Pnp.h 836B
Pnp.cpp 3KB
Create.cpp 1KB
__TemplateIcon.ico 10KB
Ioctls.h 752B
WinDriver.vcxproj.filters 2KB
Write.cpp 1KB
Dispatch.h 802B
main.cpp 3KB
WinDriver.vstemplate 3KB
Close.h 725B
Read.h 722B
main.h 2KB
Dispatch.cpp 2KB
Create.h 730B
Write.h 727B
共 20 条
- 1
资源评论
- 村夫.2018-01-24谢谢楼主分享,很不错的资源
- benben36112018-03-29vs的驱动开发模板,对初学者还挺有参考意义的,谢谢分享。
- asdfsxtylghjinjin2019-05-27可能是我不会用吧
Vinx911
- 粉丝: 118
- 资源: 88
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功