2009-01-31 5 views
4

Je veux installer un pilote pour les partitions Ext2 sous Windows XP, l'installation se fera avec un script Inno Setup auto-écrit. Quelles fonctions API dois-je appeler pour cela? De ce que j'ai googlé jusqu'ici je ne semble pas avoir besoin d'un fichier inf, et donc pas d'appel à SetupCopyOEMInf. Mais je ne sais pas quoi faire à la place ...Quelle API fonctionne pour installer un pilote de système de fichiers sous Windows?

S'il vous plaît éclairer moi!

+0

Si c'est quelque chose que vous avez trouvé en ligne, n'est-ce pas venu avec des instructions? Si c'est quelque chose que vous avez écrit vous-même, comment l'avez-vous déjà installé, pour le tester en le développant? –

+0

Il est livré avec un programme d'installation, mais je veux l'emballer avec d'autres choses dans mon propre programme d'installation, afin que je puisse facilement modifier chaque nouvelle installation de Windows dans ma maison. – Treb

+0

Est-ce ext2cow? Cela m'a intéressé, mais je pensais que c'était pour Linux seulement. –

Répondre

6

Comme vous avez demandé quelles fonctions API sont nécessaires pour installer un pilote est ici 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 voulez probablement utiliser SERVICE_ BOOT_ départ pour un pilote de système de fichiers à la place de SERVICE_ DEMAND_ START. Si vous ne pouvez pas écrire un script Inno pour faire ce qui précède, vous pouvez toujours faire un petit EXE à partir de ce qui précède et faire exécuter Inno par une installation post-installation. Si vous souhaitez parcourir la route INF, consultez this Microsoft article.

+0

Je soupçonnais déjà que la façon INF était plutôt compliquée ... * soupir * Savez-vous si l'exemple vous donné nécessite un redémarrage? – Treb

+0

La façon dont je l'utilise (avec SERVICE_DEMAND_START), il ne nécessite pas de redémarrage. – QAZ

1

D'accord, je trouve un peu plus d'informations:

Les MSDN stipule que « vous devez installer les pilotes de votre système de fichiers en utilisant un fichier INF » (en appelant SetupCopyOEMInf etc), mais constate également que sur Win2K et les systèmes plus anciens, « pilotes du système de fichiers ont été généralement installés par le service Control Manager »

et je trouve une autre Ext2 driver at sourceforge qui vient avec un script d'installation Inno Setup. Là, ils ajoutent juste quelques entrées de registre sous HKLM\SYSTEM\CurrentControlSet\Services\.

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

donc j'ai fini 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 conducteur en question, quelques entrées dans une sous-clé Parameters peuvent être nécessaires. J'espère encore que quelqu'un sera en mesure de donner plus de lumière sur cette question, en particulier quelques détails sur la façon d'utiliser un fichier inf pour l'installation, puisque c'est la façon recommandée par MS.

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

0

Il existe plusieurs façons d'aborder cette question.

1/Voyez si le produit a un mode d'installation silencieux (par exemple, en utilisant un fichier de configuration à installer). Ensuite, vous venez de l'incorporer dans votre propre installation. 2/Il existe des programmes qui peuvent émuler un utilisateur, tel que Rational Robot (je ne le proposerais pas car il est commercial, mais il y en aura probablement des gratuits). Nous les utilisons principalement pour les tests automatisés d'applications graphiques, mais ils peuvent tout aussi bien l'utiliser pour exécuter un programme d'installation.

3/Contactez le développeur pour voir ce que le processus d'installation implique, puis copiez-le. 4/Microsoft dispose d'un certain nombre d'outils système (ici) capables de suivre les modifications apportées au système de fichiers, au registre, etc. Vous pouvez les utiliser pour désosser le processus d'installation et faire les mêmes choses dans votre propre installation.

Personnellement, j'irais d'abord avec le numéro 3. Le développeur serait heureux de savoir que son produit est utilisé et pourrait fournir l'information facilement. Ils peuvent même écrire un installateur silencieux pour vous, car ce serait un argument de vente supplémentaire pour leur produit dans un environnement d'entreprise (suggérer cela à eux).

0

J'ai écrit un pilote de filtre TDI.

Quand j'ai écrit le fichier .inf, il m'a fallu deux semaines de douleur pour faire fonctionner quelque chose et je ne le comprenais toujours pas, parce que ça n'avait pas vraiment de sens; ce que tu devais faire semblait très arbitraire. Les fichiers INF étaient, quand j'essayais de les utiliser, presque totalement sans papiers et complexes.

Questions connexes