通过设备符号连接打开设备 句柄得到设备名_ZwOpenSymbolicLinkObject_ZwQuerySymbolicLinkObject
2017-07-05 16:00
741 查看
#pragma PAGEDCODE NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj,IN PIRP pIrp) { KdPrint(("DriverB:Enter B HelloDDKRead\n")); NTSTATUS ntStatus = STATUS_SUCCESS; UNICODE_STRING DeviceSymbolicLinkName; RtlInitUnicodeString( &DeviceSymbolicLinkName, L"\\??\\HelloDDKA" ); //初始化objectAttributes OBJECT_ATTRIBUTES objectAttributes; InitializeObjectAttributes(&objectAttributes, &DeviceSymbolicLinkName,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE, NULL, NULL ); HANDLE hSymbolic; //设定了FILE_SYNCHRONOUS_IO_NONALERT或者FILE_SYNCHRONOUS_IO_ALERT为同步打开设备 ntStatus = ZwOpenSymbolicLinkObject(&hSymbolic,FILE_ALL_ACCESS,&objectAttributes); #define UNICODE_SIZE 50 UNICODE_STRING LinkTarget; LinkTarget.Buffer = (PWSTR)ExAllocatePool(PagedPool,UNICODE_SIZE); LinkTarget.Length = 0; LinkTarget.MaximumLength = UNICODE_SIZE; ULONG unicode_length; ntStatus = ZwQuerySymbolicLinkObject(hSymbolic,&LinkTarget,&unicode_length); KdPrint(("DriverB:The device name is %wZ\n",&LinkTarget));//得到符号连接名 InitializeObjectAttributes(&objectAttributes, &LinkTarget,OBJ_CASE_INSENSITIVE, NULL, NULL ); HANDLE hDevice; IO_STATUS_BLOCK status_block; //设定了FILE_SYNCHRONOUS_IO_NONALERT或者FILE_SYNCHRONOUS_IO_ALERT为同步打开设备 ntStatus = ZwCreateFile(&hDevice,FILE_READ_ATTRIBUTES|SYNCHRONIZE,&objectAttributes,&status_block,NULL,FILE_ATTRIBUTE_NORMAL,FILE_SHARE_READ,FILE_OPEN_IF,FILE_SYNCHRONOUS_IO_NONALERT,NULL,0); if (NT_SUCCESS(ntStatus)) { ZwReadFile(hDevice,NULL,NULL,NULL,&status_block,NULL,0,NULL,NULL); } ZwClose(hDevice); ZwClose(hSymbolic); ExFreePool(LinkTarget.Buffer); ntStatus = STATUS_SUCCESS; // 完成IRP pIrp->IoStatus.Status = ntStatus; pIrp->IoStatus.Information = 0; // bytes xfered IoCompleteRequest( pIrp, IO_NO_INCREMENT ); KdPrint(("DriverB:Leave B HelloDDKRead\n")); return ntStatus; }
相关文章推荐
- 小实验:用创建进程()打开计算器,然后关闭进程句柄。再用打开进程(进程ID),使用两次,得到两个进程句柄。实验目的:这两个进程句柄都能控制这个进程吗?通过该试验加深对句柄的理解!!
- ZwQuerySymbolicLinkObject routine
- 驱动开发之 驱动设备名称,符号连接名,以及应用程序打开设备
- ZwOpenSymbolicLinkObject routine
- centos 创建软连接后,打开软连接文件,报错:Too many levels of symbolic link
- IoCreateSymbolicLink函数的作用以及符号链接、设备名称之间的关系
- ObReferenceObjectByName通过对象名得到对象指针_例如 设备 事件 互斥体
- VC6.0 USB接口开发#include hidsdi.h,编译通过后,连接出错:LINK : fatal error LNK1104: cannot open file "hidsdi.lib"
- 通过网卡连接android设备
- 通过注册表的句柄得到当前句柄在注册表中的路径
- 驱动中通过设备链接名取得磁盘符号的方法
- 根据符号名 得到设备名
- VC怎么通过进程ID得到窗口句柄
- vs2005 通过网线连接到 Windows CE 设备
- 远程打开远程桌面连接选项(XP/2003测试通过)
- 网络设备通过win7的虚拟wifi连接internet
- 当有多个设备online时,命令行窗口通过adb连接指定设备方法
- [WinCE]通过网卡连接调试WinCE设备
- 当有多个设备online时,命令行窗口通过adb连接指定设备方法
- 通过设备链接打开设备