Mapeamento de memória Discos e volumes físicos
-
06-07-2019 - |
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?
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