Comment mapper la mémoire de l'appelant dans un pilote de périphérique Windows CE après la fin d'un appel à XXX_IOControl?

StackOverflow https://stackoverflow.com/questions/173596

  •  05-07-2019
  •  | 
  •  

Question

J'implémente un ioctl dans un pilote de périphérique Windows CE qui amène un pointeur sur une grande partie de la mémoire d'application pour effectuer des E / S asynchrones initiées via un appel d'application à DeviceIoControl.

Lors de l'utilisation de MapCallerPtr (), le pointeur devient non mappé lorsque la fonction XXX_IOControl est renvoyée. lorsque le pointeur est utilisé dans l’IST, il n’est plus mappé, ce qui entraîne un crash.

Quel est le meilleur moyen de mapper le pointeur au-delà de la fin de l'appel sur XXX_IOControl? L’application garantit que la mémoire restera valide jusqu’à ce qu’elle ait reçu une indication du pilote indiquant que le pilote en a terminé.

Il s’agit de Windows CE 5.0.

Était-ce utile?

La solution

Répondant à ma propre question:

Dans XXX_IOControl, mappez le pointeur à l'aide de MapPtrToProcess () et enregistrez les autorisations du thread à l'aide de GetCurrentPermissions (). Dans le thread qui utilisera le pointeur mappé, appelez SetProcPermissions () avec la valeur de retour enregistrée de GetCurrentPermissions (), des pointeurs de déréférence, puis restaurez les autorisations de thread lorsque vous avez terminé.

DWORD saved_perms = SetProcPermissions(caller_perms);
... Do stuff ...
SetProcPermissions(saved_perms);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top