• 您的位置我爱Aspx >> VC.Net >> 实战DeviceIoControl 之二:获取软盘/硬盘/光盘的参数
  • 实战DeviceIoControl 之二:获取软盘/硬盘/光盘的参数

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:49:39  关键字:
  • Q 在MSDN的那个demo中,将设备名换成“A:”取A盘参数,先用资源管理器读一下盘,再运行这个程序可以成功,但换一张盘后就失败;换成“CDROM0”取CDROM参数,无论如何都不行。这个问题如何解决呢?

    A 取软盘参数是从软盘上读取格式化后的信息,也就是必须执行读操作,这一点与硬盘不同。将CreateFile中的访问方式改为GENERIC_READ就行了。

    IOCTL_DISK_GET_DRIVE_GEOMETRY这个I/O控制码,对软盘和硬盘有效,但对一些可移动媒介如CD/DVD-ROM、TAPE等就不管用了。要取CDROM参数,还得另辟蹊径。IOCTL_STORAGE_GET_MEDIA_TYPES_EX能够帮我们解决问题。

    Q 使用这些I/O控制码,需要什么样的输入输出数据格式呢?

    A DeviceIoControl使用这两个控制码时,都不需要输入数据。

    IOCTL_DISK_GET_DRIVE_GEOMETRY直接输出一个DISK_GEOMETRY结构: typedef struct _DISK_GEOMETRY { LARGE_INTEGER Cylinders; // 柱面数 MEDIA_TYPE MediaType; // 介质类型 DWORD TracksPerCylinder; // 每柱面的磁道数 DWORD SectorsPerTrack; // 每磁道的扇区数 DWORD BytesPerSector; // 每扇区的字节数 } DISK_GEOMETRY;

    IOCTL_STORAGE_GET_MEDIA_TYPES_EX输出一个GET_MEDIA_TYPES结构: typedef struct _GET_MEDIA_TYPES { DWORD DeviceType; // 设备类型 DWORD MediaInfoCount; // 介质信息条数 DEVICE_MEDIA_INFO MediaInfo[1]; // 介质信息 } GET_MEDIA_TYPES;

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:关联自己的应用程序到右键菜单中
    下一篇:非议MFC(三)库代码的质量问题
  • 相关文章