打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
windows共享内存

windows共享内存使用来源: 杨晓芬的日志

1,即开辟一段内存,然后两个工程的独立线程可以访问它。实现传送数据的目的。

2,

sender:

hMapFile = CreateFileMapping (
(HANDLE)0xFFFFFFFFFFFFFFFF,
NULL,
PAGE_READWRITE ,
0,
100,
"BLShareTest" ) ;

lpBase = (char*)MapViewOfFile (
hMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
0 ) ;

特别注意:传送的数据必须是赋值之后的。不能直接对lpBase直接赋值,而是通过strcpy赋值,先记下。

 reader:HANDLE hMapFile = OpenFileMapping ( FILE_MAP_ALL_ACCESS, //PAGE_READWRITE,
TRUE, "BLShareTest"); 

lpBase =(char*) MapViewOfFile ( 

hMapFile, 

FILE_MAP_ALL_ACCESS,
0,
0,
0 ) ;

lpBase中为sender的数据。

注:两个工程中的共享内存的名字是一样的。其他的是一些参数的设置。

 

3,此共享内存还必须有windows的权限,否则open的时候打不开;

void BuildWindowsSecuAttr( SECURITY_ATTRIBUTES *pSecuAttr, SECURITY_DESCRIPTOR *pSecuDesc )
{
DWORD aclLength;
PSID pAuthenticatedUsersSID = NULL;
PACL pDACL = NULL;
BOOL bResult = FALSE;
PACCESS_ALLOWED_ACE pACE = NULL;
SID_IDENTIFIER_AUTHORITY siaNT = SECURITY_NT_AUTHORITY;
SECURITY_INFORMATION si = DACL_SECURITY_INFORMATION;


/* 初始化Security Descriptor */
bResult = InitializeSecurityDescriptor( pSecuDesc, SECURITY_DESCRIPTOR_REVISION );

/* 获取认证用户组的sid */
bResult = AllocateAndInitializeSid( &siaNT, 1, SECURITY_AUTHENTICATED_USER_RID, 0, 0, 0, 0, 0, 0, 0, &pAuthenticatedUsersSID );

/* 计算DACL长度,并分配内存 */
aclLength = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + GetLengthSid(pAuthenticatedUsersSID); // add space for Authenticated Users group ACE
pDACL = (PACL)malloc( aclLength );

/* 初始化DACL */
bResult = InitializeAcl( pDACL, aclLength, ACL_REVISION);

/* 给认证用户组ACE添加到带有全部权限的DACL中 */
bResult = AddAccessAllowedAce( pDACL,
ACL_REVISION,
GENERIC_ALL,
//GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE,
pAuthenticatedUsersSID );

// bResult = SetSecurityDescriptorDacl( pSecuDesc, TRUE, pDACL, FALSE );
bResult = SetSecurityDescriptorDacl( pSecuDesc, TRUE, NULL, FALSE ); //pDACL参数传NULL表示建立NULL DACL,允许所有的访问

/* 初始化security attributes结构体 */
pSecuAttr->nLength = sizeof(SECURITY_ATTRIBUTES);
pSecuAttr->lpSecurityDescriptor = pSecuDesc;
pSecuAttr->bInheritHandle = FALSE;

}/*BuildWindowsSecuAttr()*/ SECURITY_ATTRIBUTES secuAttr;
SECURITY_DESCRIPTOR secuDesc;
BuildWindowsSecuAttr( &secuAttr, &secuDesc );

源地址:http://blog.renren.com/GetEntry.do?id=738862823&owner=51162544

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
跨进程访问共享内存的权限问题
关于Windows安全权限的学习
C语言中为文件设置安全属性(WIN)
如何设置DACL
50H($SECURITY
访问控制列表(ACL)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服