CreateFile函数理解
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是文件模板。
CreateFile函数理解相关推荐
- nodejs回调函数理解
回调实例 问题:想要得到一秒后 计算出的结果 //错误写法function add(x,y) {console.log(1);setTimeout(function () {console.log(2 ...
- ML之MIC:利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数、最大信息系数MIC)
ML之MIC:利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数.最大信息系数MIC) 目录 利用有无噪音的正余弦函数理解相关性指标的不同(多图绘制Pearson系数.最大信息系 ...
- 使用CreateFile函数打开COM10及以上串行口
程序调试时发现,使用CreateFile()打开COM4时正常,打开COM10时却总是失败.这两个端口均为虚拟COM口,通过蓝牙仿真串口完成数据收发,除了命名不同外,本质上并无任何不同. 而MSDN上 ...
- 高频交易配对交易学习——Copulas函数理解
Copulas函数理解 https://github.com/MalteKurz/VineCopulaCPP
- Pytorch中tensor.view().permute().contiguous()函数理解
Pytorch中tensor.view().permute().contiguous()函数理解 yolov3中有一行这样的代码,在此记录一下三个函数的含义 # 例子中batch_size为整型,le ...
- 频繁通过win32api的createfile函数打开文件句柄导致内存泄漏
1.通过win32的createfile.writefile函数打开写入文件 void WriteLogThread(void* lpParameter) {LPLogData pData = (LP ...
- pytorch中repeat()函数理解
pytorch中repeat()函数理解 最近在学习过程中遇到了repeat()函数的使用,这里记录一下自己对这个函数的理解. 情况1:repeat参数个数与tensor维数一致时 a = torch ...
- SQLServer STUFF 函数理解
SQLServer CAST -- 转换数据类型 逗号表示分割 . STUFF 函数理解 -- 第一个就是字符串 FOR XML PATH('') 必须用 , 第二个参数 负数或0空字符串, ...
- Java回调函数理解和应用
#Java回调函数理解和应用 所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的. 在未理解之前,我也是一脸懵逼,等我理 ...
最新文章
- java was started but returned exit code = 1
- 接口测试工具postman安装及使用
- hihoCoder1228(2015北京网络赛B题)
- 第7步 mybatis-generator dao层生成器
- 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·005【表的CRUD操作(DML语句)】
- amd显卡用黑苹果输出黑屏_教大家黑苹果英伟达免驱显卡黑屏怎么解决的方法
- 锂离子电池容量保持率和容量恢复率
- avr单片机c语言教程,十天学会AVR单片机和C语言视频教程
- ai人工智能电话机器人应用市场分析
- Linux驱动开发-编写W25Q64(Flash)驱动
- 记录一个小程序 input输入框格式手机号方法
- tp5restful API的搭建(2)
- 从AFX_MANAGE_STATE(AfxGetStaticModuleState())说起
- 透明显示屏(隐形显示屏)简述
- truffle init error,unbox Downloading报错问题
- 大型医院 HIS源码
- 致大学生——成为博主半年了,谈谈博客对于就业和考研的重要性
- Java在c盘fld目录下的文件名_VBS脚本常用代码大全2011整理.docx
- 面试题 10.11. 峰与谷
- 西门子200smart模拟量滤波防抖PLC程序,能实现电流电压和热电阻模拟量信号的采集