15,472
社区成员
发帖
与我相关
我的任务
分享
HANDLE hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1000, NULL);
PBYTE pData = (PBYTE)MapViewOfFile(hMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
for (int i = 0; i < 512; i++)
*((DWORD *)pData + i) = 0x11111111 + i;
UnmapViewOfFile(pData);
CloseHandle(hMap);
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hMap ;
hMap = ::CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 512, "gongxiang" );
if (hMap==NULL)
{
printf("创建失败\n");
while(1);
}
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
printf("共享内存已存在\n");
while(1);
}
printf("共享内存创建成功\n");
LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
MEMORY_BASIC_INFORMATION lBuffer;
SIZE_T size = ::VirtualQuery( lpMapAddr, &lBuffer, sizeof(lBuffer));
printf("大小:%u\n", size);
while(1);
return 0;
}
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hMap ;
hMap = ::OpenFileMapping( FILE_MAP_ALL_ACCESS, 0, "gongxiang" );
if( hMap==NULL )
{
printf("打开失败\n");
while(1);
}
else
{
printf("打开成功\n");
}
LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
MEMORY_BASIC_INFORMATION lBuffer;
SIZE_T size = ::VirtualQuery( lpMapAddr, &lBuffer, sizeof(lBuffer));
printf("大小:%u\n", size);
while(1);
return 0;
}
HANDLE hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1000, NULL);
PVOID pData = MapViewOfFile(hMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 500, 300);
MEMORY_BASIC_INFORMATION mem_info;
int nBufferSize = VirtualQuery(pData, &mem_info, sizeof(mem_info));
UnmapViewOfFile(pData); // 在这里下断点
CloseHandle(hMap);
当断点触发后, 查看 mem_info 的内存数据, 特别留意结构体中的 RegionSize 成员
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hMap ;
hMap = ::CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 512, "gongxiang" );
if (hMap==NULL)
{
printf("创建失败\n");
while(1);
}
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
printf("共享内存已存在\n");
while(1);
}
printf("共享内存创建成功\n");
LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
MEMORY_BASIC_INFORMATION lBuffer;
SIZE_T size = ::VirtualQuery( lpMapAddr, &lBuffer, sizeof(lBuffer));
printf("大小:%u\n", size);
while(1);
return 0;
}
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hMap ;
hMap = ::OpenFileMapping( FILE_MAP_ALL_ACCESS, 0, "gongxiang" );
if( hMap==NULL )
{
printf("打开失败\n");
while(1);
}
else
{
printf("打开成功\n");
}
LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
MEMORY_BASIC_INFORMATION lBuffer;
SIZE_T size = ::VirtualQuery( lpMapAddr, &lBuffer, sizeof(lBuffer));
printf("大小:%u\n", size);
while(1);
return 0;
}
[/quote]
拜托~~~~~~~~~~~~~~~~
你先去看看 VirtualQuery 的 MSDN 上的介绍
该函数的返回值, 是表示实际填充到第二个参数的大小, 而不是内存的大小
真正的内存信息在填充后的第二个参数中查看
怪我没说清楚