在Windows CE中映射内存映射文件的一部分

在Windows CE中映射内存映射文件的一部分,windows,windows-mobile,windows-ce,Windows,Windows Mobile,Windows Ce,在Windows CE中创建和映射MMF的过程中,MMF的地址空间在何处被阻止。是在创建MMF期间还是在映射视图时?只有在虚拟地址空间中有一个连续的x空间(在创建过程中指定)时,创建才会成功吗 其次,是否可以像在win32中一样在win CE中映射文件的一部分。如果我创建一个包含0x8000字节的MMF,并映射一个偏移量为0x5000、大小为0x7000的文件视图,则映射失败。它表示无效的_参数。尽管当视图的偏移量和大小之和小于0x8000时允许映射。它总是从文件的开头映射吗 在Windows

在Windows CE中创建和映射MMF的过程中,MMF的地址空间在何处被阻止。是在创建MMF期间还是在映射视图时?只有在虚拟地址空间中有一个连续的x空间(在创建过程中指定)时,创建才会成功吗

其次,是否可以像在win32中一样在win CE中映射文件的一部分。如果我创建一个包含0x8000字节的MMF,并映射一个偏移量为0x5000、大小为0x7000的文件视图,则映射失败。它表示无效的_参数。尽管当视图的偏移量和大小之和小于0x8000时允许映射。它总是从文件的开头映射吗

在Windows Mobile 6.x(CE 5.0)中,内存映射文件存储在虚拟地址空间的上述0x42000000中

是的,您需要连续空间才能成功分配MMF

0x5000+0x7000=0xC000。这比分配的0x8000字节的空间大

-保罗

编辑
此外,系统分配粒度的偏移量。使用
GetSystemInfo
查找该值。例如,在我的一个设备上,它是0xa11字节

但是指令应该从文件中的偏移量0x5000开始读取0x7000字节,并将以下0x7000读取并存储在分配给MMF的空间中,即0x8000,对吗?在这种情况下,既然0x7000远小于0x8000,为什么它会失败呢?我说的“where”是指创建MMF的阶段。不是地点。或者应该是“什么时候”。它在CreateMF调用或MapViewOfFile调用期间得到分配吗?要回答您的其他问题,它在MapViewOfFile调用期间被映射:“创建文件映射对象会创建映射文件视图的可能性,但不会映射视图。MapViewOfFile会将文件视图映射到进程的地址空间。”该偏移量位于要映射的文件内。因此,如果偏移量为0,则位于文件的开头。如果偏移量为0x400,则会将1KB映射到文件中,并且可以映射的最大大小比分配的小1KB。