DeviceIoControl Windows底层控制API实战

硬件底层交互的敲门砖就是 DeviceIoControl,Windows API 里少有的“能掀桌子”的函数。它可以让你和驱动层打交道,干点平时做不到的事,比如读写绝对扇区、搞定 CD-ROM 测速、拿磁盘几何信息啥的,挺猛的。

参数多,但逻辑其实不复杂。你只要搞清楚怎么拿设备句柄(CreateFile),传对控制码(比如IOCTL_DISK_GET_DRIVE_GEOMETRY),再填好输入输出缓冲区就行了。代码不长,逻辑清楚就好上手。

控制码是关键,标准的都在winioctl.h里,像FSCTL_LOCK_VOLUMEIOCTL_STORAGE_GET_DEVICE_NUMBER这些,常用得。你也可以搞自定义控制码,前提是你得配套自己的驱动。

别忘了,设备路径得写对,比如\\.\PHYSICALDRIVE0\\.\C:这样。还有,读写权限、共享模式这些要按需设置,不然容易失败。设备没开好,下面的调用都是白搭。

异步也支持,用OVERLAPPED结构体搞一下,I/O 不会阻塞线程,适合做界面应用或多任务场景。同步更适合测试或简单逻辑。怎么选,看你项目需求。

还有个小提醒,记得用完CloseHandle关设备,出错了别猜,用GetLastError看清楚,调试方便多。

,如果你搞的是设备控制、驱动交互,DeviceIoControl是个不得不掌握的老家伙。你可以顺带看看这些相关资料:

如果你正在开发一个需要访问磁盘、USB 或其他外设的程序,可以动手试试,收获挺大的。

doc 文件大小:310KB