xxx_iocontrol 호출을지나 Windows CE 장치 드라이버에서 발신자 메모리를 매핑하는 방법은 무엇입니까?

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

  •  05-07-2019
  •  | 
  •  

문제

Windows CE 장치 드라이버에서 IOCTL을 구현하고있는 응용 프로그램 호출을 통해 비동기 I/O를 수행하기 위해 대량의 응용 프로그램 메모리 덩어리에 대한 포인터를 사용하여 DeviceioControl에 대한 응용 프로그램 호출을 수행합니다.

MapCallerPtr ()를 사용하면 xxx_iocontrol 함수가 반환 될 때 포인터가 표시되지 않습니다. 포인터가 IST에서 사용되면 더 이상 맵핑되지 않으면 충돌이 발생합니다.

XXX_IOCONTROL 호출을 넘어 포인터를 매핑하는 가장 좋은 방법은 무엇입니까? 응용 프로그램은 운전자가 운전자가 끝났다는 표시를받을 때까지 메모리가 유효하게 유지 될 것이라고 보장합니다.

이것은 Windows CE 5.0에 있습니다.

도움이 되었습니까?

해결책

내 자신의 질문에 대답 :

xxx_iocontrol에서 mapptrtoprocess ()를 사용하여 포인터를 매핑하고 getCurrentPerMissions ()를 사용하여 스레드의 권한을 저장하십시오. 매핑 된 포인터를 사용하는 스레드에서 GetCurrentPerMissions (), Dereference Pointers에서 저장된 반환 값으로 setProcperMissions ()을 호출 한 다음 완료되면 스레드 권한을 복원하십시오.

DWORD saved_perms = SetProcPermissions(caller_perms);
... Do stuff ...
SetProcPermissions(saved_perms);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top