Ошибка CreateFile в Windows7 - PullRequest
       27

Ошибка CreateFile в Windows7

0 голосов
/ 20 мая 2009

Я заметил, что, если параметр пути к функции 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;
}

Ответы [ 4 ]

2 голосов
/ 21 декабря 2011

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

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

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

  1. Воспользуйтесь услугой
  2. Использовать обозначение возвышения COM
  3. Использовать манифест

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

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

Billy3

2 голосов
/ 14 января 2010

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

0 голосов
/ 20 мая 2009

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

...