
实战DeviceIoControl
fjb2080
这个作者很懒,什么都没留下…
展开
-
实战DeviceIoControl 之一:通过API访问设备驱动程序
<br /> <br />实战DeviceIoControl 共7篇,这是我在两年前看到的文章,很不错,现在想把它转载过来。<br />原作者和其博客的地址是:http://blog.youkuaiyun.com/bhw98<br />他博客里的这些序列文章的格式更好看,如果你觉得这些文章好,不妨去他的博客看,格式比我的随便粘贴好多了 :)<br /> <br /> <br />Q 在NT/2000/XP中,我想用VC编写应用程序访问硬件设备,如获取磁盘参数、读写绝对扇区数据、测试光驱实际速度等,该从哪里入手呢?<br转载 2010-07-20 21:56:00 · 1596 阅读 · 0 评论 -
实战DeviceIoControl 之七:在Windows 9X中读写磁盘扇区
<br /><br />实战DeviceIoControl 共7篇,这是我在两年前看到的文章,很不错,现在想把它转载过来。<br />原作者和其博客的地址是:http://blog.youkuaiyun.com/bhw98<br />他博客里的这些序列文章的格式更好看,如果你觉得这些文章好,不妨去他的博客看,格式比我的随便粘贴好多了 :)<br /> <br />在Windows NT/2K/XP中,直接用CreateFile打开名称类似于"//./A:"的”文件”,就可以与设备驱动打交道,通过ReadFile/Wri转载 2010-07-20 22:06:00 · 1580 阅读 · 0 评论 -
实战DeviceIoControl 之二:获取软盘/硬盘/光盘的参数
<br /> <br />Q 在MSDN的那个demo中,将设备名换成“A:”取A盘参数,先用资源管理器读一下盘,再运行这个程序可以成功,但换一张盘后就失败;换成“CDROM0”取CDROM参数,无论如何都不行。这个问题如何解决呢?<br />A 取软盘参数是从软盘上读取格式化后的信息,也就是必须执行读操作,这一点与硬盘不同。将CreateFile中的访问方式改为GENERIC_READ就行了。<br />IOCTL_DISK_GET_DRIVE_GEOMETRY这个I/O控制码,对软盘和硬盘有效,但对一些转载 2010-07-20 21:59:00 · 1394 阅读 · 0 评论 -
实战DeviceIoControl 之五:列举已安装的存储设备
<br /><br />Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了。如果事先并不能确切知道设备名,如何去访问设备呢?<br />A 访问设备必须用设备句柄,而得到设备句柄必须知道设备路径,这个套路以你我之力是改变不了的。每个设备都有它所属类型的GUID,我们顺着这个GUID就能获得设备路径。<br />GUID是同类或同种设备的全球唯一识别码,它是一个128 bit(16字节)的整形数,真实面目为typedefst转载 2010-07-20 22:04:00 · 1809 阅读 · 0 评论 -
实战DeviceIoControl 之四:获取硬盘的详细信息
<br /> <br />Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY或IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有什么办法呀?<br />A 确实,用你所说的I/O控制码,只能得到最基本的磁盘参数。获取磁盘出厂信息的I/O控制码,微软在VC/MFC环境中没有开放,在DDK中可以发现一些线索。早先,Lynn McGuire写了一个很出名的获取IDE硬盘详细信息的程序DiskID32,下面的例子是在其转载 2010-07-20 22:02:00 · 2594 阅读 · 0 评论 -
实战DeviceIoControl 之三:制作磁盘镜像文件
Q DOS命令DISKCOPY给我很深的印象,现在也有许多“克隆”软件,可以对磁盘进行全盘复制。我想,要制作磁盘镜像文件,DeviceIoControl应该很有用武之地吧?A 是的。这里举一个制作软盘镜像文件,功能类似于“DISKCOPY”的例子。本例实现其功能的核心代码如下:// 打开磁盘HANDLE OpenDisk(LPCTSTR filename){ HANDLE hDisk; // 打开设备 hDisk = ::CreateFile(fil转载 2010-07-20 22:00:00 · 1278 阅读 · 0 评论 -
实战DeviceIoControl 之六:访问物理端口
<br /><br />Q 在NT/2000/XP中,如何读取CMOS数据?<br />Q 在NT/2000/XP中,如何控制speaker发声?<br />Q 在NT/2000/XP中,如何直接访问物理端口?<br />A 看似小小问题,难倒多少好汉!<br />NT/2000/XP从安全性、可靠性、稳定性上考虑,应用程序和操作系统是分开的,操作系统代码运行在核心态,有权访问系统数据和硬件,能执行特权指令;应用程序运行在用户态,能够使用的接口和访问系统数据的权限都受到严格限制。当用户程序调用系统服务时,处转载 2010-07-20 22:05:00 · 1338 阅读 · 0 评论