Pregunta

El uso de ventanas engancha envío mensajes a mi solicitud, que se notifican los eventos de Windows por cada aplicación en el sistema.

Para ejecutar el mariscal de los parámetros del mensaje, yo uso memorias compartidas. El proceso externo llama DuplicateHandle , pero para compartir el mango con mi instancia de la aplicación, deberá llamar OpenProcess los requisitos de privilegio PROCESS_DUP_HANDLE.

En realidad, cada aplicación es capaz de enviar mensajes a través de esta arquitectura, aunque necesite para permitir SeDebugPrivilege al proceso externo. En realidad funciona, excepto por el proceso de 'explorador', que no tiene el símbolo SeDebugPrivilege ...

La documentación de AdjustTokenPrivileges afirma:

  

La función AdjustTokenPrivileges no puede agregar nuevos privilegios para el token de acceso. Sólo se puede activar o desactivar los privilegios de tokens existentes. Para determinar los privilegios de la Señal, llamar a la función GetTokenInformation.

Entonces, la pregunta es ... cómo agregar el testigo al 'explorador' proceso SeDebugPrivilege, o alternativamente, cómo permitir proceso de 'explorador' a OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId) llamada?

¿Fue útil?

Solución

No entiendo por qué no se utiliza nombre memoria compartida. Si los objetos de memoria compartida tiene un nombre, a continuación, estos objetos se pueden abrir sin el uso de DuplicateHandle.

Si usted tiene que usar DuplicateHandle y necesita ser capaz de utilizar dentro de cualquier proceso OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId) Me parece que se debe no utilizar SeDebugPrivilege. En lugar de que usted debe conceder el permiso de PROCESS_DUP_HANDLE a todos por el proceso con pId. Si crea un proceso que puede especificar descriptor de seguridad. Si el proceso ya se ha creado puede utilizar OpenProcess, GetSecurityInfo (ver http: // msdn.microsoft.com/en-us/library/aa446654.aspx ) y SetSecurityInfo para modificar descriptor de seguridad del proceso.

Para probar este método sólo puede iniciar Process Explorer (ver http: / /technet.microsoft.com/en-us/sysinternals/bb896653.aspx ) con derechos administrativos, abierta ficha seguridad del proceso seleccionado (proceso con pId) y modificar su descriptor de seguridad. Después de que todos los procesos podrán utilizar sin OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId) para habilitar SeDebugPrivilege.

Otros consejos

Es esto lo que estamos tratando de lograr?

  1. Crear un bloque de memoria compartida en el proceso de "externo".
  2. Uso DuplicateHandle para crear un identificador para que la memoria de la aplicación
  3. Utilice un mensaje de ventana para enviar el valor de identificador de la aplicación
  4. Acceder a la memoria compartida de la aplicación

Si he entendido bien, entonces no es necesario abrir la palanca para el proceso de solicitud en absoluto. En su lugar, acaba de dar el segmento de memoria compartida un nombre determinista, como SharedMem_XXX donde XXX es el PID del proceso externo. A continuación, enviar el PID para la aplicación mediante un mensaje de ventana. A continuación, puede volver a crear el nombre y utilizarlo para abrir el segmento de memoria compartida.

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