可以在C中将HANDLE类型的变量与NULL比较吗?

问题描述

可以在C中将声明为HANDLE的变量与NULL进行比较吗?谢谢。

版本:

例如:

HANDLE hProcess = NULL;

status = ZwOpenProcess(&hProcess,PROCESS_DUP_HANDLE,&ob,&Cid);
if (hProcess != NULL)
{
  ZwClose(hProcess);
  hProcess = NULL;
}

目标是检查hProcess是否为!= 0。然后,如果我正在检查!= NULL,意味着同一件事吗?

解决方法

评论太久了。)

目标是检查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 ...*/
  }
,

任何指针类型都可以与NULL进行比较。假设原始变量包含除该类型的空指针以外的任何值,结果将是虚假的(即,它将不相等)。

引用C11

[...]如果将空指针常量转换为指针类型,则保证生成的指针(称为空指针)与指向任何对象或函数的指针比较不相等。