阅读:809回复:0
共享内存的问题,请大家帮帮忙!
我接触驱动编程不久,最近读了FileDisk的源代码,希望能稍加修改,实现我自己的一些功能。
我的目的是想在驱动和自己写的用户程序之间创建一块共享内存。以后每次在驱动处理读写操作时,都将irp包中的读写参数(文件偏移量,读写的字节数等)写到共享内存中,然后通知用户程序来读取。 /////////////////////////////////////////////////////////////// // 首先,我在用户程序中创建了一个内存映射文件 g_hFileMap = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 64 * 1024, // 64kB TEXT("MemShared")); if (g_hFileMap == NULL) { AfxMessageBox("Can't create file mapping."); return FALSE; } ///////////////////////////////////////////////////////////////////////////////////////// // 然后,在Filedisk的FileDiskThread()函数中 在处理读操作的irp包时,即在源代码的: switch(io_stack->MajorFunction) { case IRP_MJ_READ: 里添加了以下的代码: OBJECT_ATTRIBUTES objectAttributes; UNICODE_STRING ustrMemShared; WCHAR MemSharedName[] = L"\\BaseNamedObjects\\MemShared"; //============= // 打开共享内存 //============= RtlInitUnicodeString(&ustrMemShared, MemSharedName); InitializeObjectAttributes( &objectAttributes, &ustrMemShared, OBJ_CASE_INSENSITIVE, NULL, NULL); status = ZwOpenSection(&hFileMap, SECTION_ALL_ACCESS, &objectAttributes); if (status != STATUS_SUCCESS) { irp->IoStatus.Status = status; irp->IoStatus.Information = 0; break; } //============== // Map View //============== pData = NULL; viewSize = 0; offset.QuadPart = 0; status = ZwMapViewOfSection( hFileMap, (HANDLE) -1, &pData, 0L, 0, NULL, // section offset 0, // view size, 0, // how the view is to be shared by a child process 0, PAGE_READWRITE); if (status != STATUS_SUCCESS) { // ! 问题出在这里, 调用ZwMapViewOfSection()的结果,status = ‘参数错误’ // why ??? 帮我找找原因 !! irp->IoStatus.Status = status; irp->IoStatus.Information = 0; ZwClose(hFileMap); break; } 请大家帮我看看为什么调用ZwMapViewOfSection()会产生这样的结果。拜托,先谢谢了! |
|