在Windows驱动程序的编写中,当我们调用一个返回NTSTATUS值的函数时(比如IoCreateDevice),应当检查返回值是否成功。
有人经常这样写
但是,这并不总是合理的。
在ddk头文件”ntdef.h“中,NTSTATUS是这样定义的:
可见,NTSTATUS是一个有符号
的长整数。并且分为四个域。最高2位Sev域,描述的是这个NTSTATUS的严重性(Severity):
00 成功(Success)
01 信息(Informational)
10 警告(Warning)
11 错误(Error)
00和01应该都表示成功的状态,10和11都表示错误状态。即对于这样的有符号长整数的最高位(也就是符号位)
,0成功,1错误。那么,如果NTSTATUS>=0为成功,NTSTATUS<0为错误。
因此,在头文件”ntdef.h“中,测试NTSTATUS成功的宏定义为:
而不是我以前想象的测试status == 0(STATUS_SUCCESS = 0)
参考我在StackOverflow上发的问题,感谢解答问题的老外^_^