Как определить адрес файла на харде?
2454
20
Подскажите, как в С++ определить адрес файла на винте?
Deft
Все зависит от файловой системы и операционки.
Deft
А что значит адрес файла? номер кластера, номер сектора?
Электроник
Физический дрес начала файла.
craxx
Неужели и ты не знаешь как это сделать? :хммм::(:хммм:
Deft
Не, ну я то знаю пару способов, только это ничего не даст, файл может быть физически разбит на куски. В WinAPI дляФАТ 32 есть функция GetFileInformationByHandle, она много чего может дать.
craxx
...только это ничего не даст, файл может быть физически разбит на куски...
Не имеет значения, пусть это будет адрес первого фрагмента. Задача написать модуль защиты программы от НСК, используя в качестве характеристики среды адрес программы на диске.
Deft
А почему именно адрес файла? Почему например не серийник винта?
craxx
Задание у меня такое. :хммм:
Deft
Странное какое задание... А как быть с дефрагментацией диска?
onanymous
Естественно после дефрагментации диска программа перестанет работать, но это в данном случае значения не имеет.
Deft
Вот поэтому я и удивляюсь... Поскольку задача не имеет ни практической ценности (что это за защита, которая ломается от дефрагментации), ни образовательной, поскольку требует знаний не столько возможностей операционных систем, сколько их доступных "лазеек".
onanymous
Ну допустим программисты сбербанка написав свой банк-клиент для DOS (есть и них щас и версия для Windows,как там у нее с защитой не знаю) не постеснялись и поставили именно такую защиту, после дефрагментации банк-клиент переставал работать. А в NTFS по мойму есть возможность пометить файл так чтобы при дефрагметации он не перемещался.
onanymous
...задача не имеет ни практической ценности (что это за защита, которая ломается от дефрагментации), ни образовательной...
Не я же задания для курсовиков пишу..... :улыб::):улыб:
Denfil
> Ну допустим программисты сбербанка написав свой банк-клиент для DOS

Да эт понятно... что никто не запретит "умному" программеру использовать ту систему защиты, которая именно ему приглянулась. Меня это *как пользователя* напрягает... Ну с какой радости, например, я вынужден был недавно переинсталлировать (переактивировать) МС Офис лишь из-за того, что пришлось переставить сетевую карточку из одного слота в другой? То же самое и с дефрагментацией. И, если в случае МС-ДОС этому еще можно было найти какое-то оправдание (поскольку та поддерживала одну единственную, фактически, файловую систему), то в случае с Виндой - полный капут. Поскольку процедуру определения физического расположения файла на диске пришлось бы изобретать отдельно для каждой комбинации ОС/ФС. Опять же - а как быть с будущими их версиями?

В общем... ИМХО, это задача скорее из области хакерства, чем из профессионального программирования.
Deft
Ну, если это курсовик, то скорее всего просто требуется знание структуры FAT и Particion table. А дальше сложить-умножить. Готового решения может и не быть.
Электроник
...скорее всего просто требуется знание структуры FAT и Partition table...
Не, тут должно быть проще.
craxx
В WinAPI дляФАТ 32 есть функция GetFileInformationByHandle, она много чего может дать.
Адрес программы она не дает. Может еще есть варианты?
Deft
Всё ешё не разобрался? Ручками придётся, ручками.
Электроник
Всё ешё не разобрался? Ручками придётся, ручками.
Нашел как это делается на АСМе через FCB, но работает только под ДОСом. Решил сменить тему. Буду писАть трояна. :улыб::):улыб: