004 CreateFile API 使用 和学习 MSDN的方法重点

时间:2021-11-12 00:21:57

CreateFile中文翻译

 这次的课程最重要的就是教了如果去学习MSDN上面的函数,和哪些是重点

//本课程老师主要讲解了如果从MSDN学习函数的方法 //函数一般分为 函数名称 函数说明 函数参数 函数参数调用方法 函数的返回值 是否成功是否失败 Return value 函数调用的例子  Examples 扩展阅读和备注
  //如果遇到不懂的英文可以用有道词典 进行实时翻译

函数的 A版本 和 W版本

   A版本为 窄字符集  ASCII 

  W版本为 宽字符集 UNICODE 

  对应的字符串  窄字符集 char 

  对应的字符串  宽字符集 wchar_t

  微软内置变量 TCHAR 根据是否设置UNICDOE 和 ASCII 进行自动切换一般不要使用这种模式,很容易混淆

函数功能

CreateFile 函数用于创建或打开一个文件或者 I/O 设备。最常使用的 I/O 设备如下:

文件

文件流

文件夹

物理磁盘

逻辑磁盘驱动器

控制台程序缓冲区

磁带

通信资源

邮槽

管道

此函数返回一个指向用于访问来自不同类型I/O的文件或设备的句柄,其访问权限取决于它所访问的文件、设备和我们所指定的标记位、属性。
为了使之可以处理事务型 I/O,请使用 CreateFileTransacted 函数。

API 函数原型 1.HANDLE WINAPI CreateFile(
2. _In_ LPCTSTR lpFileName,              lp 代表指针       filename 文件名
3. _In_ DWORD dwDesiredAccess,           dw unsigned long     访问权限
4. _In_ DWORD dwShareMode,             设备共享模式
5. _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,         结构体指针
6. _In_ DWORD dwCreationDisposition,
7. _In_ DWORD dwFlagsAndAttributes,
8. _In_opt_ HANDLE hTemplateFile
9.)
;

//__in:输入参数; __out:输出参数 ;__in_opt:输入指针型的参数
    //如果参数 __out 注意 必须保证字符串是有足够空间的

  

参数解析 lpFileName

指定要打开、创建的文件或设备的名字。你可以在名字中使用斜杠(/)或者反斜杠(\)

在此函数的 ANSI 版本中,名字长度被限制为 MAX_PATH 个字符。为了将此限制扩展到 32767 个宽字符,需要调用此函数的 Unicode 版本,并且在添加在路径名中添加 “\?\” 前缀。获取更多的信息,参见 Naming Files, Paths, and Namespaces

想获取关于特殊设备的名字,参见 Defining an MS-DOS Device Name

为了创建一个文件流,需要指定文件名,一个冒号加上流文件的名字。获取更多信息,参见 File Streams

dwDesiredAccess

指定以何种权限打开文件或设备,可以归纳为:读访问权、写访问权、读写访问权、非读非写访问权

最常使用的值为 GENERIC_READ, GENERIC_WRITE, 或者二者都用(GENERIC_READ | GENERIC_WRITE)。获取更多信息,参见 Generic Access Rights, File Security and Access Rights, File Access Rights Constants 和 ACCESS_MASK

如果参数值为 0,那么程序可以在不访问文件或设备情况下,询问某些元数据,如文件、目录或者设备属性。此外,即使 GENERIC_READ 请求,也会被拒绝

你无法请求一个与共享模式冲突的访问权限。共享模式是在参数 dwShareMode 中设置的

获取更多信息,参见本文备注以及 Creating and Opening Files

004 CreateFile API 使用 和学习 MSDN的方法重点

dwShareMode

设置文件或者设备的共享模式,包括读、写、读写、删除、全部权限或者以上什么权限都没有(参考下面的表格)。此参数不影响对属性和扩展属性的访问请求

如果此参数为 0 且 CreateFile 函数执行成功,那么此文件或设备无法被共享,且在其句柄被关闭前,无法被再次打开。更多信息,参见本文备注。

你无法设置一个与访问模式相冲突的共享模式。此时如果 CreateFile 函数执行失败,那么 GetLastError 函数会返回 ERROR_SHARING_VIOLATION