he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2162回复:6

怎样由pDeviceObject(设备对象)获得DriveNumber(驱动器号)?

楼主#
更多 发布于:2003-09-29 17:30
怎样由pDeviceObject(设备对象)获得DriveNumber(驱动器号)?

已知:设备对象(如:光驱)指针,但我想知道其对应的盘符(如:G盘),该怎么实现?好不容易找到一个IOCTL_DISK_GET_DRIVE_LETTERS,结果提示为:“None. This IOCTL is obsolete.”,过期的,不能用,DDK中连IOCTL_DISK_GET_DRIVE_LETTERS的定义也没有,。。。

真不知该怎么办?

要是在VXD中,就有DCB与DriveNumber互相取得的接口

最新喜欢:

aasa2aasa2
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-30 09:13
神啦,救救我吧
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
caosuricheng
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2004-09-04
  • 粉丝0
  • 关注0
  • 积分-10分
  • 威望-1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-06 15:24
呵呵,呃
我是草肃日成 有人认识我吗?
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地板#
发布于:2003-10-07 06:33
ObQueryNameString to get the device object name.

RtlVolumeDeviceToDosName (w2k) or
 IoVolumeDeviceToDosName (XP and later) to get the drive letter.
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-14 10:27
不好意思,再问一下,在WinNT4.0下应该怎样获得?
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
5楼#
发布于:2003-10-14 23:03
不好意思,好象没办法 !

不好意思,快放分啊 !!
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
游客

返回顶部