调用CreateXXXX 这种 WinAPI 时,返回值NULL 跟 INVALIED_HANDLE_VALUE的区别

调用CreateXXXX 这种 WinAPI 时,返回值NULL 和 INVALIED_HANDLE_VALUE的区别
如题

请帮我阐释一下, 创建内核对象时,返回值 NULL 和 INVALIED_HANDLE_VALUE 之间的差别。

为什么要把返回值做成不一样的值? 初衷是什么?

谢谢


------解决思路----------------------
http://blogs.msdn.com/b/oldnewthing/archive/2004/03/02/82639.aspx
------解决思路----------------------
我的见解:做成NULL的话可能是那种需要返回指针的类型的,NULL可以表示一个空指针。做成那种 INVALIED_HANDLE_VALUE 的一般返回一个句柄(句柄可以简单理解为一个id号,一个数字)之类的,这个 INVALIED_HANDLE_VALUE 代表一种无效值,可以是 -1 等
------解决思路----------------------
引用:
Quote: 引用:

我的见解:做成NULL的话可能是那种需要返回指针的类型的,NULL可以表示一个空指针。做成那种 INVALIED_HANDLE_VALUE 的一般返回一个句柄(句柄可以简单理解为一个id号,一个数字)之类的,这个 INVALIED_HANDLE_VALUE 代表一种无效值,可以是 -1 等


恩,您的分析逻辑过程,很有道理。不过,既然是内核对象,那么创建的(返回值)肯定是一个句柄
你说是句柄一点都没有错误,但是对于句柄这个概念,在内核对象部分有的说是内核对象的地址,有的说是内核对象所在表的索引,说法不一。无论是地址还是索引也就是一个数字而已,而INVALID_HANDLE_VALUE和NULL本质上也都是数值,所以不必在这个方面纠结。我看《Windows核心编程》的时候也曾经纠结于这些问题,现在觉得这些问题没有必要,呵呵!个人意见。