Pregunta

Deseo poner en práctica IPC utilizando Named memoria compartida.

Para ello, uno de los pasos está recibiendo un identificador para un Asignación de memoria de objetos , con CreateFileMapping ().

Lo hago exactamente como el sitio web de 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();

Sin embargo, el mango devuelto es siempre 0x0 , y el error sistema de código devuelve es: 0x5 (. Acceso denegado)

  • Sólo Named Memory Sharing deseada (no compartir archivos).
  • Windows 7 x64 bit OS
  • derechos de usuario del administrador disponibles
  • aplicación desarrollada: 64 bits aplicación plug-in (. DLL)

¿Alguien tiene la misma experiencia, y una forma de solucionarlo, por favor? Yo uso de MSDN sitio como mi referencia, por lo que no creo, no hay problema en el código.

¿Fue útil?

Solución

Parece que no tienen suficientes privilegios.

A partir de MSDN:

Creación de un objeto de asignación de archivos en el espacio de nombres global de una sesión de otra de sesión de cero requiere la SeCreateGlobalPrivilege privilegio. por más información, véase el Kernel Object Los espacios de nombres.

...

La creación de un objeto de asignación de archivos en el espacio de nombres global, mediante el uso de CreateFileMapping, de una sesión aparte de sesión de cero es una operación privilegiada. Debido a esto, una aplicación que se ejecuta en un arbitraria Remota Host de sesión de Escritorio (RD sesión del servidor host) de sesión debe tener SeCreateGlobalPrivilege habilitar Para crear un objeto de asignación de archivos en el espacio de nombres global con éxito. La comprobación de privilegio se limita a la creación de objetos de asignación de archivos, y no se aplica a la abertura existente queridos. Por ejemplo, si un servicio o la sistema crea un objeto de asignación de archivos, cualquier proceso que se ejecuta en cualquier sesión de lata Acceso ese objeto de asignación de archivos a condición de que el usuario tiene la acceso necesario.

Otros consejos

Los administradores, servicios y servicios de red tienen SeCreateGlobalPrivilege por defecto. Usted debe recordar, sin embargo, de que Windows 7 / Vista no funciona todo como administrador. Así que utilice "Inicio como administrador" para hacer "Global \" trabajo para su aplicación. Si está depurando, inicie Visual Studio como administrador también.

Para crear asignaciones de archivo global necesita el permiso SeCreateGlobalPrivilege - tiene usted que? Acceso denegado implica que este es un problema de permisos, seguro.

La referencia a los servicios de terminal en la documentación sobre el espacio de nombres global es un poco engañoso ya que implica que sólo tendrá que preocuparse acerca de esto si usted tiene una situación inusual.

De hecho ambos servicios de IIS y ejecutar el sistema en sesión cero, y el primer / único usuario para iniciar sesión en carreras en la sesión 1 -. Lo que tiene que utilizar espacio de nombres global para la comunicación entre IIS o un servicio y un programa normal

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top