Question sur les Event

Résolu
Albanderuaz Messages postés 29 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 3 janvier 2011 - 30 août 2010 à 13:08
Albanderuaz Messages postés 29 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 3 janvier 2011 - 31 août 2010 à 17:40
Bonjour,

J'ai une question concernant le partage d'event entre application et driver.
Dans mon application, je crée un event et j'envoie son handle au driver. Je le référence, et lorsque ce dernier 'signale' l'évènement, l'application détecte bien son changement d'état, tout va bien.
Maintenant, si mon application est quittée ou crash à la suite d'un bug, l'évènement n'est plus valide au niveau du driver. J'obtiens un bsod lorsque KeSetEvent est appelée si l'application ne tourne plus.

Y a-t-il un moyen de vérifier si un event est encore valide avant d'appeler KeSetEvent pour éviter ce genre de problèmes?

Merci beaucoup!

6 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
31 août 2010 à 13:55
Tu veux dire être informé si le driver à perdu sa référence sur l'event ?

Je ne crois pas qu'il y ait de méthode (Encore qu'il doit être plus ou moins possible de récupérer la valeur du compteur de références sur l'event).

Par contre, tu peux peut être bricoler un bout de code. Par exemple tu t'arrange pour que ton appli n'est pas de référence sur l'event (CloseHandle). Puis tu essais de l'ouvrir via son nom (OpenEvent). Si le driver a une référence sur l'event, il devrait exister donc OpenEvent devrait fonctionner. Si le driver n'a pas de référence sur l'event, l'event devrait avoir été détruit, donc OpenEvent devrait échouer.

Mais bon c'est pas top top quand même.
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
31 août 2010 à 12:20
Salut,

Tu utilises bien ObReferenceObjectByHandle ?

Normalement, ça devrait permettre d'incrémenter le compteur d'utilisation, donc l'event devrait disparaître si l'appli et le driver tombent.

If the call succeeds, a pointer to the object body is returned to the caller and the pointer reference count is incremented. Incrementing this count prevents the object from being deleted while the pointer is being referenced. The caller must decrement the reference count with ObDereferenceObject as soon as it is done with the object.
0
Albanderuaz Messages postés 29 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 3 janvier 2011
31 août 2010 à 13:08
Donc si j'ai bien compris, si l'application disparaît, l'event est toujours valide du côté du driver?
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
31 août 2010 à 13:10
Bin normalement oui.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Albanderuaz Messages postés 29 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 3 janvier 2011
31 août 2010 à 13:38
D'accord, merci beaucoup!

Dernière question, si maintenant le driver déréférence l'objet, y a-t-il un moyen de savoir au niveau de l'application de savoir que l'event n'est plus valide?

Merci!
0
Albanderuaz Messages postés 29 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 3 janvier 2011
31 août 2010 à 17:40
D'accord, merci beaucoup, je vais faire cela.
0
Rejoignez-nous