详解CreateFile函数

来源:互联网 发布:手机顾客预约软件 编辑:程序博客网 时间:2024/05/19 03:41

CreateFile函数可以用来打开许多设备,如:文件、目录、逻辑磁盘驱动器、物理磁盘驱动器、串口、并口、邮件槽、命名管道等;

 HANDLE  CreateFile(PCTSTR  pszName, DWORD  dwDesiredAccess, DWORD  dwShareMode, PSECURITY_ATTRIBUTES  psa, DWORD  dwCreationDisposition, DWORD  dwFlagsAndAttributes, HANDLE  hFileTemplate);

——pszName:表示设备的类型或者该类设备的某个实例;

——dwDesiredAccess:指定以何种方式与设备进行数据传输;

———— 0:不从设备读取或者写入数据;

————GENERIC_READ:允许对设备进行只读访问;

————GENERIC_WRITE:允许对设备进行只写访问;

————GENERIC_READ | GENERIC_WRITE:允许对设备进行读写操作;

——dwShareMode:指定设备共享特权;

————0:独占对设备的访问;

————FILE_SHARE_READ:如果有其他内核对象要使用该设备,要求不修改设备的数据;

————FILE_SHARE_WRITE:不得读取设备的数据;

————FILE_SHARE_READ | FILE_SHARE_WRITE:不关心从设备读取数据还是向设备写入数据;

————FILE_SHARE_DELETE:不关心文件是否被逻辑删除或是被移动;

——psa:指定安全信息以及我们是否希望函数返回的句柄能够被继承,一般被忽略;

——dwCreationDisposition:对文件进行标识;

————CREATE_NEW:创建一个新文件,如果同名文件存在,则调用函数失败;

————CREATE_ALWAYS:无论同名文件是否存在(覆盖),都创建一个新文件;

————OPEN_EXISTING:打开一个已有文件或者设备,如不存在则调用失败;

————OPEN_ALWAYS:打开一个已有文件,无论存在与否;

————TRUNCATE_EXISTING:打开一个已有的文件并将文件大小截断为0字节,如文件不存在,则调用失败;

——dwFlagsAndAttributes:允许设置一些标志来微调与设备间的通信;如果设备是文件,能够设置文件的属性;

高速缓存标志

————FILE_FLAG_ NO_BUFFERING:在访问文件的时候不要使用任何数据缓存;

————FILE_FLAG_SEQUENTIAL_SCAN:顺序访问文件;

————FILE_FLAG_RANDOM_ACCESS:不要提前读取数据;

————FILE_FLAG_WRITE_THROUGH:禁止对文件写入操作进行缓存以减少数据丢失的可能性;

其他标志

————FILE_FLAG_DELETE_ON_CLOSE:让文件系统在文件所有的句柄都关闭后,删除该文件;

————FILE_FLAG_BACKUP_SEMANTICS:用于备份和恢复软件;

————FILE_FLAG_POSIX_SEMANTICS:以区分大小写的方式来查找文件名;

————FILE_FLAG_OPEN_REPARSE_POINT:忽略文件的重解析属性;

————FILE_FLAG_OPEN_NO_RECALL:告诉系统不要将文件内容从脱机存储器恢复到联机存储器;

————FILE_FLAG_OVERLAPPED:以异步方式来访问设备;

文件属性标志

————FILE_ATTRIBUTE_ARCHIVE:文件为存档文件;

————FILE_ATTRIBUTE_ENCRYPTED:文件经过加密

————FILE_ATTRIBUTE_HIDDEN:文件是隐藏的;

————FILE_ATTRIBUTE_NORMAL:文件没有其他属性;

————FILE_ATTRIBUTE_NOT_CONTEXT_INDEXED:内容索引服务不会对文件进行索引;

————FILE_ATTRIBUTE_OFFLINE:文件内容已经转移到脱机存储器中;

————FILE_ATTRIBUTE_READONLY:文件是只读的;

————FILE_ATTRIBUTE_SYSTSEM:文件是操作系统的一部分,或专供操作系统使用;

————FILE_ATTRIBUTE_TEMPRARY:文件数据只会使用一小段时间;

——hFileTemplate:既可以标识一个已经打开的文件句柄(完全忽略dwFlagsAndAttributes参数),也可以是NULL;

如果CreateFile成功创建或者打开文件或设备,那么它会返回文件或设备句柄,如果失败,返回INVALID_HANDLE_VALUE;

 

打开文件或者目录:pazName为路径名或者UNC路径名;

打开逻辑磁盘驱动器:pazName为 "\\.\x:",x是驱动器的盘符;

打开物理磁盘驱动器:pazName为 "\\.\PHYSICALDRIVEx",x是物理驱动器号;

串口:pazName为"COMx";

并口:pazName为"LPTx";

邮件槽:pazName为"\\.\servername\mailslot\mailslotname";

原创粉丝点击