Привет всем! Скрываю файлы перехватом NtQueryDirectoryFile. Вроде все работает, но не так, как надо. Вот кусок кода перехватчика. Здесь программа смотрит в связанный список путей, которые нужно скрывать. Проблема в том, что если в список занести два почти одинаковых имени (идущих подряд), например, File и File1, то скроется только File, а File1 останется видимым. Пробовал заносить в список File, File1, File2. При этом File и File2 скрываются, а File1 нет. Такое ощущение, будто код "перескакивает" через File1. Кто-нибудь сталкивался? Как можно решить эту проблему? Код (Text): case FileBothDirectoryInformation: FileBothDirectoryInfo = NULL; do { LastFileBothDirectoryInfo = FileBothDirectoryInfo; FileBothDirectoryInfo = (PFILE_BOTH_DIRECTORY_INFORMATION)((ULONG)FileInformation + Offset); FileBothDirectoryInfo->FileName[FileBothDirectoryInfo->FileNameLength / sizeof(wchar_t)] = 0; //Выделяем память для формирования полного пути к файлу SIZE_T neededSize = (wcslen(pFullPath->Buffer) + wcslen(FileBothDirectoryInfo->FileName) + 2) * 2; wchar_t *pTempBuffer = (wchar_t *)ExAllocatePool(PagedPool, neededSize); RtlZeroMemory(pTempBuffer, neededSize); //Формируем полный путь к файлу //pFullPath инициализируется ранее как родительская //директория для файла с именем FileBothDirectoryInfo->FileName wcscpy(pTempBuffer, pFullPath->Buffer); wcscat(pTempBuffer, L"\\"); wcscat(pTempBuffer, FileBothDirectoryInfo->FileName); //Проверяем, есть ли путь в связанном списке if (func_check_file_hiding(pTempBuffer)) { // Путь есть => изменяем структуру if (!FileBothDirectoryInfo->NextEntryOffset) { if (LastFileBothDirectoryInfo) { LastFileBothDirectoryInfo->NextEntryOffset = 0; } else { status = STATUS_NO_SUCH_FILE; } return status; } else { if (LastFileBothDirectoryInfo) { LastFileBothDirectoryInfo->NextEntryOffset += FileBothDirectoryInfo->NextEntryOffset; } } } ExFreePool(pTempBuffer); Offset += FileBothDirectoryInfo->NextEntryOffset; } while (FileBothDirectoryInfo->NextEntryOffset); break;