CreateFile函数理解

来源:互联网 发布:阿里云计算中心 编辑:程序博客网 时间:2024/05/08 13:13

HANDLE CreateFile(
 LPCTSTR lpFileName,    // 指向文件名的指针
 DWORD dwDesiredAccess,    // 访问模式(写 / 读)
 DWORD dwShareMode,    // 共享模式
 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向安全属性的指针
 DWORD dwCreationDisposition,   // 如何创建
 DWORD dwFlagsAndAttributes,   // 文件属性
 HANDLE hTemplateFile    // 用于复制文件句柄
);

 

1、lpFileName
    一个指向无终结符的字符串的指针,来指明要创建或打开的对象的名字。

2、dwDesiredAccess
    指明对象的控制模式。一个应用程序可以包含读控制、写控制、读/写控制、设备查询控制。
这个参数的取值可以是下面这些的组合:
    0                                             指定设备查询控制:程序可以不访问设备就查询到设备属性。
    GENERIC_READ                指定读控制,可以从对象中读取数据(指针将可以移动)。
    GENERIC_WRITE               指定写控制,可以向对象中写数据(指针将可以移动)。
3、dwShareMode
    指定对象的共享模式。如果dwShareMode==0,表示是互斥使用的。如果CreateFile打开成功,则别的程序只能等到当前程序关闭对象句柄CloseHandle后才能在打开或使用。
    使用下面这些值的组合来表示对象的共享模式:
    FILE_SHARE_DELETE       Windows NT/2000/XP:打开操作只有在删除请求发生时才能返回成功。
    FILE_SHARE_READ                 打开操作只有在读控制请求发生时才能返回成功。
    FILE_SHARE_WRITE                打开操作只有在写控制请求发生时才能返回成功。
4、lpSecurityAttributes
    一个指向SECURITY_ATTRIBUTES结构对象的指针,决定返回的句柄是否被子进程所继承。如果lpSecurityAttributes参数为NULL,句柄就不能被子进程继承。
    在Windows NT/2000/XP平台下:lpSecurityDescriptor这个成员指明了这个对象的安全描述符。如果lpSecurityAttributes参数为NULL,对象将获得一个默认的安全描述符。目标文件系统必须为这个参数的在文件上的有效操作保证安全性。
5、dwCreationDisposition
    指明当打开的对象存在或不存在的时候各需怎样处理。这个参数必须是一下值的其中之一:
    CREATE_NEW            创建新文件/对象(当对象已经存在是将返回失败)。
    CREATE_ALWAYS         总是创建(如果对象存在就覆盖它,清除当前属性,把文件属性和dwFlagsAndAttributes指定的标志相结合)。
    OPEN_EXISTING         打开文件(如果不存在就返回失败)。
    OPEN_ALWAYS      存在就打开;若不存在,假如dwCreationDisposition==CREATE_NEW就创建一个新文件。
    TRUNCATE_EXISTING     存在就打开,且清空文件内容(至少要有GENERIC_WRITE权限);若文件不存在就返回失败。
6、dwFlagsAndAttributes
    指定文件属性和标志。

7、hTemplateFile
    把具有GENERIC_READ权限的句柄指定为一个模板文件。这个模板文件提供了文件属性和扩展属性,用于创建文件。在Windows95/98/Me平台上:这个参数必须为空。

 

    调用如果成功,返回值时一个打开文件的句柄。
    调用如果失败,返回值是INVALID_HANDLE_VALUE。要进一步了解出错原因,调用GetLastError。

 

实例:

HANDLE g_hCom = INVALID_HANDLE_VALUE;

 TCHAR tcCom[COM_NAME_SIZE];
 memset(tcCom,0,COM_NAME_SIZE);

 g_hCom = CreateFile(tcCom,GENERIC_READ | GENERIC_WRITE ,0,NULL,OPEN_EXISTING,0,NULL);//一般都是这样,很好参考的。
 if(g_hCom == INVALID_HANDLE_VALUE )
 {
             RETAILMSG(TRUE,(TEXT("[VSP]Failed to open uart port!\r\n")));
             goto error;
 }
 else
 {
            g_bOpenUart = TRUE;
            RETAILMSG(TRUE,(TEXT("[VSP]Succeed to open uart port!\r\n")));
 }

大概记住这个就好:

  lpFileName是文件或设备的名称。

  dwDesiredAccess是访问属性。

  dwShareMode是共享属性。

  lpSecurityAttributes是安全属性。

  dwCreationDisposition是创建属性。

  dwFlagsAndAttributes是文件标志和属性。

  hTemplateFile是文件模板。

 

原创粉丝点击