我正在为Windows7编写一些内核端代码,以访问在用户模式下创建的共享内存,如建议here。 共享内存在用户空间中创建,名称为:
"MySharedMem"
打开用户空间中的共享内存
在内核模式下打开相同的共享内存,调用ZwOpenSection
将无法返回:
#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L)
内核代码是:
NTSTATUS CModule1::OpenShared()
{
SIZE_T vs = 256;
WCHAR stringBuffer[] = L"\\BaseNamedObjects\\MySharedMem";
UNICODE_STRING sectionName;
RtlInitUnicodeString(§ionName,stringBuffer);
OBJECT_ATTRIBUTES myAttributes;
InitializeObjectAttributes(&myAttributes,§ionName,0,NULL,NULL);
NTSTATUS status0 = ZwOpenSection(§ionHandle_,SECTION_MAP_READ|SECTION_MAP_WRITE,&myAttributes);
NTSTATUS status = ZwMapViewOfSection(§ionHandle_, 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
。
同时创建共享内存为{{ 1}}不起作用。
我做错了什么?
我尝试在内核模式下创建共享内存,我在"Global\\MySharedMem"
和ZwCreateSection
上取得了成功,但是当我访问pSharedData_指针来测试缓冲区时,我得到了访问冲突:
ZwMapViewOfSection
一切都失败了......