es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

OpenFileMapping siempre produce el error 5 (FILE_ACCESS_DENIED).

Estoy compartiendo memoria entre dos procesos y un controlador de kernel de Windows.

El Proceso A crea exitosamente el objeto de sección utilizando la protección PAGE_EXECUTE_READWRITE como se muestra a continuación:

auto hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE, 
        NULL,
        PAGE_EXECUTE_READWRITE,
        0,
        tamaño_real_virtual,
        nombre_de_sección
    );

A continuación, el controlador de kernel crea exitosamente un identificador para el objeto de sección (con accesos de lectura, escritura y ejecución), como se muestra a continuación:

status = ZwOpenSection(&handle_de_sección, FILE_SHARE_READ, &atributos);

status = ZwMapViewOfSection(handle_de_sección, NtCurrentProcess(), &base_mapeada, 0,
            tamaño_de_mapeo, NULL, &tamaño_de_mapeo, ViewShare, 0, PAGE_EXECUTE_READWRITE | PAGE_NOCACHE);

Mi problema ocurre cuando el Proceso B intenta abrir un identificador con acceso de lectura/escritura a esta sección de memoria compartida.

auto handle = OpenFileMapping(
                   FILE_MAP_WRITE | FILE_MAP_READ,
                   FALSE,
                   nombre_de_sección
);

En el proceso B, OpenFileMapping hace que GetLastError devuelva 5 (FILE_ACCESS_DENIED). OpenFileMapping solo tiene éxito si paso la protección FILE_MAP_READ por sí misma, pero estoy tratando de obtener tanto acceso de lectura como de escritura a la sección.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con los derechos de acceso otorgados a la sección de memoria compartida. El Proceso A y el controlador de kernel han creado y mapeado exitosamente a la sección con acceso de ejecución, lectura y escritura. Sin embargo, cuando el Proceso B intenta abrir un identificador con acceso de lectura/escritura a la misma sección de memoria compartida, se le niega el acceso.

    Para resolver este problema, debemos asegurarnos de que los derechos de acceso otorgados a la sección de memoria compartida sean consistentes en todos los procesos. Es posible que el Proceso B no esté ejecutándose con suficientes privilegios para acceder a la sección de memoria compartida con acceso de lectura/escritura. Es posible que necesitemos ajustar las configuraciones de seguridad o el token de acceso del Proceso B para otorgar los permisos necesarios.

    Adicionalmente, podemos verificar nuevamente los parámetros pasados a OpenFileMapping en el Proceso B para asegurarnos de que estén especificando correctamente los derechos de acceso deseados. También es posible que haya otro proceso o aplicación accediendo simultáneamente a la sección de memoria compartida, lo cual puede estar generando conflictos con los derechos de acceso deseados. En este caso, debemos coordinarnos con los otros procesos para asegurarnos de que estén administrando correctamente su acceso a la sección de memoria compartida.

Comments are closed.