Вопрос

Я заметил, что если параметр path к CreateFile функциональные цели \Windows\System32\ вызов завершается ошибкой со следующим кодом ошибки ERROR_PATH_NOT_FOUND.

Путь к файлу указан правильно, я являюсь владельцем папки, поэтому вопрос в том, почему происходит сбой вызова?Добавила ли MS специальную политику, запрещающую доступ к папке?

Пример кода:

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;
}
Это было полезно?

Решение

  1. Можем ли мы посмотреть какой-нибудь пример кода?
  2. Вы указали диск, т.е."C:\Windows\System32 \"
  3. Вы пытаетесь открыть файл внутри system32?
  4. Происходит ли это только в Windows 7?и
  5. Зачем вам вообще нужно что-то изменять внутри system32?

Билли3

Другие советы

Если это 32-разрядное приложение, работающее на 64-разрядной ОС, то вызов Wow64DisableWow64FsRedirection() перед вызовом CreateFile приведет к чтению из "C:\Windows\System32" вместо "C:\Windows\Syswow64 ", что, вероятно, и происходит с тобой.

При использовании Windows XP как администраторам, так и стандартным учетным записям не требуются права администратора для получения дескрипторов устройств.

Это изменилось в Vista, Windows 7 (UAC), где у вас ДОЛЖНЫ быть права администратора для получения дескрипторов устройств.

Вот некоторые решения:

  1. Использовать сервис
  2. Используйте прозвище COM elevation
  3. Использовать Манифест

Примечание:Если вам нужно только запросить статистическую информацию с устройства, для этого не требуются права администратора.При использовании CreateFile(), укажите ноль (0) для Желанный доступ параметр.

Ваша программа, вероятно, должна запускаться от имени администратора.Вам придется повысить свои привилегии, даже если вы являетесь администратором.Щелкните правой кнопкой мыши при запуске программы и выберите "Запуск от имени администратора" или отредактируйте свойства и выберите "Всегда запускаться от имени администратора".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top