IntPtr.Zero эквивалентно нулю?

Я пытаюсь настроитьReadFile работать асинхронно и в соответствии сMSDNМне нужно установитьlpNumberOfBytesRead вnull:

«Используйте NULL для этого параметра, если это асинхронная операция, чтобы избежать потенциально ошибочных результатов».

Например, если у меня есть следующее:

  [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
  public static extern bool ReadFile(
     IntPtr hFile,
     out byte[] aBuffer,
     int cbToRead,
     IntPtr cbThatWereRead,
     ref OVERLAPPED pOverlapped
  );

и я называю это так (с намерением иметь нулевой 4-й параметр):

Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped);

это будет то же самое, что назвать его с нулем? Если нет, что я должен изменить в объявлении или в самом вызове функции?

Мне также было любопытно, если я должен использоватьSafeHandle или жеHandleRef вместоIntPtr дляhFile ссылка? Я знаю, чтобы убедиться, что я закрываю ручку сCloseHandle(IntPtr) когда я закончу с этим, просто не уверен, есть ли какая-либо причина использовать другие два варианта надIntPtr, Я также пытаюсь избежать использования небезопасного кода.

РЕДАКТИРОВАТЬ: Как оказалось, я не должен устанавливать четвертый параметр вIntPtr.Zero во всяком случае, потому что, хотя я бегу асинхронно, он все равно может вернуться сразу же. ВидетьАсинхронный дисковый ввод-вывод, Ах, я люблю противоречивые истории.

Ответы на вопрос(3)

Ваш ответ на вопрос