Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];

Вниз

Сравнить два пути к файлу.   Найти похожие ветки 

 
Rouse_ ©   (2012-10-16 14:58) [40]


> QAZ2   (16.10.12 12:42) [30]
> и сказал википед про hardlink

Ну ты нашел авторитетный источник, еще бы в лурке поискал :)
Я ж сказал - напиши код и проверь, че катать с пустого в порожнее?


 
QAZ5   (2012-10-16 15:03) [41]

дык я не понял че писать, ты привел некошерную функцию ее нет в мсдн


 
Дмитрий С ©   (2012-10-16 16:08) [42]


> NtQueryObject

[This function may be changed or removed from Windows without further notice.]


 
MetalFan ©   (2012-10-16 16:17) [43]


> ты привел некошерную функцию ее нет в мсдн

Гы, а MSDN и не в курсе, что в ней не описана <a href="http://msdn.microsoft.com/en-us/library/bb432383%28v=VS.85%29.aspx">эта функция</a>.


 
MetalFan ©   (2012-10-16 16:18) [44]

...мать... забыл, что тут ссылки так не вставишь.


 
Rouse_ ©   (2012-10-16 16:42) [45]


> QAZ5   (16.10.12 15:03) [41]
> дык я не понял че писать, ты привел некошерную функцию ее
> нет в мсдн

Так ты еще и MSDN не смотришь, ну оно и понятно, есть же википедия :)))
Заканчивай тролить, займись полезным делом.


 
QAZ5   (2012-10-16 16:46) [46]

Удалено модератором
Примечание: я буду учить матчасть прежде чем писать глупости...


 
брат Птибурдукова   (2012-10-16 17:08) [47]

так вот чем твой ум разрушили...


 
Дмитрий С ©   (2012-10-16 17:26) [48]

Кстати, а реально какими документрированными (и такими, которые не могут выкинуть без предупреждения) функциями можно узнать путь к файлу по его хендлу? так чтобы и в ХП работало.


 
QAZ5   (2012-10-16 17:46) [49]

Удалено модератором


 
asail ©   (2012-10-16 23:12) [50]

Удалить первый файл, если второй тоже удалился, значит один и тот-же... :)


 
Inovet ©   (2012-10-17 00:59) [51]

> [50] asail ©   (16.10.12 23:12)

С хардлинком второй останется.


 
Германн ©   (2012-10-17 01:32) [52]


> Inovet ©   (17.10.12 00:59) [51]
>
> > [50] asail ©   (16.10.12 23:12)
>
> С хардлинком второй останется.
>

Вот я и говорил, что вопрос неоднозначно сформулирован. И объяснений от автора так и не прозвучало. Что автор подразумевает под словами "один и тот же файл"? Поскольку это может означать как эквивалентность, так и уникальность. А это две большие разницы.


 
kilkennycat ©   (2012-10-17 02:42) [53]


> Что автор подразумевает под словами "один и тот же файл"?

данная фраза трактуется однозначно. это один и тот же файл. его копия в другом месте(под другим именем и т.д.) - это копия, другой файл. а вот если этот файл лежит в одной папке, а потом его переместили в другую - это один и тот же файл, при условии, что файловая система лишь поменяла ссылки. а вот если файловая система его при перемещении переписала на новое физическое место - это другой файл.
именно поэтому телепортация (когда будет сделана), будет использоваться лишь для перемещения чего-нить незначительного, ибо фактически, а значит есть риск, что и юридически вещи и организмы не будут признаны одними и теми же до телепортации и после. но это конечно, если метод телепортации будет в виде уничтожения плазмой (в дешевых плацкартных вариантах - прессом) отправляемого и воссоздании его заново в пункте приема. а вот если его атомы не нарушая структуры через тридесятое измерение и пару складок пространства перенесутся - то все ок, это один и тот же объект. или субъект. или файл.


 
Германн ©   (2012-10-17 03:09) [54]


> kilkennycat ©   (17.10.12 02:42) [53]
>
>
> > Что автор подразумевает под словами "один и тот же файл"?
>
>
> данная фраза трактуется однозначно.

И это говорит Костя, которого не понятно где и как искать! :)


 
kilkennycat ©   (2012-10-17 10:29) [55]


> Германн ©   (17.10.12 03:09) [54]

квип или аська, я почти всегда онлайн


 
QAZ5   (2012-10-17 12:53) [56]


> это один и тот же файл, при условии, что файловая система лишь поменяла ссылки

тогдабы проканало [13] , но индексы могут менятся на усмотрение фс

> а вот если файловая система его при перемещении переписала
> на новое физическое место - это другой файл.

а как по твоему происходит дефрагментация диска? :)


 
kilkennycat ©   (2012-10-17 15:25) [57]

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


 
Jeer ©   (2012-10-17 15:41) [58]

Напридумывали заразной хрени всякой - теперь лечись :)


 
Rouse_ ©   (2012-10-17 16:09) [59]


> Дмитрий С ©   (16.10.12 17:26) [48]
> Кстати, а реально какими документрированными (и такими,
> которые не могут выкинуть без предупреждения) функциями
> можно узнать путь к файлу по его хендлу? так чтобы и в ХП
> работало.

Я ж сказал, NtQueryObject.

А по поводу хардлинков, все файлы в NTFS представлены в виде блока данных где-то в недрах диска + Хардлинк на эти данные, что собственно видно при вызове NtQueryInformationFile с флагом FileStandardInformation, где поле FileInfo.NumberOfLinks будет равно единице. Для примера тот-же калькулятор.
У меня он лежит в оригинале вот тут:
C:\Windows\winsxs\x86_microsoft-windows-calc_31bf3856ad364e35_6.1.7601.17514_none_abc56b2678fe1108\calc.exe + на него висит хардлинк в C:\Windows\System32\calc.exe

