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][Périphérique nommé]Création du périphérique avec ou sans lien symbolique


Sujet :

Windows

  1. #1
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut [Driver][Périphérique nommé]Création du périphérique avec ou sans lien symbolique
    Bonjour,

    Je suis entrain de me mettre au développement d'un driver en utilisant la DDK et j'ai constaté qu'il y a deux méthodes pour enregistrer un périphérique nommé:
    - Sans lien symbolique
    - Avec lien symbolique

    Faisant le fainant, je vais au plus court et je choisis celle sans lien symbolique:
    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
    44
    45
    #define NT_DEVICE_NAME      	L"\\Device\\MyDevice"
    NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )
    {
    	NTSTATUS ntStatus;
    	UNICODE_STRING deviceNameUnicodeString;
    
    	RtlInitUnicodeString(&deviceNameUnicodeString, NT_DEVICE_NAME);
    	
    	DbgPrint("Creating device...\n");
    
    	ntStatus = IoCreateDevice(theDriverObject,
    							0,
    							&deviceNameUnicodeString,
    							FILE_DEVICE_UNKNOWN,
    							0,
    							FALSE,
    							&g_DriverDevice);
    
    	if(ntStatus != STATUS_SUCCESS)
    	{
    		DbgPrint("Error to create device name for the driver: ");
    		if(ntStatus == STATUS_INSUFFICIENT_RESOURCES)
    		{
    			DbgPrint("STATUS_INSUFFICIENT_RESOURCES\n");
    		}
    		else if(ntStatus == STATUS_OBJECT_NAME_EXISTS)
    		{
    			DbgPrint("STATUS_OBJECT_NAME_EXISTS\n");
    		}
    		else if(ntStatus == STATUS_OBJECT_NAME_COLLISION)
    		{
    			DbgPrint("STATUS_OBJECT_NAME_COLLISION\n");
    		}
    		else
    			DbgPrint("UNKNOWN\n");	
    
    		return ntStatus;
    	}
    	else
    	{
    		DbgPrint("Without symbolic link: Driver loaded!\n");
    	}
    
         ....
    }
    Je n'ai pas d'erreur lors de l'exécution de ce code.

    Je charge ensuite mon driver par le biais du logiciel InstDriver et j'exécute un code en mode utilisateur pour récupérer un handle sur mon périphérique nommé:
    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
    int main()
    {
        HANDLE hDevice = CreateFile("\\\\Device\\MyDevice",
                                    GENERIC_READ | GENERIC_WRITE,
                                    0,
                                    NULL,
                                    OPEN_EXISTING,
                                    FILE_ATTRIBUTE_NORMAL,
                                    NULL);
    
        if(hDevice == ((HANDLE)-1) )
            return FALSE;
    
        return 0;
    }
    Et là malheureusement, je n'arrive pas à récupérer un handle sur le device...
    Sauriez vous pourquoi?

    Par contre, si j'utilise la méthode avec lien symbolique, je récupère bien mon HANDLE.

    Alors je me demande si cette dernière est à utiliser par défaut?

    Merci.

    Nicolas

  2. #2
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    L'utilisation de lien symbolic n'est pas une obligation, il s'agit juste d'un "raccourci'.
    Tu dis ne pas récupérer de handle, as-tu vérifier l'erreur renvoyer par CreateFile?
    “La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”

  3. #3
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par sloshy Voir le message
    Bonjour,
    L'utilisation de lien symbolic n'est pas une obligation, il s'agit juste d'un "raccourci'.
    C'est bien ce que je pensais.

    Citation Envoyé par sloshy
    Tu dis ne pas récupérer de handle, as-tu vérifier l'erreur renvoyer par CreateFile?
    J'obtiens comme message:
    The network path was not found
    Et donc au sein du driver, je n'ai pas l'appel à ma fonction majeure pour l'irp IRP_MJ_CREATE.

    Une idée de ce qui pourrait me manquer?

Discussions similaires

  1. [2008] Création de cube avec trois requêtes nommées
    Par Danebeat dans le forum SSAS
    Réponses: 6
    Dernier message: 30/07/2012, 10h40
  2. Réponses: 3
    Dernier message: 19/02/2011, 23h01
  3. [Ant] [Ejb] Probléme de création d'ejb avec Genic
    Par rivierem dans le forum JOnAS
    Réponses: 7
    Dernier message: 25/06/2004, 16h21
  4. Création de table avec index
    Par Seb7 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/04/2003, 16h11
  5. Création d'agrégat avec SQLServer
    Par Testav dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/09/2002, 16h54

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