我爱Aspx >> VC.Net >> 实战DeviceIoControl 之二:获取软盘/硬盘/光盘的参数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;
非议MFC(三)库代码的质量问题[05-21]
从WEB服务器下载文件的简单方法。[05-21]
非议MFC(二)逻辑上的不完备[05-21]
实战DeviceIoControl 之一:通过..[05-21]
Windows中文输入法的实现[05-21]
用Delphi 6开发ASP上传组件详解[05-21]
”新快乐时光“再解[05-21]
Notes中有关C++API的注意事项[05-21]
Domino SMTP设置[05-21]
游戏修改器[05-21]