Quelles fonctions api pour installer un pilote de système de fichiers sous Windows?

StackOverflow https://stackoverflow.com/questions/499359

  •  20-08-2019
  •  | 
  •  

Question

Je souhaite installer un pilote pour les partitions Ext2 sous Windows XP. L'installation se fera à l'aide d'un script Inno Setup auto-écrit. Quelles fonctions d'API dois-je appeler pour cela? D'après ce que j'ai cherché sur Google jusqu'à présent, je ne semble pas avoir besoin d'un fichier inf, et donc d'aucun appel à SetupCopyOEMInf. Mais je ne sais pas quoi faire à la place ...

Veuillez m'éclairer!

Était-ce utile?

La solution

Comme vous avez demandé quelles fonctions de l'API sont nécessaires pour installer un pilote, voici un code que j'utilise pour charger un pilote dans 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;
}

Vous voudrez probablement utiliser SERVICE_ BOOT_ START pour un pilote de système de fichiers au lieu de SERVICE_ DEMAND_ START. Si vous ne parvenez pas à écrire un script Inno pour effectuer ce qui précède, vous pouvez toujours créer un petit fichier EXE à partir de celui-ci et le faire exécuter par Inno après l'installation.

Si vous souhaitez suivre la route INF, consultez cet article de Microsoft .

Autres conseils

Très bien, j'ai trouvé quelques informations supplémentaires:

Le MSDN indique que vous devez installer vos pilotes de système de fichiers en utilisant un fichier INF ' (en appelant SetupCopyOEMInf etc.), mais notez également que sur les systèmes Win2k et anciens, ' étaient généralement installés par le gestionnaire de contrôle de service '

Et j’ai trouvé un autre pilote Ext2 sur sourceforge fourni avec un script d’installation d’Inno Setup. Là, ils ajoutent quelques entrées de registre sous HKLM\SYSTEM\CurrentControlSet\Services\.

Je pense que l'ajout de ces entrées équivaut à la création d'un service avec l'outil sc.exe, qui appelle en interne les api OpenSCManager et CreateService. Je préfère le registre, car c'est plus facile et je ne vois aucun avantage à utiliser les appels d'api, car un redémarrage est toujours nécessaire.

Je me suis donc retrouvé avec cette solution:

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

Bien sûr, en fonction des spécificités du pilote en question, des entrées supplémentaires dans une Parameters sous-clé peuvent être nécessaires.

J'espère toujours que quelqu'un pourra nous éclairer un peu plus sur cette question, en particulier quelques détails sur l'utilisation d'un fichier inf pour l'installation, car c'est la méthode recommandée par MS.

Allez, les gars! Il y a une belle prime à attraper ici!

Vous pouvez aborder ce problème de différentes manières.

1 / Vérifiez si le produit dispose d'un mode d'installation en mode silencieux (par exemple, en utilisant un fichier de configuration pour l'installation). Ensuite, vous intégrez cela à votre propre installation.

2 / Il existe des programmes pouvant émuler un utilisateur, tels que Rational Robot (je ne le suggérerais pas car il est commercial, mais il y en a probablement de libres). Nous les utilisons principalement pour le test automatisé d'applications graphiques, mais ils peuvent tout aussi bien l'utiliser pour exécuter un programme d'installation.

3 / Contactez le développeur pour savoir en quoi consiste le processus d'installation, puis copiez-le.

4 / Microsoft dispose d’un certain nombre d’outils système (ici) permettant de suivre les modifications apportées au système de fichiers, au registre, etc. Vous pouvez les utiliser pour effectuer un reverse-engineering du processus d’installation et effectuer les mêmes opérations dans votre propre installation.

Personnellement, je choisirais le numéro 3 en premier. Le développeur serait heureux de savoir que son produit est utilisé et peut fournir facilement les informations. Ils peuvent même écrire un programme d’installation silencieux pour vous car c’est un argument de vente supplémentaire pour leur produit dans un environnement professionnel (proposez-le-leur).

J'ai écrit un pilote de filtre TDI.

Lorsque j’ai écrit le fichier .inf, cela a pris deux semaines de souffrance absolue pour que quelque chose fonctionne, et je ne l’ai toujours pas vraiment comprise, car cela n’avait pas vraiment de sens; ce que vous deviez faire semblait très arbitraire. Lorsque j’essayais de les utiliser, les fichiers INF étaient presque entièrement non documentés et d’une complexité incroyable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top