2008-10-06 6 views
1

DeviceIoControl에 대한 응용 프로그램 호출을 통해 시작된 비동기 I/O를 수행하기 위해 많은 양의 응용 프로그램 메모리에 대한 포인터를 사용하는 Windows CE 장치 드라이버에 ioctl을 구현하고 있습니다.XXX_IOControl에 대한 호출이 끝난 후 Windows CE 장치 드라이버에서 호출자 메모리를 매핑하는 방법은 무엇입니까?

MapCallerPtr()을 사용하면 XXX_IOControl 함수가 반환 될 때 포인터의 매핑이 해제됩니다. 포인터가 IST에서 사용될 때 더 이상 충돌로 이어지는지도가 아닙니다.

XXX_IOControl에 대한 호출이 끝날 때까지 포인터를 매핑하는 가장 좋은 방법은 무엇입니까? 응용 프로그램은 드라이버가 드라이버로 완료되었다는 표시를 드라이버가 수신 할 때까지 메모리가 유효한 상태를 유지하도록합니다.

이것은 Windows CE 5.0에 있습니다. 내 자신의 질문에 대답

답변

1

: XXX_IOControl에서

이 MapPtrToProcess를 (사용하여 포인터)를지도하고 GetCurrentPermissions를 사용하여 스레드의 권한을 저장(). 매핑 된 포인터를 사용할 스레드에서 GetCurrentPermissions()에서 저장된 반환 값을 사용하여 SetProcPermissions()를 호출하고 포인터를 역 참조 한 다음 완료되면 스레드 사용 권한을 복원합니다.

DWORD saved_perms = SetProcPermissions(caller_perms); 
... Do stuff ... 
SetProcPermissions(saved_perms); 
관련 문제