Como mapear a memória do chamador em um driver de dispositivo Windows CE após o final de uma chamada para xxx_IOControl?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Estou implementando um ioctl em um driver de dispositivo Windows CE que leva um ponteiro para um grande pedaço de memória de aplicativo para executar E / S assíncrona iniciada através de uma chamada de aplicativo para DeviceIoControl.

Ao usar MapCallerPtr (), o ponteiro fica não mapeada quando a função xxx_IOControl retornos; quando o ponteiro é usado no IST já não é mapeado levando a um acidente.

O que é a melhor maneira de mapear o ponteiro além do fim da chamada para xxx_IOControl? As garantias de aplicação que a memória permanecerá válida até que tenha recebido uma indicação do driver que o condutor tenha terminado com ele.

Este é o Windows CE 5.0.

Foi útil?

Solução

Respondendo a minha própria pergunta:

Em xxx_IOControl, mapear o ponteiro usando MapPtrToProcess () e salvar as permissões do fio usando GetCurrentPermissions (). No segmento que vai usar o ponteiro mapeado, SetProcPermissions call () com o valor de retorno salvo de GetCurrentPermissions (), ponteiros dereference, e em seguida, restaurar as permissões de rosca quando terminar.

DWORD saved_perms = SetProcPermissions(caller_perms);
... Do stuff ...
SetProcPermissions(saved_perms);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top