MapViewOfFile 求解

DontKissBossAss 2011-07-10 08:35:45
如下代码在第一次执行MapViewOfFile时没有问题,但是再打开一个进程时, 执行失败. 这应该不是CreateFileMapping的权限问题吧。

第二个进程在执行该函数时失败,GetLastError返回得到的结果是5
// ERROR_ACCESS_DENIED 5 (0x5) Access is denied.

在网上查的资料, 但是没找见跟这个类似的。

	HANDLE hMapFile = NULL;
char *szData = NULL;

hMapFile = OpenFileMapping(PAGE_READWRITE, NULL, "TEST");
if (hMapFile == NULL)
{
printf("The First Program, It Will Create Mapping File\n");

hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4*1024, "TEST");
if (hMapFile == NULL)
{
printf("Create Mapping File Failed\n");

system("PAUSE");
return 0;
}
}
else
{
printf("Program Has been open more than once\n");
}

szData = (char*)MapViewOfFile(hMapFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
if (szData == NULL)
{
// ERROR_ACCESS_DENIED 5 (0x5) Access is denied.
printf("Map View Of FIle Failed, %d\n", GetLastError());
CloseHandle(hMapFile);
system("PAUSE");
return 0;
}
...全文
129 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
野男孩 2011-07-10
  • 打赏
  • 举报
回复
权限不够。楼上的都说了,参数不对。
辰岡墨竹 2011-07-10
  • 打赏
  • 举报
回复
把第一个OpenFileMapping的那个PAGE_READWRITE替换成FILE_MAP_READ | FILE_MAP_WRITE或者FILE_MAP_ALL_ACCESS。
还有szData最好是void *或者BYTE *,直接操作内存最好不要用有符号的char
辰岡墨竹 2011-07-10
  • 打赏
  • 举报
回复
OpenFileMapping第一个参数传错了,应该为以下之一
FILE_MAP_ALL_ACCESS
FILE_MAP_EXECUTE
FILE_MAP_READ
FILE_MAP_WRITE
PAGE_READWRITE是CreateFileMapping的标志,你可以用FILE_MAP_ALL_ACCESS方式打开。
老邓 2011-07-10
  • 打赏
  • 举报
回复
建议尝试下第二个参数:
lpAttributes 
[in] Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If lpAttributes is NULL, the handle cannot be inherited.
Windows NT/2000/XP: The lpSecurityDescriptor member of the structure specifies a security descriptor for the new file-mapping object. If lpAttributes is NULL, the file-mapping object gets a default security descriptor.
至善者善之敌 2011-07-10
  • 打赏
  • 举报
回复
操作的是啥文件,明显提示权限不够

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