基于umdf2的驱动程序

源码下载:https://download.csdn.net/download/mao0514/88915667 

win10 64位系统+vs2019+wdk

inf安装:

 

VOID
UMDF2Driver1EvtIoDeviceControl(_In_ WDFQUEUE Queue,_In_ WDFREQUEST Request,_In_ size_t OutputBufferLength,_In_ size_t InputBufferLength,_In_ ULONG IoControlCode)
/*++Routine Description:This event is invoked when the framework receives IRP_MJ_DEVICE_CONTROL request.Arguments:Queue -  Handle to the framework queue object that is associated with theI/O request.Request - Handle to a framework request object.OutputBufferLength - Size of the output buffer in bytesInputBufferLength - Size of the input buffer in bytesIoControlCode - I/O control code.Return Value:VOID--*/
{TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_QUEUE, "%!FUNC! Queue 0x%p, Request 0x%p OutputBufferLength %d InputBufferLength %d IoControlCode %d", Queue, Request, (int) OutputBufferLength, (int) InputBufferLength, IoControlCode);CHAR		n, c[] = "壹贰叁肆伍陆柒捌玖零";PVOID buffer, outbuf;NTSTATUS  status = 0;switch (IoControlCode) {case CHAR_IOCTL_800:if (InputBufferLength == 0 || OutputBufferLength == 0){WdfRequestComplete(Request, STATUS_INVALID_PARAMETER);break;}else{status = WdfRequestRetrieveInputBuffer(Request, 1, &buffer, NULL);if (!NT_SUCCESS(status)){WdfRequestComplete(Request, STATUS_UNSUCCESSFUL);break;}status = WdfRequestRetrieveOutputBuffer(Request, 2, &outbuf/*outbuf指针的指针*/, NULL);if (!NT_SUCCESS(status)){WdfRequestComplete(Request, STATUS_UNSUCCESSFUL);break;}n = *(unsigned char*)buffer;KdPrint(("read base0 %x %x", 0, *(unsigned int*)buffer));memcpy((unsigned char*)outbuf, (unsigned char*)(c+2*n),2);WdfRequestCompleteWithInformation(Request, STATUS_SUCCESS, 2);}break;default:status = STATUS_INVALID_DEVICE_REQUEST;WdfRequestCompleteWithInformation(Request, status, 0);break;}// WdfRequestComplete(Request, STATUS_SUCCESS);return;
}

应用端:


