派遣函数 - 通过设备链接打开设备
利用文件IO相关的Wn32API对设备进行“打开”和“关闭”操作。要打开设备,必须通过设备的名字才能得到该设备的柄。前面介绍过,每个设备都有设备名称,如HelloDDK驱动程序的设备名为“Device\\MyDDKDevice”,但是设备名无法被用户模式下的应用程序查询到,设备名只能被内核模式下的程序査询到。
在应用程序中,设备可以通过符号链接进行访问。驱动程序通过loCreateSymbolicLink函数创建符号链接。HelloDDK驱动程序的设备所对应的符号链接是“\??\HelloDDK"。在编写程序时,符号链接的写法需要稍微改一下,将前面的“\??\”改为“\\.\”。因此符号链接“\??\HelloDDK”就变成了“\\.\HelloDDK”,写成C语言的字符串就是“\\\\.\\HelloDDK"。
下面的代码演示了如何利用 CreateFile 来打开设备句柄,以及如何利用 CloseHandle
关闭设备句柄。在打开和关闭设备句柄的时候,操作系统内部会创建IRP,并将IRP发送相应的派遣函数中。
#include <windows.h>
#include <stdio.h>int main()
{// 打开设备句柄,会触发IRP_MJ_CREATEHANDLE hDevice =CreateFile(L"\\\\.\\HelloDDK", GENERIC_READ | GENERIC_WRITE,0, // 非共享NULL, //没有使用安全描述符OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // 没有模板if (hDevice == INVALID_HANDLE_VALUE){printf("Failed to obtain fiel handle to deive:%s with win32 error code: %d\n","MYWDMDevice", GetLastError());return 1;}CloseHandle(hDevice);return 0;
}
相关文章:
派遣函数 - 通过设备链接打开设备
利用文件IO相关的Wn32API对设备进行“打开”和“关闭”操作。要打开设备,必须通过设备的名字才能得到该设备的柄。前面介绍过,每个设备都有设备名称,如HelloDDK驱动程序的设备名为“Device\\MyDDKDevice”,但是设备名无法被用户模…...
Vue 2 中的 `$set` 方法详解
在 Vue 2 中,响应式数据的更新非常重要,因为它确保了当数据改变时,视图能够自动更新。Vue 使用一套高效的机制来追踪依赖并在数据变化时更新视图。然而,在某些情况下,直接修改对象的属性可能不会触发视图更新。这时&am…...
掌握Hive函数[2]:从基础到高级应用
目录 高级聚合函数 多进一出 1. 普通聚合 count/sum... 2. collect_list 收集并形成list集合,结果不去重 3. collect_set 收集并形成set集合,结果去重 案例演示 1. 每个月的入职人数以及姓名 炸裂函数 概述 案例演示 1. 数据准备 1)表…...
水壶问题记录
https://leetcode.cn/problems/water-and-jug-problem/description/?envTypestudy-plan-v2&envId2024-spring-sprint-100...
spring综合性利用工具-SpringBootVul-GUI(五)
项目地址 https://github.com/wh1t3zer/SpringBootVul-GUI 0x01简介 本着简单到极致的原则,开发了这么一款半自动化工具(PS:这个工具所包含了20个漏洞,开发不易,有任何问题可提issue) 尽管是一个为懒人量…...
2024年9月12日(k8s环境及测试 常用命令)
一、环境准备及测试 1、报错处理: kube-system calico-node-5wvln 0/1 Init:0/3 0 16h kube-system calico-node-d7xfb 0/1 Init:0/3 0 16h ku…...
卫生间漏水原因很多,切莫病急乱投医
有位业主说他家卫生间背面的墙湿了,邻居家正好在装修,把家具拆掉以后发现墙面上有一片已经湿了。 和业主相约去现场看看,去楼下业主家看了看,顶面是干燥的,这就说明不往楼下漏水。 这就奇怪了&#…...
IEEE 802.11a OFDM系统的仿真(续)
(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第九章内容,有兴趣的读者请阅读原书) clear all %%%%%%%参数设计部分%%%%%%%Nsp52;%系统子载波数(不包括直流载波) Nfft64;%FFT长度 Ncp16;…...
Linux cut命令详解使用:掌握高效文本切割
cut 是 Linux 中一个用于从文本文件或标准输入中提取指定字段的命令。它根据分隔符或者字符位置来裁剪文本,是处理文本文件中的字段、列和子字符串的常用工具。 基本语法 cut [选项] 文件或 命令 | cut [选项]常用选项 -b:按字节位置切割(…...
c++11新特性——endable_shared_from_this
文章目录 一.解决场景代码示例原因 二.解决办法代码 三.底层原理 一.解决场景 一个share_ptr管理的类,如果从类的函数里返回类对象(this指针),导致share_ptr引用计数错误,析构时异常问题 代码示例 #include <mem…...
小程序的右侧抽屉开关动画手写效果
<template><view><button click"openDrawer">打开抽屉</button><view v-if"showDrawer" class"drawer" :style"{ backgroundColor: bgColor }" click"closeDrawer"><view class"draw…...
vue3中el-table中点击图片放大时,被表格覆盖
问题:vue3中el-table中点击图片放大时,被表格覆盖。 解决方法:el-image 添加preview-teleported <el-table-column label"封面图" prop"coverUrl"><template #default"scope"><el-imagestyle&q…...
GO学习笔记(4) strconv/time
目录 strconv包1、string与bool之间的转换2、string与int之间的转换 time包1、常用常量定义2、Now()获取当前年月日时分秒3、Format()时间格式化4、Parse()/ ParseInLocation()解析时…...
课程管理系统-数据库-基于MySQL的数据库课程设计
目录 前言一、需求分析二、设计数据库模型1.实体关系图(ERD)2.表结构设计三、创建数据库和表四、插入数据五、查询数据六、更新和维护七、安全性与性能优化总结前言 设计一个数据库课程(或任何课程管理系统)时,我们首先需要明确系统的需求和目标。以下是一个基于MySQL的数…...
降维打击 华为赢麻了
文|琥珀食酒社 作者 | 积溪 真是赢麻了 华为估计都懵了 这辈子还能打这么富裕的仗? 其实在苹果和华为的发布会召开之前 我就知道华为肯定会赢 但我没想到 苹果会这么拉胯 华为这是妥妥的降维打击啊 就说这苹果iPhone 16吧 屏幕是变大了、颜色…...
[数据集][目标检测]汽车头部尾部检测数据集VOC+YOLO格式5319张3类别
数据集制作单位:未来自主研究中心(FIRC) 版权单位:未来自主研究中心(FIRC) 版权声明:数据集仅仅供个人使用,不得在未授权情况下挂淘宝、咸鱼等交易网站公开售卖,由此引发的法律责任需自行承担 数据集格式:Pascal VOC格…...
python 生成的代码,需要帮我生成一个直接在一台没有依赖的电脑上运行的 包
要创建一个可以在没有依赖的电脑上运行的包,你需要将你的代码和所有依赖项打包成一个可执行文件。对于Python项目,这通常意味着使用一些工具来打包你的代码和所有必要的库。以下是一些常用的工具和步骤: 确定依赖:首先,…...
【Linux】操作系统与进程
🦄个人主页:修修修也 🎏所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 📌操作系统 🎏操作系统的概念 🎏设计操作系统的目的 🎏操作系统对进程的管理 🕹️操作系统为什么…...
【Linux】 LTG:移动硬盘部署Ubuntu24.04
Ubuntu To Go 是一种便携式的 Ubuntu 操作系统解决方案,允许用户将 Ubuntu 系统安装在 USB 驱动器或其他可移动存储设备上。这样,用户可以在任何支持 USB 启动的计算机上运行 Ubuntu,而无需在本地硬盘上进行安装。 准备工作 移动硬盘&#x…...
Android的logcat日志详解
Android log系统 logcat介绍 logcat是android中的一个命令行工具,可以用于得到程序的log信息。下面介绍 adb logcat中的详细参数命令以及如何才能高效的打印日志,或把日志保存到我们指定的位置。 可以输入 adb logcat --help,查看一下一些简…...
Spring AI + DeepSeek 实战:5分钟搞定一个能听懂人话的数据库查询工具
Spring AI DeepSeek 实战:5分钟搞定一个能听懂人话的数据库查询工具 在数据驱动的时代,数据库查询是每个开发者绕不开的日常任务。但当你面对产品经理频繁变更的需求,或是运营同事临时提出的数据提取请求时,反复编写和调试SQL语句…...
WikiJS全文搜索实战:用ElasticSearch+IK分词器提升内容检索效率(Docker版)
WikiJS全文搜索实战:ElasticSearch与IK分词器的深度优化指南 引言:为什么需要专业级全文搜索解决方案? 想象一下,当你面对一个包含数千篇技术文档的Wiki系统时,传统的关键词匹配就像在黑暗房间里寻找一根针。WikiJS自带…...
丹青识画系统Prompt工程指南:如何用文本描述引导更精准的风格鉴定
丹青识画系统Prompt工程指南:如何用文本描述引导更精准的风格鉴定 丹青识画这类AI系统,很多人以为它就是个“看图说话”的工具,把图片丢进去,它告诉你这是什么风格、哪个流派。这确实没错,但如果你只这么用࿰…...
OpenClaw成本优化方案:自建Qwen3-VL:30B替代高价多模态API
OpenClaw成本优化方案:自建Qwen3-VL:30B替代高价多模态API 1. 为什么需要关注OpenClaw的成本问题 第一次用OpenClaw完成多模态任务时,我被账单吓了一跳。当时需要处理200张产品图片的分类和描述生成,调用某商业多模态API后,费用…...
CSSCI论文写作03:确定论文的选题
什么是选题 选题:选择一个适合的研究指向!!! 选择: 而不是创造,创新是内在要求 你要坚信:所有的选题都有前人关注过研究过,我们不求“栽树”,只求“乘凉”,填补什么空白,只能说明自己的浅薄无知。 适合: 个人经验的学术表达,找到那双穿在自己脚上的鞋子没有不能…...
从随机采样到精准决策:蒙特卡罗方法在复杂系统建模中的实践
1. 蒙特卡罗方法:用随机性破解复杂世界的密码 想象你是一位古代数学家,手里只有一把沙子和一块画着方格的石板。现在要计算一个不规则形状的湖泊面积,你会怎么做?最原始的方法可能是把沙子均匀撒在石板上,然后数出落在…...
别再一条条Update了!MyBatis批量更新数据,用这个Case When写法性能翻倍
MyBatis批量更新性能优化实战:告别低效循环,拥抱CASE WHEN 每次看到代码里用循环一条条执行update语句,我的数据库性能监控图表就会剧烈波动——这简直是DBA的噩梦。上周排查一个后台任务卡死问题,发现同事在处理5万条数据更新时&…...
RK3588开发板跑YOLOv5视频流demo,遇到Segmentation fault别慌!保姆级core文件生成与调试指南
RK3588开发板YOLOv5视频流推理崩溃排查:从Segmentation fault到精准调试全攻略 当你在RK3588开发板上满心期待地运行YOLOv5视频流推理demo时,屏幕上突然闪现的"Segmentation fault (core dumped)"就像一盆冷水浇灭了热情。这种崩溃提示信息量极…...
嵌入式开发工具选择与效率提升实践
1. 嵌入式开发者的工作状态与开发工具选择1.1 程序员工作场景分析嵌入式开发者在家庭办公环境中往往表现出独特的工作状态。通过观察典型的工作场景,我们可以总结出几个关键特征:专注度提升:家庭环境减少了办公室干扰,开发者更容易…...
从拼图游戏到自动驾驶:点云配准技术的跨领域进化史
从拼图游戏到自动驾驶:点云配准技术的跨领域进化史 1. 三维世界的数字拼图师 1987年,当Paul Besl和Neil McKay在实验室里尝试将两组扫描数据对齐时,他们可能不会想到,这项被称为迭代最近点(ICP)的技术会成为…...
