摘要: 前一遍说到了为什么访问内存会越界,以及我们是如何找到根本原因的。 在知道为什么有越界访问之后,我们下一个问题是:为什么第一次调用mapviewoffile会失败?为什么第二次调用mapviewoffile会成功了? 查阅了msdn一下。如果在调用MapViewOfFile()的时候,dwNumberOfBytesToMap如果大于文件的size,那么该call就会失败,并且error code是access denied。 阅读全文
posted @ 2011-04-25 13:58 relianceslee 阅读(5564) 评论(0) 推荐(0) 编辑
摘要: 最近在fix bug的时候,遇到一个由于MapViewOfFile引起的问题。在此把分析的思路记下来。 先介绍一下背景。 项目里面有一个component叫做Message。功能分为两方面:message writer和message reader。项目有多个UI进程。需要支持每个进程写消息,同时也需要在每个进程里面有个mini message viewer显示消息。另外,在一个叫做console manager的进程里有一个Message Viewer。 现在这个message writer被实现为一个singleton COM EXE。如果哪个进程需要写消息,可以创建instance,然后通过Interface来写消息。message reader是一个普通的COM object。message viewer会create一个instance,然后定期来读消息,显示在UI上。 从上面分析我们可以看出,message是跨进程share的。该项目是通过MMF来达到该目的的。message writer会create一块memory mapping file,然后 阅读全文
posted @ 2011-04-25 12:05 relianceslee 阅读(5148) 评论(0) 推荐(0) 编辑