//pub.h
#include <initguid.h>DEFINE_GUID(GUID_DEVINTERFACE_UMDF2Driver1,0xd63d7565, 0xb448, 0x45cb, 0xa2, 0x4b, 0xe7, 0x32, 0x65, 0x1d, 0x45, 0x29);
// {d63d7565-b448-45cb-a24b-e732651d4529}#define CHAR_IOCTL_800 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)//api
#include <windows.h>
#include <setupapi.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <winioctl.h>
//#pragma comment(lib,"setupapi.lib")
PCHAR
GetDevicePath(IN  LPGUID InterfaceGuid
)
{HDEVINFO HardwareDeviceInfo;SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData = NULL;ULONG Length, RequiredLength = 0;BOOL bResult;HardwareDeviceInfo = SetupDiGetClassDevs(InterfaceGuid,NULL,NULL,(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));if (HardwareDeviceInfo == INVALID_HANDLE_VALUE) {printf("SetupDiGetClassDevs failed!\n");exit(1);}DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);bResult = SetupDiEnumDeviceInterfaces(HardwareDeviceInfo,0,InterfaceGuid,0,&DeviceInterfaceData);if (bResult == FALSE) {/*LPVOID lpMsgBuf;if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPSTR) &lpMsgBuf,0,NULL)) {printf("Error: %s", (LPSTR)lpMsgBuf);LocalFree(lpMsgBuf);}*/printf("SetupDiEnumDeviceInterfaces failed.\n");SetupDiDestroyDeviceInfoList(HardwareDeviceInfo);exit(1);}SetupDiGetDeviceInterfaceDetail(HardwareDeviceInfo,&DeviceInterfaceData,NULL,0,&RequiredLength,NULL);DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)LocalAlloc(LMEM_FIXED, RequiredLength);if (DeviceInterfaceDetailData == NULL) {SetupDiDestroyDeviceInfoList(HardwareDeviceInfo);printf("Failed to allocate memory.\n");exit(1);}DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);Length = RequiredLength;bResult = SetupDiGetDeviceInterfaceDetail(HardwareDeviceInfo,&DeviceInterfaceData,DeviceInterfaceDetailData,Length,&RequiredLength,NULL);if (bResult == FALSE) {/*LPVOID lpMsgBuf;if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPSTR) &lpMsgBuf,0,NULL)) {MessageBox(NULL, (LPCTSTR) lpMsgBuf, "Error", MB_OK);LocalFree(lpMsgBuf);}*/printf("Error in SetupDiGetDeviceInterfaceDetail\n");SetupDiDestroyDeviceInfoList(HardwareDeviceInfo);LocalFree(DeviceInterfaceDetailData);exit(1);}return DeviceInterfaceDetailData->DevicePath;}HANDLE hDevice = INVALID_HANDLE_VALUE;void CMFCApplication1Dlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码PCHAR  DevicePath;DevicePath = GetDevicePath((LPGUID)&GUID_DEVINTERFACE_UMDF2Driver1);hDevice = CreateFile(DevicePath,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);if (hDevice == INVALID_HANDLE_VALUE) {MessageBox("err.\n");return;}MessageBox("OK.\n");
}void CMFCApplication1Dlg::OnBnClickedButton2()
{// TODO: 在此添加控件通知处理程序代码CHAR	bufInput[1];	// Input to deviceCHAR	bufOutput[2];	// Output from deviceULONG	nOutput;	// Count written to bufOutputbufInput[0] = 2;if (!DeviceIoControl(hDevice,CHAR_IOCTL_800,bufInput,1,bufOutput,2,&nOutput,NULL)){MessageBox("err.\n");return;}MessageBox(bufOutput);CloseHandle(hDevice);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF-Misc-百里挑一

题目链接&#xff1a;BUUCTF在线评测 (buuoj.cn) 下载附件打开是一个流量包文件&#xff1a; 全是在传图片时候的流量&#xff0c;先把图片保存出来文件–>导出对象–>HTTP–>保存到一个文件夹 然后使用kali下的exiftool找到了一半flag exiftool *|grep flag 另外一半…

工业网关、物联网网关与PLC网关是什么?

网关是什么&#xff1f; 网关是一种用于连接不同网络的网络设备&#xff0c;其作用是实现网络之间的通信和数据交换。它负责将一个网络的数据转发到另一个网络&#xff0c;并且可以进行路由、转换和过滤等处理。通常用于连接局域网和广域网之间&#xff0c;可以是硬件设备或者软…

7、Linux-防火墙和配置静态ip

一、防火墙&#xff08;防火墙服务名firewalld&#xff09; 防火墙配置命令&#xff1a;firewall-cmd firewall-cmd --help&#xff1a;防火墙帮助firewall-cmd --state&#xff1a;查看防火墙状态firewall-cmd --zonepublic --list-ports&#xff1a;查看所有打开的端口firew…

html实体字符,已拿offer入职

面试知识点 主要内容包括html&#xff0c;css&#xff0c;前端基础&#xff0c;前端核心&#xff0c;前端进阶&#xff0c;移动端开发&#xff0c;计算机基础&#xff0c;算法与数据结构&#xff0c;设计模式&#xff0c;项目等等。 html 1.浏览器页面有哪三层构成&#xff0c…

ES-ES性能优化

缓存优化&#xff1a; 功能优化&#xff1a; 访问多&#xff1a;热层 访问少&#xff1a;温层 极少访问&#xff1a;第三方

【2024年最新】294地级市-地理相邻矩阵(名称版、行政代码版)

数据为同省下城市之间的相邻矩阵&#xff0c;表示同一省份内各个城市相互之间邻近关系。如果同一省份下两个城市相邻&#xff0c;矩阵中对应的矩阵值为1&#xff0c;否则&#xff0c;矩阵值为0 一、数据介绍 数据名称&#xff1a;地级市-地理相邻矩阵 数据范围&#xff1a;地…

leetcode刷题(javaScript)——二叉树、平衡二叉树相关场景题总结

二叉树的知识点很多&#xff0c;在算法刷题中需要有想象力的数据结构了。主要是用链表存储&#xff0c;没有数组更容易理解。在刷二叉树相关算法时&#xff0c;需要注意以下几点&#xff1a; 掌握二叉树的基本概念&#xff1a;了解二叉树的基本概念&#xff0c;包括二叉树的定义…

数据库(mysql)-新手笔记-基本知识点(1)

基本概念 数据库 Database :存储数据的容器 表 Table : 在数据库中存储的基本结构,它由行和列组成 行 Row : 表中的一条记录 列 Column : 表中的字段,定义了数据的类型和约束 数据类型 数据值 如 INT(整型),FLAOT(浮点型) ,DECIMAL (精确小数点) 字符串 如 VARCHAR(可变长度字…

[JavaWeb学习日记]JSP+Cookie+Filter与登录+CRUD案例

目录 一.JSP 二.EL表达式与JSTL标签 三.Cookie 四.Session 五.Filter 六. 登录CRUD:品牌增删改查案例 Demo一览 1.导包 2.构建包结构 3.创建数据库表tb_brand与user 4.创建实体类 5.mybatis的配置文件和logback配置文件 6.写接口 7.工具类&#xff1a;生成图片与…

信息抽取技术:电商领域的智能化革命与市场策略优化

一、引言 在当今快速发展的互联网电商领域&#xff0c;信息抽取技术的应用已经成为商家优化供应链、降低成本、提高响应速度的关键手段。随着消费者需求的日益多样化和个性化&#xff0c;电子商务平台需要更高效、智能的数据处理能力来应对市场的挑战。从供应商管理到库存优化…

Image Fusion via Vision-Language Model【文献阅读】

阅读目录 文献阅读AbstractIntroduction3. Method3.1. Problem Overview3.2. Fusion via Vision-Language Model 4. Vision-Language Fusion Datasets5. Experiment5.1Infrared and Visible Image Fusion 6. Conclusion个人总结 文献阅读 原文下载&#xff1a;https://arxiv.or…

HTML入门:简单了解 HTML 和浏览器

你好&#xff0c;我是云桃桃。今天来简单了解一下 HTML 以及浏览器。 HTML 是什么&#xff1f; HTML&#xff08;全称&#xff1a;Hypertext Markup Language&#xff09;是一种标记语言&#xff0c;用于创建和呈现网页的结构和内容。 它由一系列标签&#xff08;或称为元素…

android开发视频教程百度网盘,深入浅出Android

基于Linux的pc启动过程 我们都知道&#xff0c;所有的程序软件包括操作系统都是运行在内存中的&#xff0c;然而我们的操作系统一般是存放在硬盘上的&#xff0c;当我们按下开机键的时候&#xff0c;此时内存中什么程序也没有&#xff0c;因此需要借助某种方式&#xff0c;将操…

圆形动画 小球在轨道上循环运动 点击按钮停止开始 在次点击 动画开始

圆形动画 小球在轨道上循环运动 点击按钮停止开始 在次点击 动画开始

Vue-04

Vue 指令 指令补充 指令修饰符&#xff1a;通过"."指明一些指令后缀&#xff0c;不同后缀封装了不同的处理操作 → 简化代码 按键修饰符 keyup.enter → 键盘回车监听 在input中使用keyup.enter&#xff0c;这个时候按enter键也能实现添加&#xff0c;和点击按钮实…

目前最新的集运行业发展及运营模式介绍

集运系统紧跟时代发展潮流&#xff0c;提供“集运系统代购商城”&#xff0c;通过系统掌握C端用户数据&#xff0c;发展代购、电商业务。 跨境电商物流市场蓬勃发展&#xff0c;拥有十万亿量级的增长空间&#xff0c;跨境电商市场规模及进出口总额都呈上升趋势&#xff0c;而未…

CAN总线的拓扑类型和CAN收发器(原理讲解)

1&#xff1a;CAN收发器&#xff08;原理讲解&#xff09; 从原理上来讲CAN_H拉升电压&#xff0c;或CAN_L拉低电压的原理。 以上是TJA1145AT的俯瞰图&#xff0c;此芯片是NXP比较先进的CAN收发器&#xff0c;带SPI总线系统。 回到正题&#xff0c;CAN_H和CAN_L收发器是通过内…

c++|内存管理

c|内存管理 C/C内存分布strlen 和 sizeof的区别 c语言动态内存管理方式malloccallocrealloc例题 c管理方式new/delete操作内置类型new/delete操作自定义类型证明 new 和 delete 的底层原理operator new与operator delete函数operator new 和 operator delete的 用法构造函数里面…

【unity实战】3D水系统,游泳,潜水,钓鱼功能实现

文章目录 素材将项目升级为URP画一个水潭地形材质升级为URP创建水调节水第一人称人物移动控制游泳水面停留添加水下后处理水下呼吸钓鱼参考完结 素材 https://assetstore.unity.com/packages/vfx/shaders/urp-stylized-water-shader-proto-series-187485 将项目升级为URP 这…

使用KVM服务创建虚拟机(简化版)

1. 规划节点 KVM服务虚拟机节点规划&#xff0c;见表。 IP主机名节点192.168.100.10localhostKVM 2. 基础准备 使用VMWare Workstation软件安装CentOS 7.2操作系统&#xff0c;镜像使用提供的 CentOS-7-x86_64-DVD-1511.iso&#xff0c;关闭防火墙并且配置SELinux规则&…