Здравствуйте. Есть промежуточный NDIS драйвер. Отдельные файлы для x86 и x64. Есть INF файлы для этого драйвера (минипорт и протокол). Устанавливается драйвер через INetCfg (как в BindView из DDK). Если устанавливать на 32-ух битной машине - установка проходит успешно. Если устанавливать на 64-ёх битной машине из 64-ёх битного приложение - тоже всё Ok. Если же устанавливать на 64-ёх битной машине из 32-ух битного приложения, то драйвер не устанавливается. Из логов я понял, что система выбирает драйвер для 32-ух битной системы. Как заставить систему выбрать 64-ёх битные версии драйвера?
32 - битное приложение не имеет доступа к ..\System32, а перенаправляется в ..\SysWoW64. Очевидно, туда и копируется драйвер. Попробовать отключить file redirection, но не уверен, что поможет, так как остается еще registry redirection... Update registry redirection ни при чем. Отключение file redirection должно помочь.
Не помогло Система всё равно выбирает версию для x86. Решил написать отдельный проект для установки/удаления. Этот проект будет зашит как ресурсы в API-шную DLL. При установке/удалении DLL-ка будет извлекать нужную версию и устанавливать драйвер.
Отключал через Wow64DisableWow64FsRedirection. Возвращал назад через Wow64RevertWow64FsRedirection. Отключал до начала установки (до SetupCopyOEMInf и получения/работы с INetCfg). Возвращал назад уже после всего.
У тебя все происходит в одном потоке? Обрати внимание, что отключение действует только в текущем потоке, а не глобально.
У меня точно в одном потоке, даже в одной функции. А за то, что творится внутри INetCfg ручаться не могу. Может и создаёт всяких потоков - не знаю.