FileMapping et service Windows

FileMapping et service Windows - API Win32 - Programmation

Marsh Posté le 24-07-2009 à 11:13:41    

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 :
  1. Sur le program qui crée le filemapping
  2. LPSECURITY_ATTRIBUTES  ClassTest::lpAttributes=MakeSA();//lp
  3. HANDLE ClassTest::hExchangeRW=CreateFileMapping(INVALID_HANDLE_VALUE, 
  4.                                                                                                                          lpAttributes ,
  5.                                                                                                                          PAGE_READWRITE, // Lecture - écriture
  6.                                                                                                                          0,
  7.                                                                                                                          SIZE_BUFFER,   // 4ko
  8.                                                                                                                          (LPCWSTR)fileMappingDataRW);
  9. bool Classtest::createSecurityDescriptor(SECURITY_ATTRIBUTES  *pSA)
  10. {
  11.      TCHAR * szSD =  TEXT("(A;OICI;GRGWGX;;;AU)" ) // Allow  
  12.                                      // read/write/execute  
  13.                                      // to authenticated  
  14.                                      // users
  15.       // Allow  
  16.                                      // read/write/execute  
  17.                                      // to authenticated  
  18.                                      // users
  19.     if (NULL == pSA)
  20.         return FALSE;
  21.      return ConvertStringSecurityDescriptorToSecurityDescriptor(
  22.                 szSD,
  23.                 SDDL_REVISION_1,
  24.                 &(pSA->lpSecurityDescriptor),
  25.                 NULL);
  26. }
  27. LPSECURITY_ATTRIBUTES ClassTest::MakeSA()
  28. {
  29. SECURITY_ATTRIBUTES  pSA;
  30. LPSECURITY_ATTRIBUTES pSB;
  31. if(!createSecurityDescriptor(&pSA))
  32. {
  33.         cout<<"problem in making security attribute"<<endl;
  34. }
  35. pSB= (LPSECURITY_ATTRIBUTES)(&pSA);
  36. return pSB;
  37. }
  38. //L'autre qui écrit lit sur la mémoire partagée
  39.         hExchangeRW= OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (LPCWSTR)fileMappingDataRW);
  40.         exchangeSpaceRW=(char *)MapViewOfFile(hExchangeRW, FILE_MAP_ALL_ACCESS, 0,0, size_buffer);


 
En espérant recueillir vos lumières  :bounce:
 
Merci d'avance!


Message édité par Vings le 24-07-2009 à 12:33:37
Reply

Marsh Posté le 24-07-2009 à 11:13:41   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed