Windows下对I/O设备的管理分为三部分,逻辑I/O,设备驱动程序,以及中断服务程序。设备驱动程序对硬件来说,
是各种设备提供各种各样的控制,同时对应用层提供接口,应用程序通过调用这些接口,完成对设备的操作。
对磁盘的操作流程基本上是这样的:先使用CreateFile函数创建File内核对象打开设备,再用控制码以及CreateFile返回的
句柄调用DeviceIOControl函数,使驱动程序控制指定设备完成特定操作。一开始,我在网上查了很多关于CreateFile函数的说明,
都是用GENERIC_READ | GENERIC_WRITE读写访问模式,同时共享模式为FILE_SHARE_READ | FILE_SHARE_WRITE来打
开设备进行读写。
CreateFile函数原型如下:
HANDLE CreateFile(
LPCTSTR lpFileName, //指向文件名的指针
DWORD dwDesiredAccess, //访问模式(写/读)
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
DWORD dwCreationDisposition, //如何创建
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile //用于复制文件句柄
);
在网上查询到以写的方式打开磁盘的代码如下:
hDevice = CreateFile(
然而我却怎么都是返回INVALID_HANDLE_VALUE,句柄无效,也就是不能打开设备,折腾了好久,换平台,换
编译器,都没能解决我的问题,最终用将共享模式改为独占式时,句柄返回有效了。对设备的读写,若采用共享式,
读写很容易造成混乱,发生错误。
hDevice = CreateFile(