Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HANDLE类型的变量可以与C中的NULL进行比较?_C_Windows_Driver_Visual Studio 2019_Kernel Mode - Fatal编程技术网

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,为什么要检查它?“我们真的能做奇怪的事吗?”是的。。。“做奇怪的事情有意义吗?”没有。。。这就好比问“邮局要么给我寄来一张纸条,说我订购的包裹已经到了,要么寄来一张纸条,说它无法投递。我能检查一下报纸,看看我的包裹是否已经到了吗?”没有什么可以阻止你检查,但你在那里找不到任何合理的信息。