Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+6 невидимых)

 eXeL@B —› Программирование —› nfts ..:exec
Посл.ответ Сообщение

Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 19 августа 2008 16:25 · Поправил: flamer
· Личное сообщение · #1

Доброго здоровья!
Наткнулся на проблемку при работе с потоками ntfs
Дано
Создание -- элементарнийший пример cmd-скриптик
test.cmd

fsutil behavior set disable8dot3 1
type %systemroot%\system32\cmd.exe > ..:exec
fsutil behavior set disable8dot3 0

В результате файлик '..', который не имеет короткого имени. К тому же он является тёзкой [родительского каталога].

Подгрузка -- CreateProcess в руки

Удаление.... А вот с удалением ни как не разбирусь. Вызовы DeleteFile ('..') ; DeleteFile('..:'); возвращаются с пятой ошибкой (Access Denied). Ожидал, конечно, но...

Возникает вопрос как можно удалить этот "хост-файл", у которого имя - '..'
либо, как создать короткое имя для файла, у которого его не было.

Я бы поверил, что туплю просто туплю, но, к примеру, некоторые антивирусы сидят в ступоре и не могут работать с такими файлами. Видят потоки, а удалить не могут.

Вот собственно вопрос. Есть идеи, либо "посылания на... документацию" как можно удалить файл (!не каталог) .. , если у него нет короткого имени?




Ранг: 118.1 (ветеран)
Активность: 0.140
Статус: Участник

Создано: 19 августа 2008 17:01
· Личное сообщение · #2

flamer
Это батник?
Если да, то: del c:\windows\system32\cmd.exe

-----
PSP-Gamer.ru




Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 19 августа 2008 17:02
· Личное сообщение · #3

может быть DeleteFile("\..");

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 19 августа 2008 17:09 · Поправил: flamer
· Личное сообщение · #4

Loco
уточняю
test.cmd -- это "метод создания ситуации"

Запустил и получил файлик ".." без короткого имени.
А к нему привязан поток-stream ":exec" , который содержит в себе что-то. Абстрагируемся. Пофигу что.
Читать (выполнять) это "что-то" элементарно.
Удалить "что-то" - тоже не проблема.
А вот удалить хост-файл '..' - у меня не получается.

Tim
Может быть, конечно. Но, может быть стоит самому сначала проверить? ;) Я пытался. - ошибочка 0x00000005.

Еще пара уточнений.
Используемый вызов winapi — DeleteFile(char *fname);
Испробованные цели "удаления":
.. — тупо, глухо — даже по синтаксису - каталог
.\.. — тупо, глухо — даже по синтаксису - каталог
..: — глухо
.\..: — глухо
\..: — глухо

+ добавим-ка условие, дабы избежать "ложных срабатываний". проблемный файл находится не в корневом каталоге, а в подкаталоге.



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 19 августа 2008 18:45
· Личное сообщение · #5

Вот эту тему читали?



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 19 августа 2008 19:45 · Поправил: flamer
· Личное сообщение · #6

Нет, я упустил её.
Но проблема там проблема немного легче -- в проблемном имени есть еще и буковки

invoke MoveFile,SADD('\?\C:\TEST\..'),SADD('\?\C:\TEST\1.dat'); == ERROR_INVALID_NAME (0000007B)

/модераторам: Может быть слить эти темы? или эту закрыть?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 19 августа 2008 21:15
· Личное сообщение · #7

Да уж развивайте в этом топике, раз уж завели... а старый тогда не поднимайте.



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 20 августа 2008 13:57
· Личное сообщение · #8

flamer

GetFullPathName Function

msdn.microsoft.com/en-us/library/aa364963(VS.85).aspx



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 20 августа 2008 20:05 · Поправил: flamer
· Личное сообщение · #9

RSI, Эти дебри я давно излазил.
Беда в том, что GetFullPathName -- когда "может" - работает как обыкновенный парсер. Хотя нет. Необыкновенный, а пораженный манией гадания.


Примечания:
GetFullPathName сливает имя текущего диска, директории с указанным [в параметре] именем для вычисления полного пути и имени файла. Функция так же вычисляет адрес части полного пути, соответствующего имени файла.

Эта функция не проверяет полученный результат на правильность, то есть не проверяет существование файла вообще.

Но... спасибо за описалово. Полазил несколько минут и "свежий взгляд" помог найти мою ошибку.
Решение готово.

Оказалось - одна маленькая, но нудная опечаточка засела...
просто в начале полного пути к файлу нужно два слеша.. а я один упускал.

В общем, спасибо, RSI.


 eXeL@B —› Программирование —› nfts ..:exec
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати