IO是程序与外部通信的主要方式,程序通过API可以与以下设备通信,windows将这些抽象为设备通过CreateFile函数打开设备,通过CloseHandle关闭设备。
HANDLE CreateFile(
PCTSTR pszName, //普通文件名或者设备文件名
DWORD dwDesiredAccess, //访问模式(写/读)
DWORD dwShareMode, //共享模式
PSECURITY_ATTRIBUTES psa, //指向安全属性的指针
DWORD dwCreationDisposition, //如何创建
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hFileTemplate //用于复制文件句柄
);
各个参数的说明如下:
psaName既表示设备类型也表示该类设备一个实例。
dwDesiredAccess用来指定我们以何种方式和设备通信。可以传入以下值:
0 不允许读写,但可以改变设备属性。
GENERIC_READ 只读访问
GENERIC_WRITE 只写访问
GENERIC_READ|GENERIC_WRITE 读写访问
dwSharedMode用来指定共享权限:
0 独占对设备的访问。如果设备已经打开,我们 的CreateFile会失败。
FILE_SHARE_READ 只读共享,不允许修改内容。如果设备已经以写入或独占方式打开,我们的CreateFile会失败。
FILE_SHARE_WRITE 写共享,不允许读取内容。如果设备已经以读取或独占方式打开,我们的CreateFile会失败。
FILE_SHARE_READ|FILE_SHARE_WRITE 不关心向设备读还是写数据。如果设备已经以独占方式打开,我们的CreateFile会失败。
FIEL_SHARE_DELETE 先将文件标记待删除,所有对该文件引用的句柄都关闭之后,才将其真正的删除。
psa指向一个PSECURITY_ATTRIBUTES结构,用来指定安全属性。
dwCreationDisposition参数对文件的含义更重大。它可以是以下值:
CREATE_NEW 创建一个新文件。如果同名文件存在则失败。
CREATE_ALWAYS 文件同名文件存在与否都创建文件。存在时会覆盖。
OPEN