C ++ - Как читать системные файлы - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь найти файл, который начинается с "silabs-cdc" в "C:\\Windows\\System32\\DriverStore\\FileRepository"

DIR *dir;
struct dirent *ent;
if ((dir = opendir(path.c_str())) != NULL) { // FAILED
    while ((ent = readdir(dir)) != NULL) 
    {
         std::string fln = ent->d_name;
         if(fln.substr(0,10) == "silabs-cdc")
         {
               // I found it
               break;
         }
    }

    closedir(dir);
}

, но в Windows Vista opendir всегда заканчивается ошибкой, поскольку папка не существует (но этосуществует!), windows xp, windows 10 работает просто отлично. Я также попробовал функцию findfirstfile , но тот же результат.

Есть ли защита системной папки? Возможно ли пройти через это - программно?

Кстати: не системные папки работают нормально, путь к папке правильный

РЕДАКТИРОВАТЬ: запуск программы от имени администратора ничего не сделает

1 Ответ

2 голосов
/ 11 октября 2019

Исходя из нашего обмена комментариями , похоже, что в Vista вы создали 32-битный исполняемый файл, но драйверы были установлены как 64-битные драйверы. Функция перенаправления WOW64 означает, что даже если вы пытались открыть путь в C:\Windows\System32, вы фактически открыли путь в C:\Windows\SysWOW64. Вы можете явно отключить перенаправление , или вы можете создать свой исполняемый файл так, чтобы он соответствовал разрядности системы, поскольку 64-битный исполняемый файл не будет подвергаться перенаправлению.

...