阅读:2163回复:6
怎样由pDeviceObject(设备对象)获得DriveNumber(驱动器号)?
怎样由pDeviceObject(设备对象)获得DriveNumber(驱动器号)?
已知:设备对象(如:光驱)指针,但我想知道其对应的盘符(如:G盘),该怎么实现?好不容易找到一个IOCTL_DISK_GET_DRIVE_LETTERS,结果提示为:“None. This IOCTL is obsolete.”,过期的,不能用,DDK中连IOCTL_DISK_GET_DRIVE_LETTERS的定义也没有,。。。 真不知该怎么办? 要是在VXD中,就有DCB与DriveNumber互相取得的接口 |
|
最新喜欢:![]()
|
沙发#
发布于:2003-09-30 09:13
神啦,救救我吧
|
|
|
板凳#
发布于:2003-10-06 15:24
呵呵,呃
|
|
|
地板#
发布于:2003-10-07 06:33
ObQueryNameString to get the device object name.
RtlVolumeDeviceToDosName (w2k) or IoVolumeDeviceToDosName (XP and later) to get the drive letter. |
|
地下室#
发布于:2003-10-14 10:27
不好意思,再问一下,在WinNT4.0下应该怎样获得?
|
|
|
5楼#
发布于:2003-10-14 23:03
不好意思,好象没办法 !
不好意思,快放分啊 !! |
|
6楼#
发布于:2003-10-17 13:15
那,有没有办法由DeviceName(如:\\Device\\Cdrom0)获得DriveLetter(如,I: )?
我看DDK中有一个demo介绍,说能过Query注册表中的“\\\\Registry\\\\Machine\\\\System\\\\DISK”得到,不过,我试了,没有成功,总返回错误码STATUS_OBJECT_NAME_NOT_FOUND(0xC0000034),不知是不是哪里搞错了, RTL_QUERY_REGISTRY_TABLE pQueryTable[2]; PWSTR pValueName = L\"\\\\Device\\\\CdRom0\"; UNICODE_STRING DriveLetter; NTSTATUS ntStatus; DriveLetter.MaximumLength = 20; DriveLetter.Buffer = (PWSTR)ExAllocatePool(PagedPool, DriveLetter.MaximumLength + sizeof(WCHAR)); if(NULL == DriveLetter.Buffer) return STATUS_INSUFFICIENT_RESOURCES; RtlZeroMemory(pQueryTable, 2*sizeof(RTL_QUERY_REGISTRY_TABLE)); pQueryTable[0].Flags = RTL_QUERY_REGISTRY_REQUIRED | RTL_QUERY_REGISTRY_DIRECT; pQueryTable[0].Name = pValueName; pQueryTable[0].EntryContext = &DriveLetter; ntStatus = RtlQueryRegistryValues( RTL_REGISTRY_ABSOLUTE, L\"\\\\Registry\\\\Machine\\\\System\\\\DISK\", pQueryTable, NULL, NULL ); [编辑 - 10/17/03 by he_x_p] |
|
|