HANDLE类型的变量可以与C中的NULL进行比较?
声明为HANDLE类型的变量可以与C中的NULL进行比较?,c,windows,driver,visual-studio-2019,kernel-mode,C,Windows,Driver,Visual Studio 2019,Kernel Mode,声明为HANDLE的变量可以与C中的NULL进行比较?多谢各位 版本: 例如: HANDLE hProcess = NULL; status = ZwOpenProcess(&hProcess, PROCESS_DUP_HANDLE, &ob, &Cid); if (hProcess != NULL) { ZwClose(hProcess); hProcess = NULL; } 目标是检查hProcess是否为!=0。如果我正在检查!=NULL,表示相同的
HANDLE
的变量可以与C中的NULL
进行比较?多谢各位
版本:
例如:
HANDLE hProcess = NULL;
status = ZwOpenProcess(&hProcess, PROCESS_DUP_HANDLE, &ob, &Cid);
if (hProcess != NULL)
{
ZwClose(hProcess);
hProcess = NULL;
}
目标是检查
hProcess
是否为!=0
。如果我正在检查!=NULL
,表示相同的东西?任何指针类型都可以与NULL
进行比较。假设oroginal变量包含除该类型的空指针以外的任何值,则结果将是falsy(即,它将是不相等的)
引用C11
[…]如果将空指针常量转换为指针类型,则生成的指针(称为空指针)保证与指向任何对象或函数的指针进行不等比较
(评论太长了。)
目标是检查hProcess
是否为!=0
如其他答案中所述,您可以使用if(hProcess!=NULL){/*…*/}
进行检查
但是,在给定的示例中,必须检查的是API调用的返回值
HANDLE hProcess;
if(NT_SUCCESS(ZwOpenProcess(&hProcess, PROCESS_DUP_HANDLE, &ob, &Cid)))
{
/*... use hProcess ...*/
ZwClose(hProcess);
}
else
{
/*... handle error ...*/
}
句柄的类型是什么?@SouravGhosh,typedef void*句柄代码>@Coringa可以比较
它可以,从编译的意义上讲。但是,您是否应该将其与NULL、无效句柄值、或完全其他内容进行比较,取决于上下文。返回句柄的API将记录无效值。@Coringa调用后要检查的内容是status==status\u SUCCESS
。该函数从不返回NULL,为什么要检查它?“我们真的能做奇怪的事吗?”是的。。。“做奇怪的事情有意义吗?”没有。。。这就好比问“邮局要么给我寄来一张纸条,说我订购的包裹已经到了,要么寄来一张纸条,说它无法投递。我能检查一下报纸,看看我的包裹是否已经到了吗?”没有什么可以阻止你检查,但你在那里找不到任何合理的信息。