Предварительная установка SetupCopyOemINF не работает Windows 7

У меня есть код драйвера устройства Windows WDF, я пытаюсь заставить его работать до предустановки (до того, как устройство присутствует). Он начинается с проверки наличия действительных идентификаторов устройств и делает следующее:

if (UpdateDriverForPlugAndPlayDevices(0, // No Window Handle
    hwid, // Hardware ID
    inffile, // FileName
    INSTALLFLAG_FORCE,
    &RebootRequired))
        // success

Но если устройства отсутствуют / подключены, он делает следующее:

if(SetupCopyOEMInf(inffile,
     NULL,
     SPOST_PATH,
     0,
     NULL,
     0,
     NULL,
     NULL))
        // etc.

В первом случае (устройство есть) все хорошо. Но во втором случае, согласно «Preinstalling Driver Packages» Microsoft, он должен скопировать INF в c: \ Windows \ inf \ oem.inf (что он и делает), а затем, когда устройство присутствует, оно должно установить драйвер на основе на информации в INF, которой нет, и мне нужно перейти к диспетчеру устройств, удалить неизвестное устройство и просканировать аппаратные изменения, чтобы установить его.

В первом случае (устройство присутствует) наш файл .sys драйвера копируется в каталог c: \ windows \ system32 \ drivers, тогда как во втором случае этого не происходит. Если просто отдельно скопировать файл .sys в c: \ windows \ system32 \ drivers, все заработает. Я могу просто сделать это, но это кажется беспорядочным (и рискованным), учитывая, что все это должно обрабатываться автоматически, основываясь на моем чтении документа Microsoft «Preinstalling Driver Packages».


person rwhenderson    schedule 27.08.2014    source источник


Ответы (1)


Когда вы предварительно устанавливаете драйвер, он регистрирует только этот драйвер в хранилище драйверов. Затем, когда подключено устройство, которое соответствует этому предустановленному драйверу, оно установит его, скопировав файл SYS в каталог C: \ Windows \ system32 \ drivers, и установит файл INF как файл OEMxx.inf в папку C: \ Windows. \ inf \ каталог.

Если вы вызовете эту команду и устройство присутствует, как вы видели, Windows установит драйвер. Если устройство отсутствует, оно будет установлено при подключении следующего устройства, соответствующего ему.

Вы упомянули, что вы можете вручную перейти к диспетчеру устройств, чтобы «удалить» и «повторно просканировать», чтобы запустить установку. У вас также могут быть команды для этого, чтобы сделать это программно после вашего вызова SetupCOpyOEMInf. См. Документацию devcon , исходный код доступен в WDK. Вы можете попробовать это в командной строке, используя devcon remove XXXX, где XXXX - это некоторая совпадающая информация на вашем устройстве, и devcon rescan, чтобы запустить поиск нового оборудования.

Кроме того, не копируйте файл SYS в папку с драйверами самостоятельно - используйте предоставленные методы для установки, как рекомендует Microsoft - это избавит вас от головной боли в дальнейшем.

person Preston    schedule 02.09.2014