Нет, это не 64-битный сейф. Хотя ваш hDeviceInfo
правильно определен как IntPtr
, вы сравниваете его как 32-битное значение при сравнении.
Кроме того, вы не хотите сравнивать с IntPtr.Zero
. SetupDiGetClassDevs возвращает INVALID_HANDLE_VALUE
в случае сбоя. INVALID_HANDLE_VALUE
равно -1. Вы должны сравнить все 64 бита значения, чтобы определить, не сработала ли функция. Если вы попробуете что-то вроде:
if (hDeviceInfo.ToInt32() != -1)
Тогда вы рискуете ошибкой, если возвращаемое значение равно 0x100000001.
Лучше всего использовать SafeHandle вместо IntPtr
.