设备名和符号链接名

【Window内核驱动开发】——通过符号链接获取真实设备 【我的】Window驱动开发——通过符号链接获取真实设备 作者:zcr214 时间:2016/5/5   我们想要把驱动绑定到指定的盘符,实际是绑定到它对应的真实设备卷,实际上windows用户看到的C盘D盘只是符号链接名,而真实设备通常是/Device/HarddiskVolume2,/Device/HarddiskVolume3等,符号链接名可以任意更改,但是真实设备卷却是不变的。而实际 阅读详情

以前总是对符号链接不太明白,今天看到了一篇文章,讲的很好,记录一下。

-------------------------------------------------------------------------------------------------

UNICODE_STRING devName;
RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
NTSTATUS status=IoCreateDevice(pDriverObject,
                               sizeof(DEVICE_EXTENSION),
                                &(UNICODE_STRING)devName,
                                FILE_DEVICE_UNKNOWN,
                                0,TRUE,
                                &pDevObj);

UNICODE_STRING symLinkName;
RtlInitUnicodeString(&devName,L"\\??\\HelloDDK");

status = IoCreateSymbolicLink(&symLinkName,&devName);

-------------------------------------------------------------------------------------------------

windows下的设备是以"\Device\[设备名]”形式命名的。例如磁盘分区的c盘,d盘的设备名称就是

"\Device\HarddiskVolume1”,"\Device\HarddiskVolume2”, 当然也可以不指定设备名称。如果

IoCreateDevice中没有指定设备名称,那么I/O管理器会自动分配一个数字作为设备的名称。

例如"\Device\00000001"。

\Device\[设备名],不容易记忆,通常符号链接可以理解为设备的别名,更重要的是设备名,

只能被内核模式下的其他驱动所识别,而别名可以被用户模式下的应用程序识别,例如c盘,

就是名为"c:"的符号链接,其真正的设备对象是"\Device\HarddiskVolume1”,所以在写驱动

时候,一般我们创建符号链接,即使驱动中没有用到,这也算是一个好的习惯吧。

驱动中符号链接名是这样写的

L"\\??\\HelloDDK"--->\??\HelloDDK

L"\\DosDevices\\HelloDDK"--->\DosDevices\HelloDDK

在应用程序中,符号链接名:

L"\\\\.\\HelloDDK"-->\\.\HelloDDK

winobj和DeviceTree可以用来查看这些信息。

如何在 Linux 中查找所有符号链接,这几个命令得会! 在Linux中查找所有符号链接有多种方法,包括使用find命令、ls命令、file命令和readlink命令。find命令是最常用的方法之一,它允许用户查找文件系统中的所有符号链接,并输出路径。ls命令和grep命令的结合使用也可以用来查找符号链接。file命令用于识别文件类型,并可以用来确定文件是否是符号链接。readlink命令用于读取符号链接的值。无论使用哪种方法,用户都可以轻松地查找Linux中。 阅读详情

相关推荐

驱动开发实用工具,驱动加载,链接符号查看工具

NT驱动加载工具DriverMonitor,WDM驱动加载工具EzDriverInstaller,查看符号链接工具SymLinks,无需安装,解压即可以实用。

符号链接&设备名称

