Pregunta

Me he dado cuenta de que si el parámetro de ruta a los objetivos de la función CreateFile \Windows\System32\ la llamada falla con el siguiente código de error ERROR_PATH_NOT_FOUND.

La ruta del archivo es correcta, yo soy el propietario de la carpeta, así que la pregunta es ¿por qué está fallando la llamada? MS no añadir política especial que prohíbe la carpeta desde la que se accede?

Código de ejemplo:

TCHAR szFile[MAX_PATH];
PathCombine(szFile, g_szSystemDirectory, "settings.ini");

HANDLE hFile = CreateFile(szFile,
                          GENERIC_READ,
                          0,
                          NULL,
                          OPEN_EXISTING,
                          0,
                          NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
    printf("INVALID FILE: %i", GetLastError());
    return FALSE;
}
¿Fue útil?

Solución

  1. ¿Podemos ver un código de ejemplo?
  2. ¿Ha especificado la unidad, es decir, "C: \ Windows \ System32 \"
  3. ¿Usted está intentando abrir un archivo dentro de system32?
  4. ¿Ocurre esto en sólo Windows 7? y
  5. ¿Por qué es necesario modificar nada en el interior system32 en el primer lugar?

Billy3

Otros consejos

Si se trata de una aplicación de 32 bits que se ejecuta en un sistema operativo de 64 bits, a continuación, llamar Wow64DisableWow64FsRedirection () antes de su llamada a CreateFile leerá de "C: \ Windows \ System32" en lugar de "C: \ Windows \ Syswow64", que es probablemente lo que le está pasando.

Uso de Windows XP tanto a los administradores / cuentas estándar no requieren derechos de administrador para obtener unos mangos del dispositivo.

Esto ha cambiado en Vista, Windows 7 (UAC) en el que debe tener derechos de administrador para obtener las manijas del dispositivo.

Algunas soluciones son:

  1. Utilizar un servicio
  2. Uso COM elevación apodo
  3. Uso Manifiesto

Nota: Si sólo necesita para consultar información estadística desde un dispositivo esto no requiere derechos de administrador. Al utilizar CreateFile(), especifique cero (0) para el dwDesiredAccess parámetro.

Usted es probablemente el programa necesita para funcionar como administrador. Vas a tener que escalar sus privilegios, incluso si usted es un administrador. Haga clic derecho cuando se ejecuta el programa y haga clic en "Ejecutar como Administrador", o editar las propiedades y seleccione siempre ejecutar como administrador.

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