IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

mémoire partagée entre deux services windows


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un cast explicite en LPCWSTR, c'est toujours suspect.

    De plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SECURITY_ATTRIBUTES  pSA;
    Évite les "p" quand ce n'est pas un pointeur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Mémoire partagée entre deux processus
    Par Sutat dans le forum ALM
    Réponses: 8
    Dernier message: 04/02/2012, 13h35
  2. Partage entre linux est windows
    Par koKoTis dans le forum Réseau
    Réponses: 5
    Dernier message: 25/10/2007, 23h07
  3. Mémoire partagée entre processus
    Par thierryG dans le forum Windows
    Réponses: 1
    Dernier message: 17/10/2007, 11h59
  4. Réponses: 1
    Dernier message: 31/01/2007, 10h00
  5. TList partagée entre deux process.
    Par swirtel dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/01/2005, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo