我是靠谱客的博主 明亮金鱼,最近开发中收集的这篇文章主要介绍驱动开发之 驱动设备名称,符号连接名,以及应用程序打开设备,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

驱动设备名:

驱动设备名是调用IoCreateDevice时设定的
NTSTATUS IoCreateDevice(
  _In_      PDRIVER_OBJECT DriverObject,
  _In_      ULONG DeviceExtensionSize,
  _In_opt_  PUNICODE_STRING DeviceName,
  _In_      DEVICE_TYPE DeviceType,
  _In_      ULONG DeviceCharacteristics,
  _In_      BOOLEAN Exclusive,
  _Out_     PDEVICE_OBJECT *DeviceObject
);
  _In_opt_  PUNICODE_STRING DeviceName是设备名。此函数可以是null,表示不为设备命名。若要为设备命名,首先应该创建一个UNICODE_STRING结构来存放对象名,然后把该串作为调用IoCreateDevice的参数。通常把对象名放在名称空间Device分支中。
UNICODE_STRING devname;
RtlInitUnicodeString(&devname, L"\Device\MyDDKDevice");
IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), &devname, ...);

设备的名称有两个用途。第一个用途,设备命名后,其它内核模式部件可以通过调用IoGetDeviceObjectPointer函数找到该设备,找到设备对象后,就可以向该设备的驱动程序发送IRP。另一个用途,允许应用程序打开命名设备的句柄,这样它们就可以向驱动程序发送IRP。应用程序可以使用标准的CreateFile API打开命名设备句柄,然后用ReadFile、WriteFile,和DeviceIoControl向驱动程序发出请求。应用程序打开设备句柄时使用\.路径前缀而不是标准的UNC(统一命名约定)名称,如C:MYFILE.CPP或\FREDC-DriveHISFILE.CPP。在内部,I/O管理器在执行名称搜索前自动把\.转换成??。为了把??目录中的名字与名字在其它目录(例如,在Device目录)中的对象相连接,对象管理器实现了一种称为符号连接(symbolic link)的对象。


符号链接名:
可以为设备创建符号链接,相当于别名,有点像快捷方式。
创建符号链接方法:
UNICODE_STRING symLinkName;
RtlInitUnicodeString(&symLinkName,L"\??\TestSymbolLink");
status = IoCreateSymbolicLink( &symLinkName,&devName );

可以借助工具WINOBJ查看


应用程序通过CreateFile打开设备:

HANDLE hDevice = 
CreateFile("\\.\TestSymbolLink",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE|FILE_SHARE_READ,// share mode
NULL, // no security
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL ); // no template

应用程序打开的路径是\\.\TestSymbolLink。

最后

以上就是明亮金鱼为你收集整理的驱动开发之 驱动设备名称,符号连接名,以及应用程序打开设备的全部内容,希望文章能够帮你解决驱动开发之 驱动设备名称,符号连接名,以及应用程序打开设备所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部