FindFirstFile / FindNextFile Рекурсивный поиск, не находящий «программные файлы» - PullRequest
0 голосов
/ 16 ноября 2011

Я написал приложение на 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...