惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 博得一笑

Bode's Online Judge Core Engine Bate2 Publish! 在线评测系统核心引擎测试二版发布! Bode's Online Judge Core Engine (Judge Engine Dynamic Link Library) 在线评测系统核心引擎 来介绍个网游:英语情境教学网游——《乌龙学院》 近期任务 维基百科中的上师大条目中发现的严重纰漏!!! 《Windows核心编程》读书笔记(一) 看了一下MD5加密算法的介绍,然后顺手把C实现改成了个C++类。 伊拉克通俗演义——关于大国霸权的思考 学思湖怪超COOL文字生成器II黄金特别版——华丽登场!!! GCC研究使用笔记 感谢LILY为学思湖怪设计的漂亮封面! ^o^ 学思湖怪超COOL文字生成器2正式版 发布啦!!! 关于[学思湖怪超COOL文字生成器2_Beta2]发布的一些说明 ^c^ 新版本“学思湖怪”文字生成器开始测试! 上机时的无聊之作。。。 博得写博客整整一年了…… 圆梦时分 ——写在自制游戏推出半年后 - 博得一笑 博客笑将要添加的一个功能。 C#中如何打开一个未知编码的文本文件。
《Windows核心编程》读书笔记(二)
博得一笑 · 2007-01-31 · via 博客园 - 博得一笑

关于进程间共享数据的研究。

昨天看了用共享节的方式共享静态数据,但是这个方法安全性不高,而且无法适用于需要动态分配大块内存的情况。

今天尝试了一下内存映射文件,发现可以很好的解决这个问题。

范例:
dll.h

dll.cpp

bool testFileMapping::init()
{
    hMapping
=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,sizeof(int)*100,L"MYSHARE");   
    
if(hMapping==NULL)   
    
{   
        
return false;
    }
   
    lpData
=MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);   
    
if(lpData==NULL)   
    
{   
        
return false
    }
   
}


void testFileMapping::set(int idx, int val)
{
    
int* tp = (int*)lpData;
    tp[idx] 
= val;
}


int testFileMapping::get(int idx)
{
    
int* tp = (int*)lpData;
    
return tp[idx];
}


testFileMapping::testFileMapping()
{
    hMapping 
= NULL;
    lpData 
= NULL;
}


testFileMapping::
~testFileMapping()
{
    
if(NULL != lpData)
    
{
        UnmapViewOfFile(lpData);
        lpData 
= NULL;
    }

    
if(NULL != hMapping)
    
{
        CloseHandle(hMapping);
        hMapping 
= NULL;
    }

}


MY_API HANDLE InitFileMapping()
{
    testFileMapping
* tp = new testFileMapping();
    tp
->init();
    
return tp;
}


MY_API 
void SetFileMapping(HANDLE hMap,int idx,int val)
{
    ((testFileMapping
*)hMap)->set(idx,val);
}


MY_API 
int GetFileMapping(HANDLE hMap,int idx)
{
    
return ((testFileMapping*)hMap)->get(idx);
}


MY_API 
void CleanFileMapping(HANDLE hMap)
{
    delete ((testFileMapping
*)hMap);
}

编译为dll后,在不同的程序中调用,就可以共享一块大小为100的int数组。因为没有加边界控制,所以检查了一下边界条件,发现其实可以访问的内存是大小为1024的int数组,也就是x86页面文件的大小4KB。当然这样的访问是不安全的,应该在程序中加以屏蔽。