Windows内核对象无效返回值——NULL或者INVALID_HANDLE_VALUE??
来源:互联网 发布:raysource mac 编辑:程序博客网 时间:2024/06/01 17:26
今天看《Windows核心编程》无意间看到内核对象创建函数返回值的一段内容。以前写程序判断句柄无效的时候没有多想,经常用NULL,有时也用INVALID_HANDLE_VALUE。跟我同样犯迷糊的朋友们也要注意了,两者不能混淆的!
如果调用一个函数以便创建内核对象,但是调用失败了,那么返回的句柄值通常是0(N U L L )。发生这种情况是因为系统的内存非常短缺,或者 遇到了安全方面的问题。不过有少数函数在运行失败时返回的句柄值是-1 (I N VA L I D _ H A N D L E _ VA L U E )。例如,如果C r e a t e F i l e未能打开指定的文件,那么它将返回I N VA L I D _ H A N D L E _ VA L U E ,而不是返回N U L L 。当查看创建内核对象的函数返回值 时,必须格外小心。特别要注意的是,只有当调用C r e a t e F i l e 函数时,才能将该值与I N VA L I D _ H A N D L E _ VA L U E 进行比较 。下面的代码是不正确的:
HANDLE hMutex = CreateMutex(...); if (hMutex == lNVALID_HANDLE_VALUE) { //We will never execute this code because //CreateMutex returns NULL if it fails }
同样,下面的代码也不正确:
HANDIE hFile = CreateFile(.. ); if (hFile == NULL} { //We will never execute this code because CreateFile //returns lNVALID_HANDLE_VALUE (-1) if it fails. }
- Windows内核对象无效返回值——NULL或者INVALID_HANDLE_VALUE??
- WINDOWS HANDLE null INVALID_HANDLE_VALUE
- HANDLE的无效值:NULL还是INVALID_HANDLE_VALUE? 以及对HANDLE的RAII封装
- HANDLE: INVALID_HANDLE_VALUE vs NULL
- INVALID_HANDLE_VALUE 与 NULL
- 返回HANDLE的API,失败时有时候是NULL,有时候是INVALID_HANDLE_VALUE
- springBoot 定制HTTP消息转换器 返回对象只为null或者空值的字段处理
- mybatis返回对象为null或者0的问题
- 返回零长度的数组或者集合,而不是null——Effective Java 读书笔记
- Effective Java 读书笔记——43:返回零长度的数组或者集合,而不是null
- CreateFile打开串口失败,返回INVALID_HANDLE_VALUE
- 机房收费系统——无效使用null值
- WINDOWS的内核对象——《windows核心编程》读书笔记
- 判断从服务器返回对象值是否为NULL
- RequestMapping 方法里适配返回值为string 或者json对象
- 处理从服务返回的NSDictionary值为NSNull或者<null>问题
- 返回零长度的数组或者集合,来代替null值
- 《Windows核心编程》学习——内核对象
- [笨木头“创业”路]No.4 历练
- 多路归并排序
- quicker.em
- getsockopt,setsockopt用法小结
- Ubuntu学习笔记之:如何拨号上网
- Windows内核对象无效返回值——NULL或者INVALID_HANDLE_VALUE??
- Android单元测试
- 学习总结
- linux下安装软件的办法
- 3.60
- QR代码(Quick Response Code)简介
- 关于以后的嵌入式LINUX计划
- Ubuntu学习笔记之:设置Root密码
- 正则表达式语法