这是我第一次需要使用 P/Invoke 与设备驱动程序交互。在 DeviceIoControl 函数中,我使用 SafeFileHandle 作为设备句柄,pinvoke.net说:
如果您使用 SafeFileHandle,请不要调用 CloseHandle,因为 CLR 会为您关闭它。
但在 C# Cookbook 中,我发现了 CloseHandle 的这种签名:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool CloseHandle(SafeFileHandle hObject);
真相是什么?