Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ADS Stream lesen (https://www.delphipraxis.net/101291-ads-stream-lesen.html)

Luckie 10. Okt 2007 20:22


ADS Stream lesen
 
Ich versuche gerade einen ADS Stream zu lesne, nur leide rkommt da bei mir nur Mist raus. Einen ADS Stream kann man sich zum Beiepil mit Notepad anzeigen lassen:
Code:
notepad tscc.exe:Zone.Identifier
Wobei die Zeichenfolge hinter dem Doppelpunkt der ADS-Name ist. Wenn man Dateien mit dem IE runterläd wird ein ADS Stream mit dem Namen Zone.Identifier angehangen mit dem Inhalt:
Zitat:

[ZoneTransfer]
ZoneId=3
Wenn ich versuche den ADS Stream von der gleichen Datei so auszulesen:
Delphi-Quellcode:
function TMpuADS.GetDataStream(const StreamName: WideString; StreamSize: Int64): WideString;
var
  hFile            : THandle;
  ReadBuffer       : WideString;
  BytesRead        : DWORD;
begin
  hFile := CreateFileW(PWideChar(FFilename), GENERIC_READ, FILE_SHARE_READ, nil,
    OPEN_ALWAYS, 0, 0);
  if hFile <> INVALID_HANDLE_VALUE then
  begin
    Setlength(ReadBuffer, StreamSize);
    if ReadFile(hFile, ReadBuffer[1], StreamSize, BytesRead, nil) then
      SetString(Result, PWideChar(ReadBuffer), StreamSize)
    else
    begin
      CloseHandle(hFile);
      raise Exception.CreateFmt(rsExceptionTemplate, [GetLastError, SysErrorMessage(GetLastError)]);
    end;
    CloseHandle(hFile);
  end;
end;
IN FFilename steht deer Pfad, Exename und der ADS-Name korrekt drinne.
Bekomme ich allerdings nur Datenmüll:
[code]?????????????er :$DATA ???[quote]
Das $DATA hing anfangs noch am ADS-Namen dran, das hab eich abgeschnitte. Was mache ich da falsch?

marabu 10. Okt 2007 21:28

Re: ADS Stream lesen
 
Hallo Michael,

schau mal:

Delphi-Quellcode:
var
  s: string;
begin
  with TFileStream.Create(fn, fmOpenRead) do
  try
    SetLength(s, Size);
    Read(s[1], Size);
    ShowMessage(s);
  finally
    Free;
  end;
end;
Der Alternate Data Stream wird vom IE nicht als Unicode geschrieben. Ob du $DATA anhängst oder nicht ist egal - $DATA ist Default.

Gute Nacht

Luckie 11. Okt 2007 08:40

Re: ADS Stream lesen
 
Zitat:

Zitat von marabu
Der Alternate Data Stream wird vom IE nicht als Unicode geschrieben. Ob du $DATA anhängst oder nicht ist egal - $DATA ist Default.

:wall:

Ich bin davon ausgegangen, da alle anderen Funktionen Unicode-Strings erwarten und verarbeiten und es NTFS ist und es ab Windows 2000 ADS gibt, dass zumindest Microsoft Software selber Unicode zum Schreiben benutzt. Aber das lehrt einen mal wieder, dass man sich auf Microsoft nicht verlassen kann. Besten Dank, das war es.

_frank_ 11. Okt 2007 10:14

Re: ADS Stream lesen
 
hi luckie,
veröffentlichst du das Programm (evtl. inkl. Code) später als Freeware, wenn du es fertig hast?
wäre sehr daran interessiert, nach ADS zu suchen, auszulesen/exportieren, löschen, etc.

Gruß Frank

richard_boderich 11. Okt 2007 10:42

Re: ADS Stream lesen
 
@_frank_

So etwas gibt es schon.

http://www.delphipraxis.net/internal...667&highlight=

mfG Richard

Luckie 11. Okt 2007 10:45

Re: ADS Stream lesen
 
Aber nicht als Opensource. Meins wird aber definitiv Opensource. ;) Kommt in den nächsten zwei drei Stunden.

Luckie 11. Okt 2007 13:48

Re: ADS Stream lesen
 
Here we go: ADSReader

suni 12. Okt 2007 14:48

Re: ADS Stream lesen
 
Hallo Luckie... :)
Wie könnte ich anhand deine routine denn jetzt zum beispiel prüfen ob der ADS Stream "xyz" existiert ? :oops:

Luckie 12. Okt 2007 14:57

Re: ADS Stream lesen
 
Lad dir mein Programm runter und guck dir die Klasse an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz