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

A variable of type HANDLE can be compared with NULL in C?

声明为 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 进行比较。结果将是假的(即,它将是不相等的),假设原始变量包含该类型的空指针以外的任何值。

引用 C11,

[...] If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.

(评论太长。)

The goal is check if hProcess is != 0.

您可以按照其他答案中的说明使用 if(hProcess != NULL) { /*...*/ } 检查。

但是,在给定的示例中,必须检查的是 API 调用的 return 值。

  HANDLE hProcess;
  if(NT_SUCCESS(ZwOpenProcess(&hProcess, PROCESS_DUP_HANDLE, &ob, &Cid)))
  {
    /*... use hProcess ...*/

    ZwClose(hProcess);
  }
  else
  {
    /*... handle error ...*/
  }