Vings Thèse, Antithèse, Charentaises | Bonjour,
J'ai codé une interface graphique (C# utilisant une dll C++) qui doit interagir avec un programme en c++ via une mémoire partagée (CreateFileMapping et openFilemapping). Les deux sont configurés en service windows (compte système local), avec l'option "interragir avec le bureau" cochée pour mon interface (sinon elle ne s'affiche pas). Mon problème est qu'ils n'arrivent pas à communiquer ensemble (alors que c'était le cas quand mon Interface était une application et que j'avais une application tiers qui déclenchait le filemapping).
Mes recherches ne trouvent rien de probant, sachant que la solution provisoire qui consiste à utiliser un autre compte système ne peut être utilisée car j'aurai toujours besoin de l'option "interragir avec le bureau" qui ne semble pas pouvoir être validée avec ce cas de figure.
J'ai tenté d'utiliser le paramètre LPSECURITY_ATTRIBUTES de la fonction createFileMapping(car j'ai appris que si il était à NULL, mes programmes ne pourraient communiquer) , pour insérer un descripteur de securité, mais je suppose qu'il est incomplet vu l'echec de ma tentative de les faire communiquer entre eux.
Code :
- Sur le program qui crée le filemapping
- LPSECURITY_ATTRIBUTES ClassTest::lpAttributes=MakeSA();//lp
- HANDLE ClassTest::hExchangeRW=CreateFileMapping(INVALID_HANDLE_VALUE,
- lpAttributes ,
- PAGE_READWRITE, // Lecture - écriture
- 0,
- SIZE_BUFFER, // 4ko
- (LPCWSTR)fileMappingDataRW);
- bool Classtest::createSecurityDescriptor(SECURITY_ATTRIBUTES *pSA)
- {
- TCHAR * szSD = TEXT("(A;OICI;GRGWGX;;;AU)" ) // Allow
- // read/write/execute
- // to authenticated
- // users
- // Allow
- // read/write/execute
- // to authenticated
- // users
- if (NULL == pSA)
- return FALSE;
- return ConvertStringSecurityDescriptorToSecurityDescriptor(
- szSD,
- SDDL_REVISION_1,
- &(pSA->lpSecurityDescriptor),
- NULL);
- }
- LPSECURITY_ATTRIBUTES ClassTest::MakeSA()
- {
- SECURITY_ATTRIBUTES pSA;
- LPSECURITY_ATTRIBUTES pSB;
- if(!createSecurityDescriptor(&pSA))
- {
- cout<<"problem in making security attribute"<<endl;
- }
- pSB= (LPSECURITY_ATTRIBUTES)(&pSA);
- return pSB;
- }
- //L'autre qui écrit lit sur la mémoire partagée
- hExchangeRW= OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (LPCWSTR)fileMappingDataRW);
- exchangeSpaceRW=(char *)MapViewOfFile(hExchangeRW, FILE_MAP_ALL_ACCESS, 0,0, size_buffer);
|
En espérant recueillir vos lumières
Merci d'avance! Message édité par Vings le 24-07-2009 à 12:33:37
|