Pergunta

Tenho notado que se o parâmetro de caminho para as metas de função CreateFile \Windows\System32\ a chamada está falhando com o seguinte ERROR_PATH_NOT_FOUND código de erro.

O caminho do arquivo está correto, eu sou o proprietário da pasta, então a questão é por que está falhando a chamada? Fez MS adicionar política especial proibindo a pasta de serem acessados?

Exemplo de código:

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;
}
Foi útil?

Solução

  1. Podemos ver alguns código de exemplo?
  2. Você especificada a unidade, ou seja, "C: \ Windows \ System32 \"
  3. Você está tentando abrir um system32 arquivo dentro?
  4. Será que isso ocorre apenas no Windows 7? e
  5. Por que você precisa para modificar qualquer coisa dentro system32 em primeiro lugar?

Billy3

Outras dicas

Se é um aplicativo de 32 bits rodando em um SO de 64 bits, em seguida, chamar Wow64DisableWow64FsRedirection () antes de sua chamada para CreateFile vai ler "C: \ Windows \ System32" em vez de "C: \ Windows \ Syswow64", que é provavelmente o que está acontecendo com você.

Usando o Windows XP ambos os administradores / contas padrão não requerem direitos administrativos para obter um alças do dispositivo.

Isso mudou no Vista, Windows 7 (UAC), onde você deve ter direitos de administrador para obter alças do dispositivo.

Algumas soluções são:

  1. Use um serviço
  2. Use COM elevação apelido
  3. Use Manifest

Nota: Se você só precisa de consulta de informação estatística de um dispositivo isto não requer direitos administrativos. Ao usar CreateFile(), especifique zero (0) para o dwDesiredAccess parâmetro.

Você está programa provavelmente precisa ser executado como administrador. Você vai ter que aumentar seus privilégios, mesmo se você for um administrador. Botão direito do mouse quando você executar o programa e clique em "Executar como Administrador", ou editar as propriedades e selecione sempre executar como administrador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top