Pergunta

No Windows, é possível abrir dispositivos e volumes via CreateFile(). Eu já usei isso com sucesso antes para ReadFile() de dispositivos, mas agora quero mudar para o mapeamento de memória. No código a seguir, eu recebo INVALID_HANDLE_VALUE para o valor de b, e c está configurado para 87, ERROR_INVALID_PARAMETER.

HANDLE a = ::CreateFileA("\\\\.\\h:", GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY | FILE_FLAG_NO_BUFFERING, NULL);
HANDLE b = ::CreateFileMappingA(a, NULL, PAGE_READONLY, 0, 0, NULL);
DWORD c = ::GetLastError();

Como posso fazer isso funcionar?

Foi útil?

Solução

Você não pode. CreateFilemapping só pode criar um mapeamento para um arquivo. Dê uma olhada na diferença na documentação entre o parâmetro hfile para ReadFile e para Createfilemapping. Para o ReadFile, ele lista todos os diferentes tipos de alças que aceita (que inclui dispositivos), para o CreateFilemapping, lista apenas arquivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top