以前总是对符号链接不太明白,今天看到了一篇文章,讲的很好,记录一下。 ------------------------------------------------------------------------------------------------- UNICODE_STRING devName; RtlInitUnicodeString(&devName,L"\\Device

xd1103121507的专栏 1624

驱动程序小工具包(deviceTree.exe和WinObj.exe)

驱动程序小工具包(deviceTree.exe和WinObj.exe) 查看系统里的串口名称和并口名称

windows 驱动加载后,但符号链接名看不到原因

windows 驱动加载后,符号链接名看不到原因

qq_24892803的博客 264

什么是PMOS?什么是NMOS?两者有什么区别?

这个电压差被称为阈值电压(Vth),通常为0.7V至2V(低压NMOS)或4V至10V(功率NMOS)。当Vgs(栅极-源极电压)大于Vth时,沟道中的电子被吸引到栅极下方,形成导电通路,使电流可以从漏极流向源极。NMOS与PMOS的结构类似,都由三大部分组成:栅极(Gate)、源极(Source)和漏极(Drain)。由于NMOS在开启时,电子是主要的载流子,电子的迁移率比空穴高,因此NMOS通常具有更低的导通电阻(Rds(on)),这使其成为高速开关电路中的首选。它的沟道由电子(负载子)传导。

硅农深芯的博客 6430

机器学习-02 模型的评估与选择

2.1 误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义: 在训练集上的误差称为训练误差(training error)或经验误差(empirical error)。 在测试集上的误差称为测试误差(test error)。 学习器在所有新样本上的误差称为泛化误差(generalization error)。 显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器尽可能地从训练集中学出普适性的“一般特征”,这

一个小白 1703

驱动开发之符号链接和设备名称

 windows下的设备是以"/Device/[设备名]”形式命名的。 例如磁盘分区的c盘,d盘的设备名称就是"/Device/HarddiskVolume1”,"/Device/HarddiskVolume2”, 当然也可以不指定设备名称。如果IoCreateDevice中没有指定设备名称,那么I/O管理器会自动分配一个数字作为设备的名称。 例如"/Device/00000001"

如山石的系统虚拟化之路 2125

鸿蒙5.0进阶开发:UI开发-不依赖UI组件的全局自定义弹出框 (openCustomDialog)(推荐)

本文介绍通过入参形式为ComponentContent创建自定义弹出框............

AyomQAQ的博客 1849

卷设备名和符号链接的相互转化

#include <ntddk.h> #include <windef.h> #include <ntstrsafe.h> //输入\\??\\c:-->\\device\\\harddiskvolume1 //LinkTarget.Buffer注意要释放 /*把符号链接转换成设备名 可以通过API直接转换*/ NTSTATUS QuerySymbolicLink( IN PUNICODE_STRING SymbolicLinkName, OUT PUN

qq_41490873的博客 788

Oracle19c安装,基本配置教程(超详细)

安装有出错的风险,卸载也是比较麻烦的,所以先提前设置一个还原点,在windows中的步骤如下,如果对自己有信心,可以直接跳过该部分开始安装oracle在设置中进入创建还原点的界面开始创建还原点上面已经成功创建了还原点,如果安装oracle时出现问题,自己也无法解决,恢复到安装之前即可,恢复步骤如下经过上面的步骤,Oracle我们就能够正常使用了,我们就使用自己在sql plus里面创建的账号即可,创建的表会默认存放在我们自己创建的表空间里面。

秃头披风侠的博客 7万+

Gröbner基方法入门第I部分:项序和约化

Gröbner基方法入门第I部分:项序和约化 理想的准素分解与矩阵分解是计算代数的核心问题,它们在计算机代数、计算代数几何、代数编码和密码学、多维系统理论等学科都有非常重要的理论意义与应用价值.Gröbner基理论是研究理想的准素分解与矩阵素分解的重要工具之一.更简单地概括:Gröbner基方法是从任意一个多项式理想的一组给定生成元,计算另一组性质良好的生成元,并称为该理想的Gröbner基.它能用来判定任意多项式是否属于该理想. Gröbner基的代数算法是Buchberger在1960年代开发的,并

MinCong Luo的博客 4256

设备名与链接名互相转化思路

符号链接转设备名可以调用ZwOpenSymbolicLinkObject,ZwQuerySymbolicLinkObject直接查询到设备名 反过来是调用第一种方法,把每个盘符A到Z的符号链接对应的设备名求出来,然后一一比对。 一种实现 DWORD WINAPI MyQueryDosDeviceW( LPCWSTR ...

kernweak的博客 374

瑞芯微RV1126平台人脸识别模型转换实战:从ONNX到RKNN的完整流程

本文详细介绍了在瑞芯微RV1126平台上,将人脸识别模型从ONNX格式转换为RKNN格式的完整实战流程。内容涵盖模型结构分析、RKNN-Toolkit环境搭建、量化数据集准备、核心转换脚本编写与参数解析,以及在设备端的部署测试与性能调优,旨在帮助嵌入式AI开发者高效完成模型转化,提升边缘设备上的人脸识别应用部署效率。

o5p6q的博客 570

通过符号链接名获取设备名称

有时候只知道符号链接名,可是通过比如ZwCreateFile等方式打开设备需要设备名。可以通过以下两个内核函数来获取(该方法在另一篇博客内也有提及): NTSYSAPI NTSTATUS ZwOpenSymbolicLinkObject( PHANDLE LinkHandle, ACCESS_MASK DesiredAccess, // 这个权限至少是GENERIC_READ POBJECT_ATTRIBUTES ObjectAttributes );

輚至消亡 1025

Ubuntu1804 关于ubuntu18.04下载软件仓库信息失败,请检查网络连接 的解决方案

今天电脑在更换软件源的时候遇到了这个问题。出现了如上图所示的错误信息。 尝试了各家优快云的博客之后,发现方法大同小异,均无法解决。 方法大多都是要求更换软件源,如下所示: 打开“Ubuntu软件中心”-->点击“编辑”-->点击“软件源”-->在Ubuntu软件界面,“下载自”默认是“中国的服务器”,改为“主服务器”试试 2.打开更新管理器-》设置-》选择站点-》...

weixin_43729409的博客 1万+

SAP PI 系统复制,不只是把数据库拷过去,而是一次集成拓扑的重新落位

文章摘要:SAP PI/PO系统刷新生产数据到测试环境时,标准系统复制无法自动处理集成中枢特有的环境绑定问题。系统复制后,PI仍保留生产环境的连接配置,可能导致测试系统向生产环境发送消息。SAP提供的CTC模板可自动化部分后续配置,但无法替代人工对接口风险的全面评估。关键在于系统复制前绘制接口风险地图,复制后进行分层次验证:禁用生产连接、重定向测试接口、复核安全配置,并通过代表性链路测试确保系统行为符合预期。这需要结合SAP标准流程与业务语义判断,形成完整的治理闭环。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 82

Windows驱动开发第9课(驱动设备与符号链接)

weixin_42655748的博客 2797

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

windows驱动开发7:应用程序和驱动程序的通信

应用同驱动通信

longkuis的专栏 3096

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

多usb摄像头串口设备名固定和永久授权

目的:设备每次插入不同usb设备,顺序不一样名称可能都不一样,不稳定,无法通过固定设备名获取信息。 1、查看当下摄像头设备名 ll /dev/video* 运行结果,三个摄像头,六个video设备名 crwxrwxrwx+ 1 root video 81, 0 Dec 31 11:17 /dev/video0 crw-rw----+ 1 root video 81, 1 Dec 31 11:17 /dev/video1 crwxrwxrwx+ 1 root video 81, 2 Dec 31 11:17

努力是明天快乐的源泉 7117

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

问一个AddDevice和设备符号链的问题??

问一个AddDevice和设备符号链的问题??UNICODE_STRING ntDeviceName;      UNICODE_STRING win32DeviceName;      RtlInitUnicodeString(&ntDeviceName, L"////Twdm1");     RtlInitUnicodeString(&win32DeviceName, L"////Twdm1"

小发猫 1858

取得磁盘符号的方法

 NTSTATUSGetSymbolicLink( IN PUNICODE_STRING SymbolicLinkName, OUT PUNICODE_STRING LinkTarget)/*++Routine Description: This routine returns the target of the symbolic link name. Arguments:  Symbolic

wxdvc的专栏 901

windows驱动小知识

Driver\kbdclass和\driver\mouseclass是windows中键盘和鼠标驱动的名称。其中,键盘设备对象的符号名:L”\Device\KeyboardClass0”,鼠标设备对象的符号名:L”\Device\PointerClass0”。\Device\serial0是串口设备的名称,\Driver\serial0是串口驱动名称。\.\HarddiskVolume1:应用层设备名,ntdll.dll中的nt层以及以上的层面可以使用。\:符号连接,nt层以及以下的层次可以使用。

要把所有那些负面的信息当做对自身行为的评价,而不是对自身价值的评判。 291

Linux 绑定USB设备端口

1 根据设备ID绑定 方法特点:按照ID绑定的话不需要固定USB接口,它是根据设备自身的ID进行绑定,但是如果有多个设备的串口使用同一款串口芯片的话,会出现紊乱 查看需要绑定的设备的idVendor 和idpProduct,例如我要绑定一个rplidar的激光雷达 $ lsusb 新建一个规则文件: $ sudo gedit /etc/udev/rules.d/com_rplidar.rules 自定义打开文件写入自定义规则。这里最好新建一个文件,不要覆盖以前的文件了。如果是相同设备还需要额外的辨别参

m0_38144614的博客 7651

ubuntu以太网设备节点_解决ubuntu16.04中ttyUSB设备节点不固定问题

这两天在ubuntu中开发跟串口有关程序时,发现来回拔插串口线或者插多个串口线时总是出现串口号ttyUSB*不固定的问题,给应用程序带来不少麻烦,遂找答案解决。linux中设备号一般按先后顺序一次向后增大,udev规则文件可以解决这个问题。udev是一种Linux2.6内核采用的/dev 目录的管理系统(可以把它认为是windows中的设备管理器),它通过从sysfs获得的信息,可以提供对特定设备...

weixin_35318685的博客 309

理解和认识udev

因为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了 /dev/sdb,我希望将设备文件固定下来。    过去,我总是对用户说,这个比较麻烦,因为/dev/sda等文件...

weixin_33898876的博客 85

解密df命令在LUKS加密文件系统中的设备名差异

df命令在显示所有文件系统和指定具体文件时对设备名称的处理方式不同,特别是在涉及LUKS加密设备时。用户可以通过输出后处理、使用findmnt命令或创建自定义脚本来获得一致的设备名称显示。更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

分享技术点滴 456
上一篇: TDI过滤程序框架
下一篇: 创建文件
cosmiccode
博客等级 码龄14年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值