mémoire partagée entre deux services windows
Bonjour,
J'ai deux programmes implémentés comme service windows, l'un une interface graphique et l'autre un programme qui créer un fichier de mémoire partagée et réactualise les données.
Les deux sont codés en C++ (l'interface est en C# mais utilise une dll C++ pour utiliser les fonctions de partages de mémoire (OpenFileMapping etc...)) et marchaient parfaitement lorsqu'il étaient de simple applications. Maintenant que je les inclus dans les services windows, ils ne veulent plus communiquer ensemble.
Après quelques lecture, notamment ce topic: http://www.developpez.net/forums/d38...ice-processus/
Je me suis mis à créer un DACL à partir des exemples proposés sur la MSDN. Mais rien ne change! mon initiative est très probablement parcellaire, mais je ne sais pas comment la compléter, malgré mes recherches et tentatives.
Si vous avez des conseils à me donner, je suis preneur!
Le code:
Le programme qui créé le filemapping
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
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::createDACL(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(!createDACL(&pSA))
{
cout<<"problem in making security attribute"<<endl;
}
pSB= (LPSECURITY_ATTRIBUTES)(&pSA);
return pSB;
}
//L'openfile mapping executé par l'interface
hExchangeRW= OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (LPCWSTR)fileMappingDataRW);
hExchangeWR= OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (LPCWSTR)fileMappingDataWR);
exchangeSpaceRW=(char *)MapViewOfFile(hExchangeRW, FILE_MAP_ALL_ACCESS, 0,0, size_buffer);
exchangeSpaceWR=(char *)MapViewOfFile(hExchangeWR, FILE_MAP_ALL_ACCESS, 0,0, size_buffer |
je peux également ajouter le code de l'interface si besoin est.
Merci d'avance!