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

Вниз

NTFS ADS (Alternative Data Streams) - поиск   Найти похожие ветки 

 
AlexRush   (2003-08-04 15:24) [0]

Как осуществлять поиск subj ?


 
ZZ   (2003-08-04 16:12) [1]

Чего хочу моя есть никак не понять :)) Кого и где ты собрался искать?


 
Reindeer Moss Eater   (2003-08-04 16:25) [2]

Никак не найти. Надо заранее знать имена потоков.
Хотя сами такие файлы найти возможно.


 
Е-Моё имя   (2003-08-04 16:58) [3]

поищи в сети-есть утилиты для их поиска
у меня дома есть, но как называется-не помню


 
AlexRush   (2003-08-04 17:04) [4]

2Reindeer Moss Eater > Хотя сами такие файлы найти возможно. - "такие файлы" -- это ( :$DATA) 2Reindeer Moss Eater > Хотя сами такие файлы найти возможно. - "такие файлы" -- это файлы, которые имеют более одного (:$DATA) потока ? Если да, то как их обнаружить ?

2All под "поиском" я понимаю поиск средствами API (документированного или нет) но не работы с файловой системой через драйвер.


 
Reindeer Moss Eater   (2003-08-04 18:12) [5]

Если да, то как их обнаружить ?

Косвенно. Например размер файла большой, а внутри какжется что пусто (Данные в доп. потоках)


 
Е-Моё имя   (2003-08-04 18:52) [6]

размер файла не учитывает дополнительные потоки


 
Е-Моё имя   (2003-08-04 18:53) [7]

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


 
AlexRush   (2003-08-04 18:56) [8]

2Reindeer Moss Eater (04.08.03 18:12), вообще-то Е-Моё имя © (04.08.03 18:53) прав.


 
AlexRush   (2003-08-04 19:01) [9]

Ставим вопрос более конкретно:
Можно ли с пом. стандартного набора API-функций (как документированных, так и нет) найти дополнительные ADS (кроме умалчиваемого :$DATA) не зная имен потоков ?
или же...
зная имя файла, определить, есть ли у него дополнительные ADS ?


 
ZZ   (2003-08-04 19:21) [10]

А что, в msdn ничего? Например про BackupRead..
А :$DATA не самый умалчиваемый :)


 
AlexRush   (2003-08-04 20:31) [11]

2ZZ © (04.08.03 19:21)

BackupRead processes all of the data pertaining to an opened object as a series of discrete byte streams. Each stream is preceded by a 32-bit aligned WIN32_STREAM_ID structure.
- Я вот не понял: BackupRead возвращает массив (выровненный) структур WIN32_STREAM_ID за один вызов, или одну ?

Сколько не передай в nNumberOfBytesToRead, lpNumberOfBytesRead столько и содержит (вернет)...
и еще момент: If the function returns a nonzero value, and the variable pointed to by lpNumberOfBytesRead is zero, then all the data associated with the file handle has been read. - что-то у меня никогда она zero не бывает :(

Ежели не затруднит, объясни вышеозначенные моменты.


 
Alex Konshin   (2003-08-05 06:23) [12]

http://www.sysinternals.com/ntw2k/source/misc.shtml#Streams


 
ZZ   (2003-08-05 10:45) [13]

Вот накатал примерчик... вроде даже работает :))
procedure TForm1.Button1Click(Sender: TObject);
var
hFile : THandle;
Ptr : Pointer;
Sid : LPWIN32_STREAM_ID;
cbReaded: Cardinal;
dwLow,dwHigh: Cardinal;
begin
hFile:=CreateFile("C:\test1.txt",GENERIC_READ,0,nil,OPEN_EXISTING,0,0);
if hFile=INVALID_HANDLE_VALUE then ShowMessage(SysErrorMessage(getLastError));

GetMem(Sid,4096);

ptr:=nil;

while (true) do
begin
ZeroMemory(Sid,4096);

if (not BackupRead(hFile,Pointer(Sid),20,cbReaded,false,true,ptr))
then ShowMessage(SysErrorMessage(getLastError));

if (cbReaded=0) then break;

if (not BackupRead(hFile,PByte(Cardinal(Sid)+20),Sid.dwStreamNameSize,cbReaded,false,true,ptr))
then ShowMessage(SysErrorMessage(getLastError))
( 0,@Sid.cStreamName,"Stream",0)
Вот накатал примерчик... вроде даже работает :))
procedure TForm1.Button1Click(Sender: TObject);
var
hFile : THandle;
Ptr : Pointer;
Sid : LPWIN32_STREAM_ID;
cbReaded: Cardinal;
dwLow,dwHigh: Cardinal;
begin
hFile:=CreateFile("C:\test1.txt",GENERIC_READ,0,nil,OPEN_EXISTING,0,0);
if hFile=INVALID_HANDLE_VALUE then ShowMessage(SysErrorMessage(getLastError));

GetMem(Sid,4096);

ptr:=nil;

while (true) do
begin
ZeroMemory(Sid,4096);

if (not BackupRead(hFile,Pointer(Sid),20,cbReaded,false,true,ptr))
then ShowMessage(SysErrorMessage(getLastError));

if (cbReaded=0) then break;

if (not BackupRead(hFile,PByte(Cardinal(Sid)+20),Sid.dwStreamNameSize,cbReaded,false,true,ptr))
then ShowMessage(SysErrorMessage(getLastError))
else MessageBoxW(0,@Sid.cStreamName,"Stream",0);

BackupSeek(hFile,Sid.Size.LowPart,Sid.Size.HighPart,dwLow,dwHigh,@ptr);
end;
FreeMem(Sid);
CloseHandle(hFile);
end;


 
ZZ   (2003-08-05 11:20) [14]

Чуть не забыл
type
_WIN32_STREAM_ID = record
dwStreamId : Cardinal;
dwStreamAttributes : Cardinal;
Size : LARGE_INTEGER;
dwStreamNameSize : Cardinal;
cStreamName : array[0..0] of WideChar;
end;
LPWIN32_STREAM_ID = ^_WIN32_STREAM_ID;


 
AlexRush   (2003-08-05 12:03) [15]

2ZZ
Действительно работает! :)
Но есть непонятки:
MSDN> nNumberOfBytesToRead
[in] Specifies the length of the buffer. The buffer size must be greater than the size of a WIN32_STREAM_ID structure.


sizeof(WIN32_STREAM_ID) == 24,так как структура выровненная, а ты передаешь 20 (?)
...сюда же PByte(Cardinal(Sid) +20)


 
AlexRush   (2003-08-05 12:05) [16]

2ZZ © (05.08.03 11:20) Ну про LARGE_INTEGER и LPWIN32_STREAM_ID я догадался :)


 
ZZ   (2003-08-05 12:18) [17]

Ну я пропустил первые 20 (DWORD*3 + LARGE_INTEGER*1) байт.. А это как раз будет cStreamName[0].. вроде так :))


 
AlexRush   (2003-08-05 12:39) [18]

2ZZ © (05.08.03 12:18) - ну это, что касается PByte(Cardinal(Sid)+20).. это понял :) а первый раз 20 в nNumberOfBytesToRead ?



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
1-65513
Bezpal
2003-10-08 13:00
2003.10.20
Дата


3-65394
AccessHelp
2003-09-26 18:30
2003.10.20
Access


7-65645
KILLER_ABV
2003-08-04 12:28
2003.10.20
COM порты и модемы...


1-65502
Segey . K
2003-10-08 15:08
2003.10.20
Проблемы с атрибутами в XP.


4-65683
Vovas
2003-08-14 11:48
2003.10.20
Как считать текст из чужого MDIChild-окна?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский