Question

Je tiens à mettre en œuvre IPC utilisant Named la mémoire partagée.

Pour ce faire, l'une des étapes est Démystifier à une Cartographie mémoire objet , en utilisant CreateFileMapping ().

Je fais exactement comme site MSDN reccommends: http://msdn.microsoft.com/en-us/library/aa366551 (v = VS.85) .aspx :

hFileMappingHandle = CreateFileMapping
    (
        INVALID_HANDLE_VALUE,      // use paging file
        NULL,                      // default security 
        PAGE_READWRITE,            // read/write access
        0,            // maximum object size (high-order DWORD) 
        256,            // maximum object size (low-order DWORD)  
        "Global\\MyFileMappingObject"          // name of mapping object
    ); 
DWORD dwError = GetLastError();

Cependant, la poignée de retour est toujours 0x0 et Système de code d'erreur retour est: 0x5 (. Accès refusé)

  • seulement Nommé partage mémoire souhaité (non le partage de fichiers).
  • Windows 7 x64 bit OS
  • Administrateur de droits d'utilisateur disponibles
  • Application développée: 64bit application plug-in (. Dll)

Quelqu'un at-il la même expérience, et un moyen de le réparer, s'il vous plaît? J'utilise le site MSDN comme ma référence, donc je ne pas penser, dans le code il y a un problème.

Était-ce utile?

La solution

On dirait que vous n'avez pas assez de privilèges.

De MSDN:

  

Création d'un objet de mappage de fichier dans le   espace de noms global d'une session autre   que la session zéro exige la   privilège SeCreateGlobalPrivilege. Pour   plus d'informations, consultez le noyau objet   Namespaces.

     

...

     

La création d'un objet de mappage de fichier   dans l'espace de noms global, en utilisant   CreateFileMapping, d'une session   autre que la session zéro est un   opération privilégiée. À cause de ce,   une application en cours d'exécution dans un arbitraire   À distance de session Bureau hôte (RD   Session session du serveur hôte) doit avoir   SeCreateGlobalPrivilege activé   afin de créer un objet de fichier de mappage   dans l'espace de noms global avec succès.   Le contrôle de privilège est limitée à la   création d'objets de mappage de fichier, et   ne s'applique pas à l'ouverture existante   les. Par exemple, si un service ou   système crée un objet de mappage de fichier,   tout processus en cours d'exécution dans une boîte session   accéder à cet objet fichier de mappage   à condition que l'utilisateur a le   l'accès nécessaire.

Autres conseils

Les administrateurs, services et services de réseau ont SeCreateGlobalPrivilege par défaut. Vous devez vous rappeler cependant, que Windows7 / Vista ne fonctionne pas tout en tant qu'administrateur. Il faut donc utiliser « Démarrer en tant qu'administrateur » pour faire « Global \ » travail pour votre application. Si vous le débogage, démarrez Visual Studio en tant qu'administrateur aussi.

Pour créer le mappage des fichiers globaux dont vous avez besoin le privilège de SeCreateGlobalPrivilege - avez-vous cela? accès refusé implique ceci est un problème d'autorisations, bien sûr.

La référence aux services Terminal Server dans la documentation sur l'espace de noms global est un peu trompeur car il implique que vous ne devez vous préoccuper de cela si vous avez une situation inhabituelle.

En fait les services IIS et système d'exécution en session zéro, et le premier / seul utilisateur à ouvrir une session sur les pistes en session 1 -. De sorte que vous devez utiliser l'espace de noms global pour communiquer entre IIS ou un service et un programme normal

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top