IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

DRIVER - fonctions dispatch - soucis de compilation


Sujet :

Windows

  1. #1
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut DRIVER - fonctions dispatch - soucis de compilation
    Bonsoir à tous,

    J'implémente (j'essaye) une structure minimum de Driver.
    Mais là, je suis sur un soucis depuis 2hrs.
    La ligne suivante ... elle se trouve dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DriverObject -> MajorFunction[IRP_MJ_CREATE] = Example_Create ;
    Sans elle, pas de soucis ... je peux "charger" et "retirer" ce driver, et le "voir" dans le systeme.
    Une fois que je veux initialiser les fonctions Dispatch, ça refuse de compiler.
    Pourtant, la syntaxe semble correct ... j'ai retourné toute ma doc ... je suis dans un cul de sac.
    Un petit coup de main me ferait bien plaisir ... merci à tous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    // MY DRIVER
    // =========
    #include <ntddk.h>
    #include <windef.h>
    
    void Example_Create &#40;&#41; &#123; &#125;
    
    void myUnload &#40;PDRIVER_OBJECT pDriverObject&#41;
    &#123;
    	DbgPrint &#40;"%s","My Driver - Unload\n"&#41; ;
    &#125;
    
    NTSTATUS DriverEntry &#40;PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath&#41;
    &#123;
        NTSTATUS NtStatus = STATUS_SUCCESS ;
        PDEVICE_OBJECT pDeviceObject = NULL ;
        UNICODE_STRING usDriverName, usDosDeviceName ;
    	
        DbgPrint &#40;"DriverEntry Called \r\n"&#41; ;
    
        RtlInitUnicodeString &#40;&usDriverName, L"\\test4"&#41; ; 
        RtlInitUnicodeString &#40;&usDosDeviceName, L"\\DosDevices\\Example"&#41; ; 
    
    	
        NtStatus = IoCreateDevice &#40;DriverObject, 0,
                                  &usDriverName, 
                                  FILE_DEVICE_UNKNOWN,
                                  FILE_DEVICE_SECURE_OPEN, 
                                  FALSE, &pDeviceObject&#41; ;
    	
    	
        DriverObject -> MajorFunction&#91;IRP_MJ_CREATE&#93; = Example_Create ;
     
    // cette ligne CI-DESSUS "refuse", sans elle, c'est ok ! !
    // ... alors que la ligne CI-DESSOUS ne pose aucun soucis ... étonnant   !!!
    
        DriverObject -> DriverUnload = myUnload ;
     	
        DbgPrint &#40;"%s","My Driver - Load\n"&#41; ;
    	
        return STATUS_SUCCESS ;
    &#125;
    PS: je ne parle pas d'utilisation, mais simplement de compilation.

  2. #2
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    Oups, j'ai trouvé ... pour ceux que le sujet intéresse ...
    pas mal de recherche, et surtout, une petite analyse des déclarations dans ntddk.h ... notamment la déclaration de la structure _DRIVER_OBJECT ... dont voici un tout petit extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct _DRIVER_OBJECT &#123;
    .....
    .....
    
    PDRIVER_UNLOAD DriverUnload;
    PDRIVER_DISPATCH MajorFunction&#91;IRP_MJ_MAXIMUM_FUNCTION + 1&#93;;
    
    &#125; DRIVER_OBJECT;
    Je m'étonnais que ma ligne avec "myUnload" fonctionnait, alors que celle (juste au dessus) avec "Example_Create" refusait la compilation ... alors que les deux lignes adressent le même Objet et respecte la même syntaxe ... d'ou mon étonnement. En realité, voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    DriverObject -> DriverUnload
    
    référence un emplacement "PDRIVER_UNLOAD" dans l' _Objet_Driver.
    Alors que,
    
    DriverObject -> MajorFunction&#91;IRP_MJ_CREATE&#93;
    
    référence un emplacement "PDRIVER_DISPATCH" ...
    Ce n'est pas la même chose
    
    En effet  &#40;extrait de ntddk.h&#41;, un petit coup d'oeil &#58;
    
    typedef
    VOID
    &#40;*PDRIVER_UNLOAD&#41; &#40;
        IN struct _DRIVER_OBJECT *DriverObject
        &#41;;
    
    ET
    
    typedef
    NTSTATUS
    &#40;*PDRIVER_DISPATCH&#41; &#40;
        IN struct _DEVICE_OBJECT *DeviceObject,
        IN struct _IRP *Irp
        &#41;;
    Conclusion et pour ne pas faire trop long.
    L'erreur est dans la déclaration de ma fonction "Example_Create".
    La bonne déclaration est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NTSTATUS Example_Create &#40; PDEVICE_OBJECT DeviceObject,  PIRP Irp &#41;
        &#123; 
            return STATUS_SUCCESS ; 
         &#125;
    Une nuit blanche, beaucoup de café ... et bien content ... "ça" compile.
    Pas évident les Drivers, mais passionnant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] souci de compilation
    Par Ivory69 dans le forum wxWidgets
    Réponses: 1
    Dernier message: 03/05/2007, 16h17
  2. Soucis de compilation !
    Par nhlx5haze dans le forum C
    Réponses: 5
    Dernier message: 03/02/2007, 11h17
  3. [Borland C++ 5.5] Souci de compilation
    Par Coolcoolman dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 12/11/2006, 23h38
  4. Souci de compilation avec des gros projets avec BC5++
    Par SOPRA-Eherve dans le forum C++Builder
    Réponses: 7
    Dernier message: 10/05/2006, 21h23
  5. Souci de compilation
    Par ToTo13 dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 27/01/2006, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo