SetupDiCallClassInstaller генерирует ERROR_IN_WOW64 при компиляции для 32-битной на 64-битной машине.

Вызов SetupDiCallClassInstaller на 64-битном компьютере при компиляции для 32-битного возвращает false.

GetLastError() == ERROR_IN_WOW64

Все остальные вызовы функций работают под 32-битной версией, только этот вызывает у меня проблемы.

Мне интересно, если кто-нибудь знает, что я делаю здесь не так.

1 ответ

Как отметил Ханс Пассант в комментарии к этому вопросу, вы не можете вызывать эту функцию из 32-разрядного процесса на 64-разрядной платформе Windows. В любом случае, если вы попытаетесь это сделать, вы получите ERROR_IN_WOW64. Причина, по которой вы не можете этого сделать, заключается в том, что ваш 32-битный процесс вызывает 32-битную версию API. На 64-битной платформе этот API-интерфейс работает в подсистеме Windows WoW64 ( https://en.wikipedia.org/wiki/WoW64). Некоторые методы, такие как SetupDiCallClassInstaller, недоступны в этой подсистеме. Когда вы пытаетесь вызвать их, возникает ошибка ERROR_IN_WOW64. Приложение должно напрямую вызывать 64-битную версию API. Один из способов добиться этого - перекомпилировать ваше приложение для 64-битной платформы.

Другие вопросы по тегам