none
CreateFile avec CREATE_NEW option RRS feed

  • Question

  • Bonjour,

     

    J'utilise CreateFile pour ouvrir un handle sur un agent PCI. Je souhaite limiter l'acces de cette carte a une seule application. Pour cela, j'utilise l'option CREATE_NEW afin que la fonction CreateFile me retourne une erreur si l'agent est deja en cours d'utilisation.

    Malheureusement, ce n'est pas le cas et la fonction CreateFile() me retourne toujours un handle valide, quelque soit le nombre d'instances deja ouvertes sur ce device.

    Est ce que j'ai mal compris l'utilisation de l'option  CREATE_NEW?

    Merci

    Cedric

     

     


    Cedric
    lundi 10 janvier 2011 14:06

Toutes les réponses

  • Bonjour,

    le troisième paramètre de CreateFile est

     __in      DWORD dwShareMode,

    et vous permet de choisir les restrictions de partage supporté par votre demande d'ouverture.

    Pour faire simple :

    • 0 - pas de partage
    • 4 - partage suppression
    • 1 - partage en lecture
    • 2 - partage en écriture
    Je vous suggère de mettre ce champ à 0.

    Faites tout de même attention que votre application rende bien le handle en cas d'exception ou de fermeture, sans quoi le device restera vérouillé jusau'au reboot.

    Cordialement,

     


    Kind regards, Sebastien G. - Axiomtek Deutschland GmbH
    mardi 11 janvier 2011 07:05
  • Bonjour,

     

    Merci pour votre réponse.

    j'ai testé la modification malheureusement, j'arrive toujours a ouvrir une deuxieme instance sur mon device.

    Tant pis, je vais essayer de trouver une autre approche.

    Cordialement.


    Cedric
    mardi 11 janvier 2011 15:21
  • Est-ce vous le développeur du driver de périphérique derrière le fichier ?

    Si oui, vous avez oubliez de gérer ces options d'ouverture.

    Sinon, ils les ont oublié, soit vous les engueulés (ça fait toujours du bien), soit vous essayez de faire un Driver passe-plat qui les gèrera.

    Généralement, moi, je passe par un service pour accéder à une ressource potentiellement partageable par plusieurs programmes. Chaque programme dialogue avec le Service Windows et ce service gère la concurrence.


    Paul Bacelar, Ex - MVP VC++
    jeudi 20 janvier 2011 21:33
    Modérateur
  • Merci pour votre reponse.

    Oui,  j'ai développé le driver et effectivement je n'ai pas inclus de gestion d'ouverture...

    Je me renseigne sur ce point. Merci encore.

     

     

     


    Cedric
    • Marqué comme réponse PLDA TECH vendredi 21 janvier 2011 09:08
    • Non marqué comme réponse PLDA TECH vendredi 21 janvier 2011 09:18
    vendredi 21 janvier 2011 09:08