Здравствуте. Начал разбираться с перехватом АПИ, на примере скрытия файлов, все прекрасно работает, в общем рад до безумия =) Решил сделать удобную структуру для хранения скрываемых файлов и функции для работы с ней, но вот... понять не могу как реализовать доконца. Ниже код того что наваял - но что-то мне подсказывает что совершенно неправильно все. И с последней функцией так и не разобрался как реализовать... Код (Text): typedef struct _FilesList { PVOID NextItem; ULONG FileNameLength; WCHAR FileName[1]; } TFilesList, *PFilesList; BOOLEAN FilesListIsAdded(PFilesList List, ULONG FileNameLength, WCHAR FileName[1]) { PFilesList Item = List; while (Item) { if (_wcsnicmphf(Item->FileName,FileName, FileNameLength) == 0) return TRUE; Item = Item->NextItem; } return FALSE; } void FilesListDelItem(PFilesList *List, ULONG FileNameLength, WCHAR FileName[1]) { PFilesList Item = *List; PFilesList Prev = NULL; while (Item) { if (_wcsnicmphf(Item->FileName,FileName, FileNameLength) == 0) { if (Prev) Prev->NextItem = Item->NextItem; else *List = Item->NextItem; ExFreePool(Item); return; } Prev = Item; Item = Item->NextItem; } return; } void FilesListFreePointers(PFilesList List) { PFilesList Item = List; PVOID Mem; while (Item) { Mem = Item; Item = Item->NextItem; ExFreePool(Mem); } return; } void FilesListAddItem(PFilesList *List, ULONG FileNameLength, WCHAR FileName[1]) { PFilesList wNewItem; wNewItem = ExAllocatePool(NonPagedPool, sizeof(TFilesList)); wNewItem->NextItem = *List; *List = wNewItem; wNewItem->FileNameLength= FileNameLength; wNewItem->FileName[FileNameLength] = FileName[FileNameLength]; return; }