Народ подскажите плз как спрятать файл в винде (можно под админом), только так чтобы после выхода из проги он был по-прежнему невидим (т.е. перехват API не катит), а потом надо при нажатии другой кнопки на форме сделать его видимым.
сформулируй по русски от кого ты собрался его прятать пока из твоей формулировки ясно , что сделать это проще простого - закрой глаза и будет тебе файл невидимый
Если файловая система NTFS то создай дополнительный поток в любом файле. А при нажатии твоей клавиши создавай файл и копируй в него этот поток. Работа с потоками есть на сайте sysinternals. Создать свой поток можно хоть с ком.строки.
ни от кого я прятать не собираюсь - надо чтоб файл был, но его файловые менеджеры не видели (при этом папка как была такой она должна остаться - на другие объекты папки это не должно влиять). Затем при нажатии на кнопку Сделать видимым (в моей проге) - всё должно быть как до этого, т.е. - файл виден.
А по-поводу потоков: при этом характеристики любых других файлов не дожны меняться - а если копировать в поток - то возрастёт размер. И вообще кроме того файла кот необходимо спрятать вообще может ничего не быть.
Я тут на днях дривер писал и долго не мог понять почему это я объект 'device' не могу открыть. Потом догнал что я длину в RTL_STRING неправильно установил и у меня название на 0 заканчивалось. Кернелу и сайсу по барабану а CreateFile обламывается. Предлагаю заюзать native api и создать такой же файл с 0 в середине. Юзать native api можно из ntdll из юзермода так что драйвер писать не надо
vns955 Учите матчасть: "размер файла" в ntfs — это размер неименованного потока $DATA, остальные потоки "не видно" совершенно стандартными средствами.
ravenX брось плз ссылку где мона почитать про native api и ntdll (жел-но на русском и примерами кода) Чуть не забыл - если так делать, то при этом другие проги не смогут обращаться к этому файлу? мне надо чтобы это не влияло на работу других прог - только сделать невидимый файл и всё!
Нет, наоборот, все будут видеть, но читать не смогут. А тебе нужно только чтобы ФМ не видели, а остальные проги работали? Как ты себе это представляешь? Тут только перехватывать и смотреть, кто запрашивает файл, имхо.
IceStudent ну да - ты правильно понял - чтобы ФМ не видели. Перехватывать нельзя т.к. заказчик требует чтобы когда прогу закрываешь - они также невидимы. А что т.к. предлагал ravenX нельзя (создать файл с 0 в имени)?
т.е. есть некий файл Secret.dat, который не показывается в Проводнике (Explorer.exe), Far (Far.exe), TC (TotalCmd.exe) etc, а твоя прога его при этом видит, при этом после закрытия проги этот файл не видит никто? в таком случае лучше идти от обратного - кто может видеть файл? только твоя прога? тогда зачем этот файл хранить в открытом виде, если кроме твоей проги его всё равно никто не видит? приведи конкретный пример. чего _конкретно_ хочет заказчик? чтобы Secret.dat видела только твоя прога или ?
Я должен сделать прогу, в кот. есть две кнопки "Сделать невидимым" и "Сделать видимым". При нажатии на первую некий файл (путь к которому и имя будет указано в EditBox) становится невидим для стандартных ФМ (ехплорер, фар, тотал). Затем при выходе из неё - он также невидим. При этом все проги, которым нужен доступ к этому файлу имеют такой же доступ и используют его как и раньше (например это может быть даже файл системный). Затем я снова запускаю прогу и нажимаю на вторую кнопку - теперь он видим из ФМ.
C:\>echo GOOD >hello.txt:shadow C:\>more <hello.txt:shadow GOOD C:\> Ты создаешь поток shadow и записываешь в него данные. Поток идентифицируется через ":". Так сделали для того чтоб не менять API. Это работает лишь на NTFS.
DelExe Jupiter Ему нужно, чтобы файл не показывали стандартные файловые менеджеры. То есть, по сути, нужно скрывать от их FindFirstFile/FindNextFile. При этом другие проги могут работать с файлом: CreateFile должен отрабатывать нормально.
Блин, а чем обычные апихуки не катят? Это просто реализуется в драйвере и надежно работает. Приведу даже код обработчика ZwQueryDirectoryFile (скрытые файлы не палятся даже прогой flister). [] Из этого кода вызывается функция RkIsTrueProcess проверяющая, может ли процесс видеть скрытые файлы и функция RkIsFileHidden проверяющая, является ли файл скрытым.