相关文章推荐
不要命的西装  ·  在notepad++等记事本使用正则表达式_ ...·  10 月前    · 
讲道义的米饭  ·  Vue ...·  1 年前    · 
气宇轩昂的椅子  ·  java程序启动后删除jar包会怎么样?_j ...·  1 年前    · 
玩篮球的跑步机  ·  【Linux】Shell脚本中的多任务并发执 ...·  2 年前    · 
Code  ›  用户模式和内核模式之间的共享内存开发者社区
共享内存
https://cloud.tencent.com/developer/ask/sof/112456108
纯真的鸵鸟
11 月前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 用户模式和内核模式之间的共享内存

Stack Overflow用户
提问于 2015-09-15 21:25:26
EN

我正在为Windows7编写一些内核端代码,以访问在用户模式下创建的共享内存,如建议的 这里 。

共享内存是在具有名称的用户空间中创建的:

代码语言: javascript
复制
"MySharedMem"

在用户空间中打开共享内存是可行的。

在内核模式下打开相同的共享内存,调用 ZwOpenSection 失败,返回:

代码语言: javascript
复制
#define STATUS_OBJECT_NAME_NOT_FOUND     ((NTSTATUS)0xC0000034L)

内核代码是:

代码语言: javascript
复制
NTSTATUS CModule1::OpenShared()
SIZE_T vs = 256;
WCHAR stringBuffer[] =  L"\\BaseNamedObjects\\MySharedMem";
UNICODE_STRING  sectionName;
RtlInitUnicodeString(&sectionName,stringBuffer);
OBJECT_ATTRIBUTES myAttributes;
InitializeObjectAttributes(&myAttributes,&sectionName,0,NULL,NULL);
NTSTATUS status0 = ZwOpenSection(&sectionHandle_,SECTION_MAP_READ|SECTION_MAP_WRITE,&myAttributes);
NTSTATUS status = ZwMapViewOfSection(&sectionHandle_, ZwCurrentProcess(), (PVOID *)&pSharedData_, 0, 0, NULL, &vs, ViewShare, 0, PAGE_READWRITE); 
return status;
}

我尝试了几个名称( L"\\MySharedMem" 或 L"MySharedMem" ),但我得到了其他错误,如 STATUS_OBJECT_PATH_INVALID 或 STATUS_OBJECT_PATH_NOT_FOUND 。

另外,由于 "Global\\MySharedMem" 不能工作,所以创建共享内存。

我做错了什么?

我试图在内核模式下创建共享内存,我在 ZwCreateSection 和 ZwMapViewOfSection 上获得了成功,但是当我访问pSharedData_指针来测试缓冲区时,我得到了访问冲突:

代码语言: javascript
复制
NTSTATUS CModule1::MapUserSection()
typedef struct SHARED_SECTION {DWORD i; };
NTSTATUS status = STATUS_SUCCESS;
ULONG Attributes=OBJ_KERNEL_HANDLE | OBJ_FORCE_ACCESS_CHECK;
OBJECT_ATTRIBUTES objectAttributes;
LARGE_INTEGER MaxSize;
SIZE_T ViewSize=sizeof(SHARED_SECTION);
MaxSize.QuadPart=sizeof(SHARED_SECTION);
WCHAR stringBuffer[] =  L"\\MySm2";
UNICODE_STRING  sectionName;
RtlInitUnicodeString(&sectionName,stringBuffer);
InitializeObjectAttributes(&objectAttributes,&sectionName,Attributes,NULL,NULL);
status= ZwCreateSection(&sectionHandle_,SECTION_ALL_ACCESS,&objectAttributes,&MaxSize,PAGE_READWRITE,SEC_COMMIT,NULL);
 
推荐文章
不要命的西装  ·  在notepad++等记事本使用正则表达式_win10上的支持正则表达式的记事本选择哪一个-CSDN博客
10 月前
讲道义的米饭  ·  Vue 单文件组件环境配置、开发和运行_书院二层楼的博客-CSDN博客
1 年前
气宇轩昂的椅子  ·  java程序启动后删除jar包会怎么样?_jar启动后删除jar_好烦吃不胖的博客-CSDN博客
1 年前
玩篮球的跑步机  ·  【Linux】Shell脚本中的多任务并发执行_一个脚本起多个进程的风险_镰刀韭菜的博客-CSDN博客
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号