симлинки/subst диски NtQueryObject кажет ровно.

Вот такой код:

program Project1;

{$APPTYPE CONSOLE}

uses
 Windows;

type
 NT_STATUS = Cardinal;

 PUNICODE_STRING = ^TUNICODE_STRING;
 TUNICODE_STRING = packed record
   Length : WORD;
   MaximumLength : WORD;
   Buffer : array [0..MAX_PATH - 1] of WideChar;
 end;

 POBJECT_NAME_INFORMATION = ^TOBJECT_NAME_INFORMATION;
 TOBJECT_NAME_INFORMATION = packed record
   Name : TUNICODE_STRING;
 end;

 function NtQueryObject(ObjectHandle: THandle;
   ObjectInformationClass: DWORD; ObjectInformation: Pointer;
   ObjectInformationLength: ULONG;
   ReturnLength: PDWORD): NT_STATUS; stdcall; external "ntdll.dll";

function GetFilePathByHandle(Value: THandle): string;
const
 ObjectNameInformation = 1;
var
 ObjectNameInfo: TOBJECT_NAME_INFORMATION;
 dwReturn: DWORD;
 AnsiBuff: array [0..MAX_PATH - 1] of AnsiChar;
begin
 NtQueryObject(Value, ObjectNameInformation,
   @ObjectNameInfo, MAX_PATH * 2, @dwReturn);
 WideCharToMultiByte(CP_ACP, 0,
   @ObjectNameInfo.Name.Buffer[ObjectNameInfo.Name.MaximumLength -
   ObjectNameInfo.Name.Length],
   ObjectNameInfo.Name.Length, @AnsiBuff[0],
   MAX_PATH, nil, nil);
 Result := string(PAnsiChar(@AnsiBuff[0]));
end;

var
 RealFile, HardLink, SymLink, SubStFile: THandle;
begin
 RealFile := CreateFile("S:\tmp\1\1.txt",
   GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 Writeln(GetFilePathByHandle(RealFile));
 CloseHandle(RealFile);

 HardLink := CreateFile("S:\tmp\1\2\1.txt",
   GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 Writeln(GetFilePathByHandle(HardLink));
 CloseHandle(HardLink);

 SymLink := CreateFile("S:\tmp\1\4\1.txt",
   GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 Writeln(GetFilePathByHandle(SymLink));
 CloseHandle(SymLink);

 SubStFile := CreateFile("J:\1.txt",
   GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 Writeln(GetFilePathByHandle(SubStFile));
 CloseHandle(SubStFile);

 Readln;
end.


выведет следующую информацию

\Device\HarddiskVolume3\tmp\1\1.txt
\Device\HarddiskVolume3\tmp\1\2\1.txt
\Device\HarddiskVolume3\tmp\1\1.txt
\Device\HarddiskVolume3\tmp\1\1.txt


Сбой только на хардлинке (второй результат), но его легко дереференсить при желании, и кстати GetFinalPathNameByHandle не производит дереференс хардлинка, т.е. им нельзя будет различить что два пути ведут на один и тот-же файл.


 
QAZ5   (2012-10-17 17:36) [60]


> Сбой только на хардлинке (второй результат), но его легко
> дереференсить при желании, и кстати GetFinalPathNameByHandle
> не производит дереференс хардлинка, т.е. им нельзя будет
> различить что два пути ведут на один и тот-же файл.

а я чо говорил


 
Rouse_ ©   (2012-10-17 18:00) [61]


> а я чо говорил

А ты говорил неверные вещи, причем цитировал зачем-то википедию, а потом вообще про драйвера начал (зачем?), при дереференсе можно конкретно определить оригинальное месторасположение файла на которое указывает рутовый линк.


 
QAZ5   (2012-10-17 20:07) [62]

закеш как


 
Rouse_ ©   (2012-10-17 20:56) [63]


> QAZ5   (17.10.12 20:07) [62]
> закеш

Не закежу :)
В семерке отрубили запрос FSCTL_GET_NTFS_FILE_RECORD для неподписаных приложений.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364568(v=vs.85).aspx
А сидеть вспоминать как читать NTFS в сыром режиме мне лениво :)


 
Rouse_ ©   (2012-10-17 21:02) [64]

За, если интересно, то вот вариант с нулевого кольца: http://www.everfall.com/paste/id.php?uj1hth7un53o
под ХР он транслируется легко в третье.
Под семеркой связку ZwFsControlFile -> DeviceIoControl меняем на RAW


 
QAZ5   (2012-10-17 22:01) [65]


> RAW

какой такой


 
Германн ©   (2012-10-18 01:55) [66]


>  QAZ5   (17.10.12 22:01) [65]
>
>
> > RAW
>
> какой такой
>

Придуриваешься или в самом деле не понимаешь о чем речь?


 
QAZ5   (2012-10-18 11:39) [67]

не ну догадываюсь, но надо конкретики



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.004 c
15-1356839680
Neptune++
2012-12-30 07:54
2013.04.28
Как такое может быть?


15-1356595975
DevilDevil
2012-12-27 12:12
2013.04.28
Мозговой штурм на тему разработки клиент-серверного приложения


15-1356769502
Undertacker
2012-12-29 12:25
2013.04.28
Как прочитать сохраненные файлы Оперы-мини?


15-1356813003
Юрий
2012-12-30 00:30
2013.04.28
С днем рождения ! 30 декабря 2012 воскресенье


15-1356686287
QAZ9
2012-12-28 13:18
2013.04.28
Подсветка синтаксиса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский