Пытался установить драйвер. Через setup.exe драйвер не поставился, выскочил файл в блокноте с инструкцией о том, как ставить из inf-файла. Но это, хвала богам, я умел и так. Операционная система Windows 7.

Однако при попытке установки выскакивало сообщение "Установка драйвера провалилась. Не удаётся найти указанный файл".

Окей, я согласен найти ему указанный файл. Но какой? Не говорится. Это был мастер обновления драйвера, поэтому окно не содержало в себе никаких дополнительных сведений.

Запустил своего большого друга -- procmon.exe. Установщик копирует файлы, поэтому поставил в фильтры запрос CreateFile, а программу -- mmc.exe (установку драйверов производит непосредственно Microsoft Management Console). Результат -- иной чем SUCCESS.

Это, однако, не дало необходимого результата. Я видел, что в процессе установки не находятся некоторые файлы. Они были во временной папке с GUID в качестве имени. Я скопировал туда все файлы, которые имели отношение к драйверу (я знал, где они лежат), но при следующей установке... создалась новая папка с другим именем. В которой, ясное дело, файлы обнаружены опять не были. Стало ясно, что дело не в этом. Походу, mmc просто проверял, что файлов НЕ существует, чтобы их туда скопировать.

Тогда я включил отображение всех операций от mmc и обнаружил, что он пишет в лог. Постоянно. Ура! Я открыл этот лог и нашёл там то, что искал -- сообщения об ошибке при поиске файла. Он не мог найти файл "DeviceName_E_Series.dll". Остальные файлы с подобными именами (A_Series, B_Series...) он успешно нашёл. Включая файл, соответствующий моему устройству.

Я зашёл в папку с файлами драйвера и обнаружил там файл "DeviceName E Series.dll". Приплыли. Именно для устройства этой серии разработчики случайно поставили пробел вместо нижнего подчёркивания!

В общем, драйвер встал, хотя я остался крайне недоволен, что для установки драйвера устройства нужно наличие ВСЕХ файлов, даже не касающихся его напрямую. У меня есть основания полагать, что остальные файлы просто не эксплуатируются.

Почему же я не мог при помощи проц-мона обнаружить те файлы, которые хотел скопировать mmc?

Потому что он их открывал не при помощи CreateFile. Для этого он использовал запрос QueryDirectory (!). Который в случае отсутствия файла возвращал NO SUCH FILE. Даже не знаю, какой функции API он соответствует. Единственная схожая по названию функция существует только в драйверском API, который при установке, даже драйверов, использоваться, по идее, не должен...