SetupDiCallClassInstaller выдает ERROR_IN_WOW64 при компиляции для 32-битной на 64-битной машине. - PullRequest
3 голосов
/ 31 декабря 2011

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

GetLastError() == ERROR_IN_WOW64

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

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

1 Ответ

2 голосов
/ 12 мая 2017

Как прокомментировал вопрос Ханс Пассант, эту функцию нельзя вызвать из 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-битной платформы.

...