Pergunta

Eu quero instalar um driver para partições Ext2 no Windows XP, a instalação será feito com um script de instalação auto escrito Inno. Quais as funções API que eu preciso para chamar para isso? Pelo que eu pesquisei até agora eu não parecem estar precisando de um arquivo inf, e, portanto, nenhuma chamada para SetupCopyOEMInf. Mas eu não sei o que fazer em vez disso ...

Por favor, me ilumine!

Foi útil?

Solução

Como você perguntou quais as funções da API são necessários para instalar um driver aqui é algum código que eu uso para carregar um driver em 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;
}

Você provavelmente vai querer usar SERVICE_ BOOT_ começo para um driver sistema de arquivos em vez de SERVICE_ DEMAND_ INÍCIO. Se você não pode escrever um script de Inno para fazer o acima, você pode sempre fazer uma pequena EXE do acima exposto e ter Inno execução que como uma instalação post.

Se você quiser ir abaixo da rota INF, consulte a este artigo Microsoft .

Outras dicas

Tudo bem, eu encontrei mais algumas informações:

O MSDN estados que 'você deve instalar seus drivers sistema de arquivos usando um arquivo INF ' (chamando SetupCopyOEMInf etc), mas também observa que em Win2k e sistemas mais antigos, ' drivers sistema de arquivos eram comumente instalados pelo Service Control Manager '

E eu encontrei um outro Ext2 motorista no SourceForge que vem com um script de instalação Inno Setup. Lá, eles apenas adicionar algumas entradas de registro sob HKLM\SYSTEM\CurrentControlSet\Services\.

Eu acredito que a adição dessas entradas é igual a criação de um serviço com a ferramenta sc.exe, que chama internamente o OpenSCManager e CreateService api. Eu prefiro o caminho do registro, porque é mais fácil e não vejo nenhuma vantagem em utilizar as chamadas de API, uma vez que uma reinicialização é sempre necessária.

Então eu acabei com esta solução:

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

É claro que, dependendo das especificidades do motorista em questão, mais algumas entradas em uma subchave Parameters pode ser necessária.

Ainda estou esperando que alguém será capaz de lançar alguma mais luz sobre esta questão, especificamente alguns detalhes sobre como usar um arquivo inf para a instalação, uma vez que este é o caminho recomendado pelo MS.

Vamos lá, pessoal! Há uma boa recompensa para pegar aqui!

Há uma série de maneiras que você poderia abordar esta.

1 / ver se o produto tem um modo de instalação silenciosa (por exemplo, usando um arquivo de configuração para instalar). Então você acabou de incorporar isso em sua própria instalação.

2 / Há programas que podem emular um usuário, como o Rational Robot (Eu não sugeriria que uma vez que é comercial, mas não é provável que seja mais livre ao redor). Nós principalmente usá-los para testes automatizados de aplicações gráficas, mas eles podem apenas como facilmente usá-lo para executar um instalador.

3 / contato com o desenvolvedor para ver o que o real instalar vínculos de processo, em seguida, copiar isso.

4 / Microsoft tem uma série de ferramentas de sistema (aqui) que podem rastrear alterações no sistema de arquivos, registro e assim por diante. Você poderia usá-los para fazer engenharia reversa do processo de instalação e fazer as mesmas coisas em sua própria instalação.

Pessoalmente, eu iria com o número 3 em primeiro lugar. O desenvolvedor ficaria feliz em conhecer o seu produto está sendo usado e pode fornecer as informações prontamente. Eles podem até escrever um instalador silencioso para você como este seria um ponto de venda extra para seu produto em um ambiente corporativo (sugerir isso a eles).

Eu escrevi um driver de filtro TDI.

Quando eu vim para gravar o arquivo .inf, demorou duas semanas de pura dor para obter algo de trabalho e eu ainda realmente não entendo isso, porque ele realmente não faz sentido; o que você tinha que fazer parecia muito arbitrária. arquivos INF foram, quando eu estava tentando usá-los, quase totalmente sem documentos e bizzarely complexa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top