Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.20;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
1-65452
TUser
2003-10-09 10:10
2003.10.20
WebBr


14-65635
pasha_golub
2003-09-30 18:54
2003.10.20
Нужны фонты, шрифты по-нашему


11-65399
mike.dld
2003-02-06 11:23
2003.10.20
Проблемы


3-65322
Dark Elf
2003-09-29 18:30
2003.10.20
Запрос к SQL Server


3-65396
griser
2003-09-26 18:36
2003.10.20
Интерфейсы