Попытка вызова SetupDiCallClassInstaller из программы, скомпилированной в 32-разрядном режиме, не выполняется в 64-разрядной Windows.
Видимо, это так, но я хотел бы знать причину.
По данным MSDN:
Установка устройств в 64-битных системах :
32-разрядная версия приложения должна проверять значение, возвращаемое UpdateDriverForPlugAndPlayDevices. Если возвращаемое значение равно ERROR_IN_WOW64, 32-разрядное приложение выполняется на 64-разрядной платформе и не может обновить драйверы входящих сообщений. Вместо этого он должен вызвать CreateProcess (описанный в документации Windows SDK), чтобы запустить 64-разрядную версию приложения. Затем 64-разрядная версия может вызвать UpdateDriverForPlugAndPlayDevices, указав параметр FullInfPath, который определяет расположение 64-разрядных версий всех файлов.
Таким образом, похоже, что любой API, предназначенный для создания отчетов ERROR_IN_WOW64, специально предназначен НЕ для работы в WOW64, 32-битный процесс должен вызывать 64-битный процесс для вызова API.
ERROR_IN_WOW64
Если вы выполняете этот вызов из 32-разрядного процесса в 64-разрядной ОС, он завершается сбоем, поскольку ему необходимо изменить некоторые разделы реестра в 64-разрядной части реестра.В противном случае, если вы сделаете этот вызов из 64-битного процесса в 64-битной ОС, он также преуспеет с 32-битным процессом в 32-битной ОС.