内存映射怎么可以跨用户共享使用?

xuxingok 2009-11-17 12:30:12
需要内存映射给不同的用户共同使用,可是不行~
hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"MYSHARE");
lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
有什么好办法啊
谢谢!
...全文
376 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jasonM2008 2009-11-24
  • 打赏
  • 举报
回复
来MARK此贴!
xuxingok 2009-11-24
  • 打赏
  • 举报
回复
谢谢大家!
问题解决!
蒋晟 2009-11-18
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20020813/13/936659.html
rendao0563 2009-11-17
  • 打赏
  • 举报
回复

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>

#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");

void main()
{
HANDLE hMapFile;
LPCTSTR pBuf;

hMapFile = OpenFileMapping(
FILE_MAP_ALL_ACCESS, // read/write access
FALSE, // do not inherit the name
szName); // name of mapping object

if (hMapFile == NULL)
{
printf("Could not open file mapping object (%d).\n",
GetLastError());
return;
}

pBuf = MapViewOfFile(hMapFile, // handle to mapping object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);

if (pBuf == NULL)
{
printf("Could not map view of file (%d).\n",
GetLastError());
return;
}

MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK);

UnmapViewOfFile(pBuf);

CloseHandle(hMapFile);
}

rendao0563 2009-11-17
  • 打赏
  • 举报
回复

#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
TCHAR szMsg[]=TEXT("Message from first process");

void main()
{
HANDLE hMapFile;
LPCTSTR pBuf;

hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // max. object size
BUF_SIZE, // buffer size
szName); // name of mapping object

if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE)
{
printf("Could not create file mapping object (%d).\n",
GetLastError());
return;
}
pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);

if (pBuf == NULL)
{
printf("Could not map view of file (%d).\n",
GetLastError());
return;
}


CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg));
getch();

UnmapViewOfFile(pBuf);

CloseHandle(hMapFile);
}
rendao0563 2009-11-17
  • 打赏
  • 举报
回复
#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
TCHAR szMsg[]=TEXT("Message from first process");

void main()
{
HANDLE hMapFile;
LPCTSTR pBuf;

hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // max. object size
BUF_SIZE, // buffer size
szName); // name of mapping object

if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE)
{
printf("Could not create file mapping object (%d).\n",
GetLastError());
return;
}
pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);

if (pBuf == NULL)
{
printf("Could not map view of file (%d).\n",
GetLastError());
return;
}


CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg));
getch();

UnmapViewOfFile(pBuf);

CloseHandle(hMapFile);
}
xuxingok 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangk 的回复:]
A.使用全局名称
B.设置所有用户可用的安全属性(CreateFileMapping的第二个参数)
[/Quote]

能说详细些吗
第二个参数怎么写?
havedown 2009-11-17
  • 打赏
  • 举报
回复
支持6楼。
MoXiaoRab 2009-11-17
  • 打赏
  • 举报
回复
#2很强大
oyljerry 2009-11-17
  • 打赏
  • 举报
回复
采用Global全局属性...
wangk 2009-11-17
  • 打赏
  • 举报
回复

A.使用全局名称
B.设置所有用户可用的安全属性(CreateFileMapping的第二个参数)
yangyang__ 2009-11-17
  • 打赏
  • 举报
回复
上面代码错了,直接拷了楼主的了,忘了改了,不好意思.
应该这样:

HANDLE hFile=CreateFile(...);
if(hFile!=0xFFFFFFFF)
{
hMapping=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0x100,"MYSHARE");
lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
}
yangyang__ 2009-11-17
  • 打赏
  • 举报
回复
用一个真实的文件作为后存存储器,而不是用页交换文件(0xFFFFFFFF).

HANDLE hFile=CreateFile(...);
if(hFile!=0xFFFFFFFF)
{
hMapping=
CreateFileMapping((HANDLE0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"MYSHARE");
lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
}

楼主试试行不行,我没有亲自动手实验过,不保证一定可行.
zyq5945 2009-11-17
  • 打赏
  • 举报
回复
Terminal Services: The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). Creating a file mapping object in the global namespace requires the SeCreateGlobalPrivilege privilege. For more information, see Kernel Object Namespaces.
hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"Global\\MYSHARE"); 
healer_kx 2009-11-17
  • 打赏
  • 举报
回复
marK,跨用户哎~

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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