Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+6 невидимых) |
![]() |
eXeL@B —› Программирование —› nfts ..:exec |
Посл.ответ | Сообщение |
|
Создано: 19 августа 2008 16:25 · Поправил: flamer · Личное сообщение · #1 Доброго здоровья! Наткнулся на проблемку при работе с потоками ntfs Дано Создание -- элементарнийший пример cmd-скриптик test.cmd
В результате файлик '..', который не имеет короткого имени. К тому же он является тёзкой [родительского каталога]. Подгрузка -- CreateProcess в руки Удаление.... А вот с удалением ни как не разбирусь. Вызовы DeleteFile ('..') ; DeleteFile('..:'); возвращаются с пятой ошибкой (Access Denied). Ожидал, конечно, но... Возникает вопрос как можно удалить этот "хост-файл", у которого имя - '..' либо, как создать короткое имя для файла, у которого его не было. Я бы поверил, что туплю просто туплю, но, к примеру, некоторые антивирусы сидят в ступоре и не могут работать с такими файлами. Видят потоки, а удалить не могут. Вот собственно вопрос. Есть идеи, либо "посылания на... документацию" как можно удалить файл (!не каталог) .. , если у него нет короткого имени? ![]() |
|
Создано: 19 августа 2008 17:01 · Личное сообщение · #2 |
|
Создано: 19 августа 2008 17:02 · Личное сообщение · #3 |
|
Создано: 19 августа 2008 17:09 · Поправил: flamer · Личное сообщение · #4 Loco уточняю test.cmd -- это "метод создания ситуации" Запустил и получил файлик ".." без короткого имени. А к нему привязан поток-stream ":exec" , который содержит в себе что-то. Абстрагируемся. Пофигу что. Читать (выполнять) это "что-то" элементарно. Удалить "что-то" - тоже не проблема. А вот удалить хост-файл '..' - у меня не получается. Tim Может быть, конечно. Но, может быть стоит самому сначала проверить? ;) Я пытался. - ошибочка 0x00000005. Еще пара уточнений. Используемый вызов winapi — DeleteFile(char *fname); Испробованные цели "удаления": .. — тупо, глухо — даже по синтаксису - каталог .\.. — тупо, глухо — даже по синтаксису - каталог ..: — глухо .\..: — глухо \..: — глухо + добавим-ка условие, дабы избежать "ложных срабатываний". проблемный файл находится не в корневом каталоге, а в подкаталоге. ![]() |
|
Создано: 19 августа 2008 18:45 · Личное сообщение · #5 |
|
Создано: 19 августа 2008 19:45 · Поправил: flamer · Личное сообщение · #6 |
|
Создано: 19 августа 2008 21:15 · Личное сообщение · #7 |
|
Создано: 20 августа 2008 13:57 · Личное сообщение · #8 |
|
Создано: 20 августа 2008 20:05 · Поправил: flamer · Личное сообщение · #9 RSI, Эти дебри я давно излазил. Беда в том, что GetFullPathName -- когда "может" - работает как обыкновенный парсер. Хотя нет. Необыкновенный, а пораженный манией гадания. Примечания: GetFullPathName сливает имя текущего диска, директории с указанным [в параметре] именем для вычисления полного пути и имени файла. Функция так же вычисляет адрес части полного пути, соответствующего имени файла. Эта функция не проверяет полученный результат на правильность, то есть не проверяет существование файла вообще. Но... спасибо за описалово. Полазил несколько минут и "свежий взгляд" помог найти мою ошибку. Решение готово. Оказалось - одна маленькая, но нудная опечаточка засела... просто в начале полного пути к файлу нужно два слеша.. а я один упускал. В общем, спасибо, RSI. ![]() |
![]() |
eXeL@B —› Программирование —› nfts ..:exec |