Ошибка создания файла в Windows7
-
23-08-2019 - |
Вопрос
Я заметил, что если параметр 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;
}
Решение
- Можем ли мы посмотреть какой-нибудь пример кода?
- Вы указали диск, т.е."C:\Windows\System32 \"
- Вы пытаетесь открыть файл внутри system32?
- Происходит ли это только в Windows 7?и
- Зачем вам вообще нужно что-то изменять внутри system32?
Билли3
Другие советы
Если это 32-разрядное приложение, работающее на 64-разрядной ОС, то вызов Wow64DisableWow64FsRedirection() перед вызовом CreateFile приведет к чтению из "C:\Windows\System32" вместо "C:\Windows\Syswow64 ", что, вероятно, и происходит с тобой.
При использовании Windows XP как администраторам, так и стандартным учетным записям не требуются права администратора для получения дескрипторов устройств.
Это изменилось в Vista, Windows 7 (UAC), где у вас ДОЛЖНЫ быть права администратора для получения дескрипторов устройств.
Вот некоторые решения:
- Использовать сервис
- Используйте прозвище COM elevation
- Использовать Манифест
Примечание:Если вам нужно только запросить статистическую информацию с устройства, для этого не требуются права администратора.При использовании CreateFile()
, укажите ноль (0) для Желанный доступ параметр.
Ваша программа, вероятно, должна запускаться от имени администратора.Вам придется повысить свои привилегии, даже если вы являетесь администратором.Щелкните правой кнопкой мыши при запуске программы и выберите "Запуск от имени администратора" или отредактируйте свойства и выберите "Всегда запускаться от имени администратора".