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;
}
...全文
190 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
  • 打赏
  • 举报
回复
操作的是啥文件,明显提示权限不够
内容概要:本文围绕基于三重移相控制(TPS)的双有源桥(DAB)高频隔离DC-DC变换器开展系统性研究,重点构建了其在Simulink环境下的高精度仿真模型。研究全面涵盖SPS单相移相、DPS双重重移相与TPS三重移相等多种控制策略的建模、实现与性能对比,深入分析不同模式下变换器的功率传输特性、软开关实现条件及功率回流问题,旨在提升DAB在交直流混合微电网、能量路由器、多端口柔性互联装置等场景中的转换效率与动态响应能力。通过对ZVS(零电压切换)条件的精确控制与移相角参数的优化,有效降低了开关损耗,增强了系统整体能效与运行稳定性。该仿真模型具有良好的可扩展性,适用于复杂电能转换系统的科研验证与工程开发。; 适合人群:电力电子、电气工程及其自动化等相关专业的硕士研究生、博士生、科研人员以及从事新能源变换器、柔性输配电系统设计的工程技术人员。; 使用场景及目标:①掌握双有源桥DAB变换器的基本工作原理及其在高频隔离场合的核心优势;②深入理解三重移相控制策略的设计机理、控制自由度分配及其在效率优化中的关键作用;③构建并调试可用于科研论文撰写、项目申报或实际系统验证的高保真Simulink仿真模型,支撑理论分析与实验对比。; 阅读建议:建议结合MATLAB/Simulink平台进行动手实践,重点关注主电路拓扑搭建、移相控制模块设计、驱动信号时序配置及ZVS实现条件的仿真观测,推荐通过对比SPS、DPS与TPS三种模式的稳态与动态响应曲线,深入掌握各控制策略的适用边界与优化方向。

65,212

社区成员

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

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