2010-04-12 51 views
0

使用win32api,我希望以下程序创建两个进程并创建一个filemap。 (使用c + +)CreateFileMapping MapViewOfFile

我不知道我应该写在Handle CreateFileMapping(...。 我已经尝试过:

PROCCESS_INFORMATION hfile. 

此外,第一个参数是INVALID_HANDLE_VALUE,但后来我不知道该怎么写进去MapViewOfFile作为第一个参数。

从第一程序代码:(我没有编程的2 & 3,因为即使是第一次不工作)

//Initial process creates proccess 2 and 3 

#include <iostream> 
#include <windows.h> 
#include <string> 

using namespace std; 

void main() 
{ 

bool ret; 
bool retwait; 
bool bhandleclose; 

STARTUPINFO startupinfo; 
GetStartupInfo (&startupinfo); 

PROCESS_INFORMATION pro2info; 
PROCESS_INFORMATION pro3info; 

//create proccess 2 
wchar_t wcsCommandLine[] = L"D:\\betriebssystemePRA2pro2.exe"; 


ret = CreateProcess(NULL, wcsCommandLine, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, 
    NULL, &startupinfo, &pro2info); 


if (ret==false){ 
    cout<<"Prozess konnte nicht erzeugt werden. Fehler:"<<GetLastError(); 
    ExitProcess(0); 
} 

//*************** 


//create process3 

wchar_t wcs2CommandLine[] = L"D:\\betriebssystemePRA2pro3.exe"; 


ret = CreateProcess(NULL, wcs2CommandLine, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, 
    NULL, &startupinfo, &pro3info); 


if (ret==false){ 
    cout<<"Prozess konnte nicht erzeugt werden. Fehler:"<<GetLastError(); 
    ExitProcess(0); 
} 



//*************** 



//create mapping object 

// program2: 




PROCESS_INFORMATION hfile; 





    CreateFileMapping( //erzeugt filemapping obj returned ein handle 
    INVALID_HANDLE_VALUE, //mit dem handle-->kein seperates file nötig 
    NULL, 
    PAGE_READWRITE, //rechte (lesen&schreiben) 
    0, 
    5, 
    L"myfile"); //systemweit bekannter name 


    LPVOID mappointer = MapViewOfFile(//virtuelle speicherraum, return :zeiger, der auf den bereich zeigt 
    INVALID_HANDLE_VALUE, //handle des filemappingobj. 
    FILE_MAP_ALL_ACCESS, 
    0, 
    0, 
    100); 



    //wait 
    cout<<"beliebige Taste druecken"<<endl; 
    cin.get(); 


//close 


bool unmap; 

unmap = UnmapViewOfFile (mappointer); 

if (unmap==true) 
    cout<<"Unmap erfolgreich"<<endl; 
else 
    cout<<"Unmap nicht erfolgreich"<<endl; 


bhandleclose=CloseHandle (INVALID_HANDLE_VALUE); 
cout<<bhandleclose<<endl; 

bhandleclose=CloseHandle (pro2info.hProcess); 
bhandleclose=CloseHandle (pro3info.hProcess); 


ExitProcess(0); 


} 

回答

2

MapViewOfFile需要返回的句柄通过的CreateFileMapping:

HANDLE hFileMapping = CreateFileMapping(...); 
LPVOID lpBaseAddress = MapViewOfFile(hFileMapping, ...); 
1

您需要传递返回值CreateFileMapping作为MapViewOfFile的第一个参数。而且,MapViewOfFile中映射的字节数应该足够小,以使视图不超过文件本身。

HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 
            0, 5, L"myfile"); 

LPVOID mappointer = MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 5); 
相关问题