基于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 另外一半…

test-mapper/service

1 package com.xxx.common.mapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xxx.common.entity.Collect; import com.baomidou.mybatisplus.core.mapper.BaseMapper;import java.util.List;/*** <p>* Mapper 接口* </p>…

工业网关、物联网网关与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…

zabbix 监控 MogDB/openGauss 之 采集 prometheus 数据

zabbix 监控 MogDB/openGauss 之 采集 prometheus 数据 前言 市场上比较的监控方式有两种&#xff1a;zabbix 和 prometheus 架构&#xff0c;对于 MogDB/openGauss 数据库来说&#xff0c;已经通过grafana prometheus opengauss_exporter的方式完成了监控部署&#xff0c;…

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(可变长度字…

记录linux C/C++ 宏定义 __FILE__、__LINE__、__FUNCTION__、__DATE__、__TIME__

1.1 __FILE__ 作用&#xff1a;表示当前源文件名&#xff0c;类型为字符串常量&#xff1b; #include <stdio.h> int main() { printf("%s\n", __FILE__); return 0; } 输出为&#xff1a; # ./test test.c 1.2 __LINE__ 作用&#xff1a;代表当前…

Hyperf代码目录规划尝试

app--|- Common 统一封装非业务|- Constants|- Controller|- Exception|- Kernel 统一封装业务|- Listener|- Model|- Process|- Request|- Service|- Task|- Util 工具 Helper和Util Util类&#xff0c;一般是无状态的&#xff0c;只包含静态方法。使用时无需创建类的实例。 …

[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;生成图片与…

leetcode.15三数之和

链接&#xff1a;https://leetcode.cn/problems/3sum 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请返回所有和为 0 且不重复的三元组。…

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

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

[Latex]矩阵的三种关系(等价,相似,合同)的符号

\cong \sim \simeq 对应的Latex实现分别为&#xff1a; ≅ \cong ≅ ∼ \sim ∼ ≃ \simeq ≃

试一试点赞和收藏机制

如果你不是机器人&#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…

B树和B+树的区别是什么?

什么是B树 B树是一种自平衡的多路查找树&#xff0c;主要用于减少磁盘I/O操作&#xff0c;提高数据库的查询效率。 多路查找&#xff1a;B树是一个多路平衡查找树&#xff0c;这意味着它可以拥有多个子节点&#xff0c;从而能够更有效地利用存储空间和减少树的高度。自平衡&a…

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

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