2017-07-30 8 views
0

Je cherchais un moyen d'envoyer les données que mon pilote de périphérique rend à l'application en mode utilisateur. Par exemple, j'envoie un identifiant de processus spécifique en mode utilisateur à mon pilote de périphérique et mon pilote de périphérique le renvoie en mode utilisateur après un calcul ou quelque chose comme ça. Mon pilote de périphérique fonctionne avec IOCTL. Donc une fois je pensais qu'il y avait un espace/tampon comme structure dans la structure PIRP pour l'envoi en mode utilisateur. Après beaucoup de recherches à ce sujet, je n'ai pas de référence utile, d'informations à utiliser. Est-ce que quelqu'un me donne des indices à ce sujet? J'apprécierais même si c'est un peu d'aide. Merci d'avance.Envoi d'une donnée par le pilote de périphérique à l'application en mode utilisateur

Répondre

0

Lorsque vous appelez DeviceIoControl API, la routine spécifiée pour MajorFunction [IRP_MJ_DEVICE_CONTROL] est appelée.

Comme vous l'avez mentionné, vous recevez un pointeur vers IRP. En fonction du type d'IOCTL que vous avez défini, vous pouvez envoyer vos données à l'appelé, qui est l'application en mode utilisateur dans ce cas.

Selon MSDN: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/buffer-descriptions-for-i-o-control-codes

METHOD_BUFFERED Pour ce type de transfert, IRPs fournir un pointeur vers un tampon à Irp-> AssociatedIrp.SystemBuffer. Ce tampon représente à la fois le tampon d'entrée et le tampon de sortie qui sont spécifiés dans les appels à DeviceIoControl et à IoBuildDeviceIoControlRequest. Le pilote transfère les données de, puis dans, ce tampon.