Почему функция SetupDiCallClassInstaller ограничена 64-битными программами? - PullRequest
6 голосов
/ 31 декабря 2011

Попытка вызова SetupDiCallClassInstaller из программы, скомпилированной в 32-разрядном режиме, не выполняется в 64-разрядной Windows.

Видимо, это так, но я хотел бы знать причину.

Ответы [ 2 ]

1 голос
/ 08 августа 2014

По данным 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.

0 голосов
/ 08 августа 2014

Если вы выполняете этот вызов из 32-разрядного процесса в 64-разрядной ОС, он завершается сбоем, поскольку ему необходимо изменить некоторые разделы реестра в 64-разрядной части реестра.В противном случае, если вы сделаете этот вызов из 64-битного процесса в 64-битной ОС, он также преуспеет с 32-битным процессом в 32-битной ОС.

...