Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内存映射区域初始数据_C++_Winapi_Memory Management - Fatal编程技术网

C++ 内存映射区域初始数据

C++ 内存映射区域初始数据,c++,winapi,memory-management,C++,Winapi,Memory Management,我想使用CreateFileMapping创建内存映射区域,但不绑定任何特定的磁盘文件,而是绑定(使用mapviewoffiex)到特定的内存地址。这种区域的保护从一开始就需要是只读的。然后,我无法将数据写入这样的区域。如果要为特定磁盘文件创建此区域,则初始数据将来自文件内容。如何用初始数据填充此只读区域 示例: 大多数Windows进程都有内存区域,这些内存区域被映射(并且没有绑定到任何文件路径)并且自创建以来是只读的,它们包含数据。这是如何实现的?这些区域是如何被数据填充的?只有一种方法可以

我想使用
CreateFileMapping
创建内存映射区域,但不绑定任何特定的磁盘文件,而是绑定(使用
mapviewoffiex
)到特定的内存地址。这种区域的保护从一开始就需要是只读的。然后,我无法将数据写入这样的区域。如果要为特定磁盘文件创建此区域,则初始数据将来自文件内容。如何用初始数据填充此只读区域

示例:

大多数Windows进程都有内存区域,这些内存区域被映射(并且没有绑定到任何文件路径)并且自创建以来是只读的,它们包含数据。这是如何实现的?这些区域是如何被数据填充的?

只有一种方法可以做到这一点-首先使用
PAGE\u READWRITE
映射部分,初始化it内容,可能取消映射,然后使用
PAGE\u READONLY
保护再次映射。比如说

ULONG demo_map(PVOID BaseAddress, ULONG size, ULONG (*Init)(PVOID pv, ULONG size))
{
    ULONG dwError = NOERROR;
    if (HANDLE hSection = CreateFileMappingW(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size, 0))
    {
        if (PVOID pv = MapViewOfFile(hSection, FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, 0))
        {
            dwError = Init(pv, size);
            UnmapViewOfFile(pv);
        }
        else
        {
            dwError = GetLastError();
        }

        if (!dwError)
        {
            dwError = MapViewOfFileEx(hSection, FILE_MAP_READ, 0, 0, 0, BaseAddress) ? NOERROR : GetLastError();
        }

        CloseHandle(hSection);
    }

    return dwError;
}

“绑定(使用MapViewOffilex)到特定进程内存地址”不清楚这是什么意思。您只能将共享内存映射到自己的进程中,而不能映射到其他进程中。听起来像是一场灾难。您的实际目标是什么?编辑以获得更清晰的信息是什么让您相信“大多数windows进程的内存区域都是映射的(并且没有绑定到任何文件路径),并且自创建以来是只读的”?你的证据是什么?我用调试器看到了,一些内存区域映射到了一些文件路径,一些不包含文件路径。但问题不在于证据,而在于如何制作这样的区域。它们首先使用读写保护映射节,然后使用只读映射