DeviceIoControl Windows底层控制API实战
硬件底层交互的敲门砖就是 DeviceIoControl,Windows API 里少有的“能掀桌子”的函数。它可以让你和驱动层打交道,干点平时做不到的事,比如读写绝对扇区、搞定 CD-ROM 测速、拿磁盘几何信息啥的,挺猛的。
参数多,但逻辑其实不复杂。你只要搞清楚怎么拿设备句柄(CreateFile
),传对控制码(比如IOCTL_DISK_GET_DRIVE_GEOMETRY
),再填好输入输出缓冲区就行了。代码不长,逻辑清楚就好上手。
控制码是关键,标准的都在winioctl.h
里,像FSCTL_LOCK_VOLUME
、IOCTL_STORAGE_GET_DEVICE_NUMBER
这些,常用得。你也可以搞自定义控制码,前提是你得配套自己的驱动。
别忘了,设备路径得写对,比如\\.\PHYSICALDRIVE0
或\\.\C:
这样。还有,读写权限、共享模式这些要按需设置,不然容易失败。设备没开好,下面的调用都是白搭。
异步也支持,用OVERLAPPED
结构体搞一下,I/O 不会阻塞线程,适合做界面应用或多任务场景。同步更适合测试或简单逻辑。怎么选,看你项目需求。
还有个小提醒,记得用完CloseHandle
关设备,出错了别猜,用GetLastError
看清楚,调试方便多。
,如果你搞的是设备控制、驱动交互,DeviceIoControl是个不得不掌握的老家伙。你可以顺带看看这些相关资料:
- ioctl 控制实验 - Unix 系的类似操作
- USB 通信设备选择与控制 - 移动设备场景用得到
- 相机设备控制 - 用来打通图像设备的思路
如果你正在开发一个需要访问磁盘、USB 或其他外设的程序,可以动手试试,收获挺大的。
310KB
文件大小:
评论区