Memory mapping physical disks and volumes
-
06-07-2019 - |
Question
In Windows it's possible to open devices and volumes via CreateFile()
. I've used this successfully before to ReadFile()
from devices, but now I want to switch to memory-mapping. In the following code, I receive INVALID_HANDLE_VALUE
for the value of b
, and c
is set to 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();
How can I get this to work?
Solution
You can't. CreateFileMapping can only create a mapping to a file. Take a look at the difference in the documentation between the hFile parameter for ReadFile and for CreateFileMapping. For ReadFile it lists all the different types of handles it accepts (which includes devices), for CreateFileMapping it only lists files.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow