Seite 1 von 1

ntfs streams auslesen

Verfasst: Dienstag 7. Juni 2005, 15:58
von Gast
hallo,

da ich hier neu bin, habe ich mir gleich ein nettes problem einfallen lassen.

folgendes:
ich möchte aus einem phyton script herraus (external method in zope) die Dateiinformationen einer Datei auslesen.
Die dateiinformationen (Title, Thema, Kategorie, Stichwörter und Kommentar) sind im Eigenschaftsmenü einer Datei unter Dateiinfo abrufbar.

Es sollen Dateien auf einer webseite zum download angeboten werden. zusätzlich sollen diese/einige Dateiinformationen angezeigt werden.

Das speichern der infos ermöglichen die ADS (alternate data streams) im NTFS dateisystem. der Datenstrom mit den infos heißt: ♣SummaryInformation
codiert: \005SummaryInformation

Die oben aufgezählten infos sind alle hintereinander in den datastream geschrieben. Das macht das auswerten schwer, da keine anhaltspunkte für stringoperationen gegeben sind.

ich suche nun nach einer möglichkeit diese informationen auszulesen. vielleicht gibt es ja versteckte funktionen die gleich eine liste oder ähnliches ermitteln

mfg uwe

Verfasst: Dienstag 7. Juni 2005, 16:14
von jens
Hilft dir vielleicht das weiter:
http://www.python-forum.de/viewtopic.php?t=2306
vielleicht auch interessant:
http://www.python-forum.de/viewtopic.php?t=2292

Re: ntfs streams auslesen

Verfasst: Dienstag 7. Juni 2005, 16:29
von Leonidas
Anonymous hat geschrieben:Das speichern der infos ermöglichen die ADS (alternate data streams) im NTFS dateisystem. der Datenstrom mit den infos heißt: ♣SummaryInformation
codiert: \005SummaryInformation
Diese Informationen sind doch nicht in ADS drin.. sondern in den EXEn, damit das auch auf FAT Dateisysthemen funktioniert. Dazu solltest du dir den ersten Link ansehen, den jens gepostet hat.

Eine Möglichkeit ADS direkt aus Python zu lesen kenne ist jedoch nicht, ich habe nur ein paar Tools gefunden, die man per os.system() bedienen könnte.

Verfasst: Mittwoch 8. Juni 2005, 05:49
von acid
(bin author, war nicht angemeldet.)

also:
die summary informationen welche ich meine sind in ad-streams abgelegt.
es handelt sich um die ads, welche nur auf einem NTFS volume verfügbar sind.

unter http://www.heysoft.de/Frames/f_sw_la_de.htm lässt sich ein tool downloaden, welches die ads namen anzeigt.

Code: Alles auswählen

LADS - Freeware version 4.00
(C) Copyright 1998-2004 Frank Heyne Software (http://www.heysoft.de)
This program lists files with alternate data streams (ADS)
Use LADS on your own risk!

Scanning directory c:\daten\

      size  ADS in file
----------  ---------------------------------
       120  c:\daten\test.txt:♣DocumentSummaryInformation
       252  c:\daten\test.txt:♣SummaryInformation
         0  c:\daten\test.txt:{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}
in python mittels test.txt:\005SummaryInformation (normaler dateiaufruf) liefert:

Code: Alles auswählen

þÿ                       à…ŸòùOh«‘ +'³Ù0   Ì         8      €@      H      \      p      €      ä             test.txt       information       test     A   beschreibung asdlfsdf lk asjf asdfjö sdaflj    
also sind alle dateiinfos (nicht die versionsnummern etc...) in diesem ADS.

werde wegen dem hässlichem format also doch os.system nehmen müssen.

mfg uwe

Verfasst: Mittwoch 8. Juni 2005, 06:14
von acid
hm,

jetzt finde ich vor schreck gar kein command-line tool welches die infos ausließt.

besser währe natürlich ein rundll oder sonstwas aufruf, welcher auch windows intern beim lesen/setzen der dateiinfos ausgeführt wird.

hat jemand eine idee?

nachtrag:
habe mal mitgeloggt, was so auf der platte los ist, wenn man so einen eintrag setzt:

allerlei aufrufe der docprop und docprop2.dll von explorer.exe

die export functione der dlls sind:
docprop.dll:
DllCanUnloadNow
DllGetClassObject
docprop2.dll
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer

docprop klingt ja schon so schön nach document attributen

Verfasst: Mittwoch 8. Juni 2005, 09:10
von jens
Vielleicht ist http://www.sysinternals.com/Utilities/Streams.html für dich interessant... Da sind auch C-Sourcecodes dabei ;)

Verfasst: Freitag 10. Juni 2005, 07:53
von acid
das stream tool von sysinternals hillft mir nicht weiter, weil dieses nur streams erkennt und dessen namen anzeigt.

damit habe ich auch den stream namen SummaryInformation herausgefunden.
Es funktioniert auf absolut niedrigster dateisystemebene.

dem tool ist auf deutsch schei* egal, was in den einzelnen streams steht.
man kann sich den inhalt eines beliebigen strings nicht anzeigen lassen und schon gar nicht die aufgeschlüsselten summary informationen.

der C-Source :wink: hilft mir deswegen auch nicht.

Verfasst: Dienstag 28. Juni 2005, 11:20
von jens
Ich wollt noch mal nachfragen... Hat sich irgendwas ergeben???

Re: ntfs streams auslesen

Verfasst: Freitag 24. August 2012, 21:01
von Dazob
Der Beitrag ist zwar uralt, aber falls jemand googelt so wie ich, hier die Antwort: Einfach den Namen des Streams mit Doppelpunkt getrennt hinter dem Dateinamen anhängen.

Beispiel:

Code: Alles auswählen

import os

print "Create MyFile.txt"
with open("MyFile.txt", "w") as file:
  file.write("MyFile contents")

print "Create MyFile.txt:MyStream"
with open("MyFile.txt:MyStream", "w") as stream:
  stream.write("MyStream contents")

print "Read MyFile.txt:MyStream:",
with open("MyFile.txt:MyStream", "r") as stream:
  print stream.read()

print "Delete MyFile.txt:MyStream"
os.remove("MyFile.txt:MyStream")

print "Read MyFile.txt:",
with open("MyFile.txt", "r") as file:
  print file.read()

print "Delete MyFile.txt"
os.remove("MyFile.txt")
Ausgabe:
Create MyFile.txt
Create MyFile.txt:MyStream
Read MyFile.txt:MyStream: MyStream contents
Delete MyFile.txt:MyStream
Read MyFile.txt: MyFile contents
Delete MyFile.txt

Re: ntfs streams auslesen

Verfasst: Freitag 24. August 2012, 21:15
von Dazob
Funktionen:

Code: Alles auswählen

def readNtfsStream(fileName, streamName):
  with open(fileName + ":" + streamName, "r") as stream:
    return stream.read()

def writeNtfsStream(fileName, streamName, contents):
  with open(fileName + ":" + streamName, "w") as stream:
    stream.write(contents)

def deleteNtfsStream(fileName, streamName):
  os.remove(fileName + ":" + streamName)

Re: ntfs streams auslesen

Verfasst: Dienstag 28. August 2012, 09:09
von jens
Ja, die Info's gibt es auch hier: https://secure.wikimedia.org/wikipedia/ ... ms#Windows

Frage mich gerade, wie man eine Liste der existierenden ADS bekommen kann...