Discussion:
raw harddisk zugriff unter os2
(zu alt für eine Antwort)
Andreas Peters
2010-12-06 22:27:18 UTC
Permalink
Hallo!

Ich habe eine Festplatte welche mit dem FileSystem WBFS (Wii Backup
FileSystem) formatiert ist. Um darauf zugreifen zu können benötigt man
einen WBFS Manager, wie z.B. wiimms. Diesen portiere ich gerade nach
OS2. Der WBFS Manager muss auf die WBFS formatierte Festplatte im raw
Modus zugreifen können. Unter Linux ist das ja auch recht einfach. Dort
funktioniert dieser Zugriff einfach über das Device, z.B. /dev/sdb. In
"c" würde das dann so aussehen: fopen("/dev/sdb", "wb"). Wie kann ich
aber unter OS2 auf eine Festplatte (via USB) im raw Modus zugreifen? Die
Festplatte wird zwar als Laufwerk F: eingehängt, aber ein Zugriff via
fopen("F:","wb") gibt nur ein "No such file or directory aus". Würde
mich über ein paar Tips freuen. :-)

Viele Grüße und schon einmal besten Dank,
Andreas
Marcel Müller
2010-12-07 09:45:43 UTC
Permalink
Hallo,
Post by Andreas Peters
Ich habe eine Festplatte welche mit dem FileSystem WBFS (Wii Backup
FileSystem) formatiert ist. Um darauf zugreifen zu können benötigt man
einen WBFS Manager, wie z.B. wiimms. Diesen portiere ich gerade nach
OS2. Der WBFS Manager muss auf die WBFS formatierte Festplatte im raw
Modus zugreifen können. Unter Linux ist das ja auch recht einfach. Dort
funktioniert dieser Zugriff einfach über das Device, z.B. /dev/sdb. In
"c" würde das dann so aussehen: fopen("/dev/sdb", "wb"). Wie kann ich
aber unter OS2 auf eine Festplatte (via USB) im raw Modus zugreifen? Die
Festplatte wird zwar als Laufwerk F: eingehängt, aber ein Zugriff via
fopen("F:","wb") gibt nur ein "No such file or directory aus". Würde
mich über ein paar Tips freuen. :-)
Du muss die richtigen Open-Flags setzen. OPEN_FLAGS_DASD oder so
ähnlich. Dann klappt es auch mit DosOpenL und DosRead/DosWrite/DosSeek.

Die glibc kann das aber nicht. Also mit fopen wird das AFAIK nichts.


Marcel
Lars Erdmann
2010-12-07 20:20:26 UTC
Permalink
Post by Marcel Müller
Hallo,
Ich habe eine Festplatte welche mit dem FileSystem WBFS (Wii Backup FileSystem) formatiert ist. Um darauf zugreifen zu können benötigt man einen WBFS Manager, wie z.B. wiimms. Diesen portiere ich gerade nach OS2. Der WBFS Manager muss auf
die WBFS formatierte Festplatte im raw Modus zugreifen können. Unter Linux ist das ja auch recht einfach. Dort funktioniert dieser Zugriff einfach über das Device, z.B. /dev/sdb. In "c" würde das dann so aussehen: fopen("/dev/sdb", "wb").
Wie kann ich aber unter OS2 auf eine Festplatte (via USB) im raw Modus zugreifen? Die Festplatte wird zwar als Laufwerk F: eingehängt, aber ein Zugriff via fopen("F:","wb") gibt nur ein "No such file or directory aus". Würde mich über ein
paar Tips freuen. :-)
Du muss die richtigen Open-Flags setzen. OPEN_FLAGS_DASD oder so ähnlich. Dann klappt es auch mit DosOpenL und DosRead/DosWrite/DosSeek.
Die glibc kann das aber nicht. Also mit fopen wird das AFAIK nichts.
Dem ist noch etwas hinzuzufügen: man kann raw auf eine Partition (limitiert auf diese Partition) zugreifen oder man
kann raw auf die komplette Festplatte zugreifen.

Limiert auf eine Partition:
DosOpenL("C:",&hFile,,&ulAction,0UL,FILE_NORMAL,...,OPEN_FLAGS_DASD | OPEN_SHARE_DENYREADWRITE | OPEN_SHARE_DENYLEGACY | OPEN_ACCESS_READWRITE,NULL)
bzw.
DosOpenL("C:",&hFile,,&ulAction,0UL,FILE_NORMAL,...,OPEN_FLAGS_DASD | OPEN_SHARE_DENYREADWRITE | OPEN_ACCESS_READWRITE,NULL)

DosRead und DosWrite behandeln dann die ganze Partition wie eine große Datei. Sinnigerweise sollte man DosOpenL,
DosSetFilePtrL, DosRead, DosWrite benutzen. So eine Partition ist ja überlicherweise größer als 2 GByte (2^31: Limit von
DosSetFilePtr). Mit den "L" Versionen sind's dann immerhin 2^63 Bytes (also 2 TByte glaub ich).

aber auch mittels IOCTL: DosOpen wie oben und dann logische IOCTLs Category 0x8, Functions 0x44 (Write Track) 0x64 (Read Track). Man kann
dann sinnvollerweise noch die Partition gegen weiteren Zugriff locken bzw. unlocken (0x00 sowie 0x01).
Auf jeden Fall muß man logische Sektornummern in C/H/S umrechnen (siehe 0x63).



Auf die gesamte Festplatte zugreifen:
Das geht meines Wissens nur mit DosPhysicalDisk:
HFILE hDisk = NULLHANDLE;
CHAR DiskNr[]={"1:"}; // für die erste Platte, 2: für die zweite usw.
rc = DosPhysicalDisk(INFO_GETIOCTLHANDLE,&hDev,sizeof(SHANLDE),DiskNr,strlen(DiskNr)); /* nur 2 bytes von HFILE werden gesetzt ! */


und dann die physical IOCTLs Category 0x9, Functions 0x44 (Write Track) 0x64 (Read Track). Sinnvollerweise sollte man definitiv
die Platte gegen jeden anderen Zugriff locken bzw. wieder unlocken (0x00 sowie 0x01).
Auch hier muß man logische Sektornummern in C/H/S umrechnen (siehe 0x63).

rc = DosDevIOCtl(hDisk,....);


Am Schluß Zugriff beenden mit:

rc = DosPhysicalDisk(INFO_FREEIOCTLHANDLE,NULL,0UL,&hDisk,sizeof(SHANDLE));



Lars
Andreas Peters
2010-12-07 22:30:14 UTC
Permalink
Hallo Marcel, hallo Lars,

leider ist es schon etwas spät. Ich werde daher das ganze Morgen einmal
ausprobieren. Schon einmal besten Dank für die Hilfe. Ich sag in den
kommenden Tagen Bescheid ob es so funktioniert wie gedacht. :-)


