Какие функции API для установки драйвера файловой системы в Windows? - PullRequest
4 голосов
/ 31 января 2009

Я хочу установить драйвер для разделов Ext2 под Windows XP, установка будет производиться с помощью самописного сценария Inno Setup. Какие функции API мне нужно вызвать для этого? Из того, что я до сих пор гуглил, мне, похоже, не нужен inf-файл, и, следовательно, нет вызова SetupCopyOEMInf. Но я не знаю, что делать вместо этого ...

Пожалуйста, просветите меня!

Ответы [ 4 ]

6 голосов
/ 04 февраля 2009

Как вы спросили, какие функции API необходимы для установки драйвера, вот код, который я использую для загрузки драйвера в C:

bool LoadDriver( const char * cpDriverPath, const char * cpDriverName )
{
    SC_HANDLE hSCService;
    SC_HANDLE hSCManager;

    hSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
    if( hSCManager == NULL )
        return false;

    hSCService = CreateService( hSCManager, cpDriverName, cpDriverName,
                                SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,
                                SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
                                cpDriverPath, NULL, NULL, NULL, NULL, NULL );

    if( hSCService == NULL && GetLastError() == ERROR_SERVICE_EXISTS )
        hSCService = OpenService( hSCManager, cpDriverName, SERVICE_ALL_ACCESS );

    if( hSCService == NULL )
        return false;

    if( !StartService( hSCService, 0, NULL ) )
    {
        if( GetLastError() != ERROR_SERVICE_ALREADY_RUNNING )
            return false;
    }

    CloseServiceHandle( hSCManager );
    CloseServiceHandle( hSCService );

    return true;
}

Возможно, вы хотите использовать SERVICE_ BOOT_ START для драйвера файловой системы вместо SERVICE_ DEMAND_ START. Если вы не можете написать скрипт Inno для выполнения вышеперечисленных действий, вы всегда можете создать небольшой EXE-файл из вышеперечисленного и заставить Inno запускать его как постустановку.

Если вы хотите пройти по маршруту INF, прочитайте эту статью Microsoft .

1 голос
/ 04 февраля 2009

Хорошо, я нашел больше информации:

MSDN гласит, что 'вы должны установить драйверы файловой системы, используя INF-файл' (вызывая SetupCopyOEMInf и т. Д.), Но также отмечает, что на Win2k и старше системы, 'драйверы файловой системы обычно устанавливались диспетчером управления службами'

И я нашел другой Ext2 драйвер в sourceforge , который поставляется с установочным скриптом Inno Setup. Там они просто добавляют несколько записей реестра под HKLM\SYSTEM\CurrentControlSet\Services\.

Я считаю, что добавление этих записей равнозначно созданию службы с помощью инструмента sc.exe, который внутренне вызывает API OpenSCManager и CreateService. Я предпочитаю способ регистрации, потому что он проще и я не вижу преимуществ в использовании вызовов API, так как перезагрузка всегда требуется.

Итак, я остановился на этом решении:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourService]
"ErrorControl"=dword:00000001
"Start"=dword:00000003
"Type"=dword:00000001
"DisplayName"="YourServiceDisplayName"
"ImagePath"="System32\Drivers\YourService.sys"

Конечно, в зависимости от специфики рассматриваемого драйвера, может потребоваться еще несколько записей в Parameters подразделе.

Я все еще надеюсь, что кто-то сможет пролить немного света на этот вопрос, в частности, некоторые подробности о том, как использовать файл inf для установки, так как MS рекомендует этот способ.

Давай, ребята! Здесь есть хорошая награда!

0 голосов
/ 29 марта 2009

Я написал драйвер фильтра TDI.

Когда я пришел написать файл .inf, потребовалось две недели явной боли, чтобы заставить что-то работать, и я все еще не понимал этого, потому что это не имело смысла; то, что вы должны были сделать, казалось очень произвольным. Файлы INF были, когда я пытался их использовать, почти полностью без документов и странно сложны.

0 голосов
/ 06 февраля 2009

Есть несколько способов подойти к этому.

1 / Проверьте, имеет ли продукт режим автоматической установки (например, для установки используется файл конфигурации). Тогда вы просто включаете это в свою собственную установку.

2 / Существуют программы, которые могут эмулировать пользователя, такие как Rational Robot (я бы не советовал такую, поскольку она коммерческая, но, скорее всего, есть бесплатные). В основном мы используем их для автоматизированного тестирования графических приложений, но они также могут легко использовать его для запуска программы установки.

3 / Свяжитесь с разработчиком, чтобы узнать, что влечет за собой фактический процесс установки, а затем скопируйте его.

4 / Microsoft имеет ряд системных инструментов (здесь), которые могут отслеживать изменения в файловой системе, реестре и так далее. Вы можете использовать их, чтобы перепроектировать процесс установки и сделать те же вещи в вашей собственной установке.

Лично я бы сначала пошел с номером 3. Разработчик будет рад узнать, что их продукт используется, и может предоставить информацию с готовностью. Они могут даже написать для вас тихий установщик, так как это станет дополнительным преимуществом для их продукта в корпоративной среде (предложите это им).

...