Я написал приложение на C, которое использует Windows API FindFirstFile / FindNextFile для рекурсивного поиска в каталогах, начиная с C :.Он успешно проходит через файловую систему, находит и ищет все подкаталоги, но не может найти каталог «Program Files».
Есть ли проблема с разрешением, которую я здесь пропускаю?Следует отметить, что запущенное приложение находится в контексте учетной записи SYSTEM, которая является учетной записью с разрешениями для доступа к «Программным файлам».
Кто-нибудь еще сталкивался с этим?Я довольно долго искал ответ на этот вопрос, но пока не нашел окончательной причины для такого поведения.
Вот код, который я использую для поиска в каталогах:
static void SearchDirectory(PCHAR pszDirectory)
{
CHAR szSearch[MAX_PATH] = {0};
CHAR szDirectory[MAX_PATH] = {0};
HANDLE hFind = NULL;
WIN32_FIND_DATAA FindFileData;
sprintf_s(szSearch, MAX_PATH, "%s%s", pszDirectory, "*");
hFind = FindFirstFileA(szSearch, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) return;
do {
// Do file processing here etc
if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && strcmp(FindFileData.cFileName, ".") != 0
&& strcmp(FindFileData.cFileName, "..") != 0) {
sprintf_s(szDirectory, MAX_PATH, "%s%s\\", pszDirectory, FindFileData.cFileName);
SearchDirectory(szDirectory);
}
} while(FindNextFileA(hFind, &FindFileData));
FindClose(hFind);
}