Beste Grüße,
Andreas
Post by Lars Erdmann
Post by Marcel Müller
Hallo,
Post by Andreas Peters
Ich habe eine Festplatte welche mit dem FileSystem WBFS (Wii Backup
FileSystem) formatiert ist. Um darauf zugreifen zu können benötigt
man einen WBFS Manager, wie z.B. wiimms. Diesen portiere ich gerade
nach OS2. Der WBFS Manager muss auf
die WBFS formatierte Festplatte im raw Modus zugreifen können. Unter
Linux ist das ja auch recht einfach. Dort funktioniert dieser Zugriff
einfach über das Device, z.B. /dev/sdb. In "c" würde das dann so
aussehen: fopen("/dev/sdb", "wb").
Wie kann ich aber unter OS2 auf eine Festplatte (via USB) im raw
Modus zugreifen? Die Festplatte wird zwar als Laufwerk F: eingehängt,
aber ein Zugriff via fopen("F:","wb") gibt nur ein "No such file or
directory aus". Würde mich über ein
paar Tips freuen. :-)
Du muss die richtigen Open-Flags setzen. OPEN_FLAGS_DASD oder so
ähnlich. Dann klappt es auch mit DosOpenL und DosRead/DosWrite/DosSeek.
Die glibc kann das aber nicht. Also mit fopen wird das AFAIK nichts.
Dem ist noch etwas hinzuzufügen: man kann raw auf eine Partition
(limitiert auf diese Partition) zugreifen oder man
kann raw auf die komplette Festplatte zugreifen.
DosOpenL("C:",&hFile,,&ulAction,0UL,FILE_NORMAL,...,OPEN_FLAGS_DASD |
OPEN_SHARE_DENYREADWRITE | OPEN_SHARE_DENYLEGACY |
OPEN_ACCESS_READWRITE,NULL)
bzw.
DosOpenL("C:",&hFile,,&ulAction,0UL,FILE_NORMAL,...,OPEN_FLAGS_DASD |
OPEN_SHARE_DENYREADWRITE | OPEN_ACCESS_READWRITE,NULL)
DosRead und DosWrite behandeln dann die ganze Partition wie eine große
Datei. Sinnigerweise sollte man DosOpenL,
DosSetFilePtrL, DosRead, DosWrite benutzen. So eine Partition ist ja
überlicherweise größer als 2 GByte (2^31: Limit von
DosSetFilePtr). Mit den "L" Versionen sind's dann immerhin 2^63 Bytes
(also 2 TByte glaub ich).
aber auch mittels IOCTL: DosOpen wie oben und dann logische IOCTLs
Category 0x8, Functions 0x44 (Write Track) 0x64 (Read Track). Man kann
dann sinnvollerweise noch die Partition gegen weiteren Zugriff locken
bzw. unlocken (0x00 sowie 0x01).
Auf jeden Fall muß man logische Sektornummern in C/H/S umrechnen (siehe 0x63).
HFILE hDisk = NULLHANDLE;
CHAR DiskNr[]={"1:"}; // für die erste Platte, 2: für die zweite usw.
rc =
DosPhysicalDisk(INFO_GETIOCTLHANDLE,&hDev,sizeof(SHANLDE),DiskNr,strlen(DiskNr));
/* nur 2 bytes von HFILE werden gesetzt ! */
und dann die physical IOCTLs Category 0x9, Functions 0x44 (Write Track)
0x64 (Read Track). Sinnvollerweise sollte man definitiv
die Platte gegen jeden anderen Zugriff locken bzw. wieder unlocken (0x00 sowie 0x01).
Auch hier muß man logische Sektornummern in C/H/S umrechnen (siehe 0x63).
rc = DosDevIOCtl(hDisk,....);
rc = DosPhysicalDisk(INFO_FREEIOCTLHANDLE,NULL,0UL,&hDisk,sizeof(SHANDLE));
Lars
Andreas Peters
2010-12-11 10:05:19 UTC
Permalink
Hallo,

wie versprochen melde ich mich. :-) Ich habe nun den Festplatten Zugriff
via DosOpenL und DosRead realisiert. Funktioniert auch recht gut. Die
WBFS Festplatte wird erkannt, der Inhalt wird teilweise ausgelesen. Ich
muss allerdings noch lseek in DosCalls realisieren damit der Inhalt auch
komplett ausgelesen wird. Hier kann man sich den Code anschauen:
https://www.andreas-peters.net/websvn2/filedetails.php?repname=repo1&path=%2Fwiimms2%2Fsrc%2Flib-os2.c

Viele Grüße und Euch noch ein schönes Wochenende,

Andreas
Post by Andreas Peters
Hallo Marcel, hallo Lars,
leider ist es schon etwas spät. Ich werde daher das ganze Morgen einmal
ausprobieren. Schon einmal besten Dank für die Hilfe. Ich sag in den
kommenden Tagen Bescheid ob es so funktioniert wie gedacht. :-)
Beste Grüße,
Andreas
Post by Lars Erdmann
Post by Marcel Müller
Hallo,
Post by Andreas Peters
Ich habe eine Festplatte welche mit dem FileSystem WBFS (Wii Backup
FileSystem) formatiert ist. Um darauf zugreifen zu können benötigt
man einen WBFS Manager, wie z.B. wiimms. Diesen portiere ich gerade
nach OS2. Der WBFS Manager muss auf
die WBFS formatierte Festplatte im raw Modus zugreifen können. Unter
Linux ist das ja auch recht einfach. Dort funktioniert dieser Zugriff
einfach über das Device, z.B. /dev/sdb. In "c" würde das dann so
aussehen: fopen("/dev/sdb", "wb").
Wie kann ich aber unter OS2 auf eine Festplatte (via USB) im raw
Modus zugreifen? Die Festplatte wird zwar als Laufwerk F: eingehängt,
aber ein Zugriff via fopen("F:","wb") gibt nur ein "No such file or
directory aus". Würde mich über ein
paar Tips freuen. :-)
Du muss die richtigen Open-Flags setzen. OPEN_FLAGS_DASD oder so
ähnlich. Dann klappt es auch mit DosOpenL und DosRead/DosWrite/DosSeek.
Die glibc kann das aber nicht. Also mit fopen wird das AFAIK nichts.
Dem ist noch etwas hinzuzufügen: man kann raw auf eine Partition
(limitiert auf diese Partition) zugreifen oder man
kann raw auf die komplette Festplatte zugreifen.
DosOpenL("C:",&hFile,,&ulAction,0UL,FILE_NORMAL,...,OPEN_FLAGS_DASD |
OPEN_SHARE_DENYREADWRITE | OPEN_SHARE_DENYLEGACY |
OPEN_ACCESS_READWRITE,NULL)
bzw.
DosOpenL("C:",&hFile,,&ulAction,0UL,FILE_NORMAL,...,OPEN_FLAGS_DASD |
OPEN_SHARE_DENYREADWRITE | OPEN_ACCESS_READWRITE,NULL)
DosRead und DosWrite behandeln dann die ganze Partition wie eine große
Datei. Sinnigerweise sollte man DosOpenL,
DosSetFilePtrL, DosRead, DosWrite benutzen. So eine Partition ist ja
überlicherweise größer als 2 GByte (2^31: Limit von
DosSetFilePtr). Mit den "L" Versionen sind's dann immerhin 2^63 Bytes
(also 2 TByte glaub ich).
aber auch mittels IOCTL: DosOpen wie oben und dann logische IOCTLs
Category 0x8, Functions 0x44 (Write Track) 0x64 (Read Track). Man kann
dann sinnvollerweise noch die Partition gegen weiteren Zugriff locken
bzw. unlocken (0x00 sowie 0x01).
Auf jeden Fall muß man logische Sektornummern in C/H/S umrechnen (siehe 0x63).
HFILE hDisk = NULLHANDLE;
CHAR DiskNr[]={"1:"}; // für die erste Platte, 2: für die zweite usw.
rc =
DosPhysicalDisk(INFO_GETIOCTLHANDLE,&hDev,sizeof(SHANLDE),DiskNr,strlen(DiskNr));
/* nur 2 bytes von HFILE werden gesetzt ! */
und dann die physical IOCTLs Category 0x9, Functions 0x44 (Write Track)
0x64 (Read Track). Sinnvollerweise sollte man definitiv
die Platte gegen jeden anderen Zugriff locken bzw. wieder unlocken (0x00 sowie 0x01).
Auch hier muß man logische Sektornummern in C/H/S umrechnen (siehe 0x63).
rc = DosDevIOCtl(hDisk,....);
rc =
DosPhysicalDisk(INFO_FREEIOCTLHANDLE,NULL,0UL,&hDisk,sizeof(SHANDLE));
Lars
Lars Erdmann
2010-12-11 10:39:54 UTC
Permalink
Post by Marcel Müller
Hallo,
wie versprochen melde ich mich. :-) Ich habe nun den Festplatten Zugriff via DosOpenL und DosRead realisiert. Funktioniert auch recht gut. Die WBFS Festplatte wird erkannt, der Inhalt wird teilweise ausgelesen. Ich muss allerdings noch
lseek in DosCalls realisieren damit der Inhalt auch komplett ausgelesen wird. Hier kann man sich den Code anschauen: https://www.andreas-peters.net/websvn2/filedetails.php?repname=repo1&path=%2Fwiimms2%2Fsrc%2Flib-os2.c
Viele Grüße und Euch noch ein schönes Wochenende,
Andreas
Das bedeutet also, daß dir der Zugriff auf eine PARTITION (und nicht auf die gesamte Festplatte) ausreicht, richtig ?


Lars
Andreas Peters
2010-12-11 12:58:48 UTC
Permalink
Das ist richtig. Es könnte ja sein das jemand NTFS und eine WBFS
Partition gleichzeitig auf einer externen Festplatte für die WII hat.
Die WII kann mit beidem umgehen. Daher habe ich mich für DosOpenL
entschieden.
Post by Lars Erdmann
Post by Marcel Müller
Hallo,
wie versprochen melde ich mich. :-) Ich habe nun den Festplatten
Zugriff via DosOpenL und DosRead realisiert. Funktioniert auch recht
gut. Die WBFS Festplatte wird erkannt, der Inhalt wird teilweise
ausgelesen. Ich muss allerdings noch
lseek in DosCalls realisieren damit der Inhalt auch komplett
https://www.andreas-peters.net/websvn2/filedetails.php?repname=repo1&path=%2Fwiimms2%2Fsrc%2Flib-os2.c
Viele Grüße und Euch noch ein schönes Wochenende,
Andreas
Das bedeutet also, daß dir der Zugriff auf eine PARTITION (und nicht auf
die gesamte Festplatte) ausreicht, richtig ?
Lars
Marcel Müller
2010-12-11 16:32:29 UTC
Permalink
Hallo,
Post by Andreas Peters
Das ist richtig. Es könnte ja sein das jemand NTFS und eine WBFS
Partition gleichzeitig auf einer externen Festplatte für die WII hat.
Die WII kann mit beidem umgehen. Daher habe ich mich für DosOpenL
entschieden.
der Nachteil des Partitionszugriffs ist eher, dass man selbige erst per
LVM mit einem Laufwerksbuchstaben versehen muss, jedenfalls solange sie
nicht per USB dran hängt.


Marcel
Lars Erdmann
2010-12-11 10:48:27 UTC
Permalink
Post by Marcel Müller
Hallo,
wie versprochen melde ich mich. :-) Ich habe nun den Festplatten Zugriff via DosOpenL und DosRead realisiert. Funktioniert auch recht gut. Die WBFS Festplatte wird erkannt, der Inhalt wird teilweise ausgelesen. Ich muss allerdings noch
lseek in DosCalls realisieren damit der Inhalt auch komplett ausgelesen wird. Hier kann man sich den Code anschauen: https://www.andreas-peters.net/websvn2/filedetails.php?repname=repo1&path=%2Fwiimms2%2Fsrc%2Flib-os2.c
Viele Grüße und Euch noch ein schönes Wochenende,
Andreas
Bei DosOpenL solltest du sicherheitshalber "DENY_LEGACY" noch hinzufügen.
Es schadet auf jeden Fall nicht (OPEN_SHARE_DENYREADWRITE sollte allerdings
einen gemeinsamen Zugriff verhindern aber wer weiß welche BUGs der OS2 Kernel hat ...)
Eventuell solltest du DosOpenL, DosSetFilePtrL etc. (alle "L" Varianten)
nicht direkt laden sondern per run-time linking.
Du solltest dann einen Check einbauen ob diese Funktionen vorhanden sind.
Es gibt Systeme (pre Fixpak 13), die unterstützen womöglich nicht diese Calls ...
Aber das ist zugegebenermassen Kosmetik.

Lars
Carsten Arnold
2010-12-12 16:36:05 UTC
Permalink
Am Sat, 11 Dec 2010 10:48:27 UTC schrieb Lars Erdmann
Post by Lars Erdmann
Bei DosOpenL solltest du sicherheitshalber "DENY_LEGACY" noch hinzufügen.
Wofür ist DENY_LEGACY gut und welchen Zahlenwert hat es?
--
Gruß Carsten
Lars Erdmann
2010-12-12 20:10:41 UTC
Permalink
Post by Carsten Arnold
Am Sat, 11 Dec 2010 10:48:27 UTC schrieb Lars Erdmann
Post by Lars Erdmann
Bei DosOpenL solltest du sicherheitshalber "DENY_LEGACY" noch hinzufügen.
Wofür ist DENY_LEGACY gut und welchen Zahlenwert hat es?
1.) Es wird verhindert, daß eine Datei auf > 2 GB anwachsen kann.
Damit soll z.B. folgendes Szenario verhindert werden:
die erste Applikation öffnet/erzeugt eine Datei mittels DosOpenL. Vielleicht deshalb weil die Erwartung
ist, daß diese Datei auf eine Größe > 2 GB anwachsen wird oder daß sie schon > 2 GB ist.
Eine zweite Applikation öffnet diese Datei mittels DosOpen. Solange die Datei < 2 GB ist,
ist das auch kein Problem.
Die erste Applikation vergrößert die Datei nun auf > 2 GB. In diesem Moment wäre die zweite
Applikation nicht mehr in der Lage auf diese Datei voll zugreifen zu können.
Wenn OPEN_SHARE_DENYLEGACY aktiv ist, wird verhindert daß die Datei auf > 2 GB anwächst. Bei einer
DosWrite Operation die zu einer Datei > 2GB führen würde, würde man dann einen Fehler zurückbekommen.
Streng genommen gibt es also nur ein Problem bei shared Zugriff. Aber sicher ist sicher ...
Ich denke es ist IMMER eine gute Idee OPEN_SHARE_DENYLEGACY zu benutzen wenn man DosOpenL benutzt.
Sonst kann man die Datei auch gleich mit DosOpen öffnen.

Apropos: Für ein Dateisystem welches keine Dateien > 2 GB unterstützt (z.B. HPFS) wird DosOpenL auf DosOpen
gemappt (bzw. die weiteren ...L Funktionen auf die "nicht" ...L Funktionen). Aber natürlich kann man in diesem
Fall keine Dateien > 2 GB anlegen/bearbeiten/durchsuchen/etc. Die Funktionen kehren in diesem Fall mit einem
Fehler zurück.



2.) Der Wert ist in \os2tk45\h\bsedos.h definiert:
#define OPEN_SHARE_DENYLEGACY 0x10000000 /* 2GB */


Lars
Ruediger Ihle
2010-12-13 07:39:57 UTC
Permalink
Post by Lars Erdmann
Wenn OPEN_SHARE_DENYLEGACY aktiv ist, wird verhindert daß die
Datei auf > 2 GB anwächst. Bei einer DosWrite Operation die zu
einer Datei > 2GB führen würde, würde man dann einen Fehler
zurückbekommen.
Nicht daß ich das ausprobiert hätte, aber ich würde die englische
Doku etwas anders deuten:

OPEN_SHARE_DENYLEGACY = 0:
Wenn dieselbe Datei mittels DosOpenL und DosOpen geöffnet ist,
wird ein Anwachsen auf > 2BG vom System verhindert.

OPEN_SHARE_DENYLEGACY = 1:
DosOpen schlägt fehl, falls die Datei bereits mit DosOpenL
geöffnet ist und somit die Möglichkeit des Anwachsens auf
2GB+ besteht. Ich würde vermuten, daß DosOpenL ebenfalls
fehlschlägt, falls die Datei bereits mit DosOpen geöffnet
ist. Somit ist sichergestellt, daß alle beteiligten Parteien
mit großen Dateien zurechtkommen.


Da Andreas aber sowieso OPEN_SHARE_DENYREADWRITE benutzt, spielt
das hier keine Rolle.

Ansonsten ist beim Öffnen von Laufwerken OPEN_FLAG_FAIL_ON_ERROR
nicht die schlechteste Idee. Das verhindert die lästige "Drive
not ready" Box bei nicht vorhanden Laufwerken in Systemen, auf
denen das nicht via "AUTOFAIL" in CONFIG.SYS abgeschaltet ist.
--
Ruediger "Rudi" Ihle [S&T Systemtechnik GmbH, Germany]
http://www.s-t.de
Carsten Arnold
2010-12-13 08:46:26 UTC
Permalink
Am Sun, 12 Dec 2010 20:10:41 UTC schrieb Lars Erdmann
Post by Lars Erdmann
1.) Es wird verhindert, daß eine Datei auf > 2 GB anwachsen kann.
Aha. Danke für die ausführliche Erklärung.
Post by Lars Erdmann
#define OPEN_SHARE_DENYLEGACY 0x10000000 /* 2GB */
Gefunden, hatte halt erst direkt nach "DENY_LEGACY" suchen lassen.
Habs nun sogar im addendum.inf gefunden.

Da kommt bei mir noch eine weitere Frage auf. In bsedos.h stehen noch
zwei weitere mir unbekannte Flags, OPEN_FLAGS_NONSPOOLED und
OPEN_FLAGS_PROTECTED_HANDLE.

OPEN_FLAGS_PROTECTED_HANDLE wird ja auch im addendum.inf behandelt und
betrifft DosProtectOpen.
Aber zu OPEN_FLAGS_NONSPOOLED finde ich nichts, naja, jedenfalls keine
Erklärung, nur ein paar Beispiele.
Mir scheint, das soll wohl den Direktzugriff auf den Druckerport,
unter Umgehung des Spoolers ermöglichen. Stimmt das?
--
Gruß Carsten
Loading...