ntfs streams auslesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
acid
User
Beiträge: 3
Registriert: Dienstag 7. Juni 2005, 15:48

(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
acid
User
Beiträge: 3
Registriert: Dienstag 7. Juni 2005, 15:48

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Vielleicht ist http://www.sysinternals.com/Utilities/Streams.html für dich interessant... Da sind auch C-Sourcecodes dabei ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
acid
User
Beiträge: 3
Registriert: Dienstag 7. Juni 2005, 15:48

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich wollt noch mal nachfragen... Hat sich irgendwas ergeben???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Dazob
User
Beiträge: 2
Registriert: Freitag 24. August 2012, 20:53

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
Dazob
User
Beiträge: 2
Registriert: Freitag 24. August 2012, 20:53

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)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten