Seite 1 von 1

Laufwerks-Liste

Verfasst: Sa 12. Aug 2023, 10:55
von LotharS
Ich möchte eine Liste aller nur _lokalen_ Lauwerke erhalten, also nicht Netzlaufwerke. Rexx liefert das genau mit SysDriveMap(,'LOCAL').
Mit (zugegeben laienhaftem...) Versuch mit DosQueryCurrentDisk() erhalte ich bloß _alle_ gültigen Laufwerke. Eigentlich sollte es doch einen besseren möglichst schnellen Trick aus dem Toolkit geben (den etwa die Rexx-Bauer einst verwendet haben?). Nur welchen? :)

Nachtrag: Am liebsten so etwas wie anschließend GetDriveType() aus Win portiert ;)

Re: Laufwerks-Liste

Verfasst: So 13. Aug 2023, 11:48
von erdmann
Ich glaub, das geht nur über einen IOCTL Aufruf in der "logical Disk" Kategorie (DSK_GETDEVICEPARAMS). Oder war es die "physical disk" Kategorie (PDSK_GETDEVICEPARAMS)?

Siehe auch hier, Rudi hat es schon gelöst:
https://trac.netlabs.org/qt4/ticket/139

Re: Laufwerks-Liste

Verfasst: So 13. Aug 2023, 14:59
von LotharS
@Lars: Danke für die Hilfe!
Habe nach frischem Frühstück :idea: mal mit DosQueryFSAttach() probiert, demnach könnte die Beschränkung aufs resultierende FSQBuffer2-iType =3 meine Lösung sein. Code etwas bequemer kopierbar von hier, allerdings etliche Zeilen mehr als RexxUtil-SysDriveMap() :) aber jedenfalls irgendwie verwendbar in meiner qt-Studie.

Re: Laufwerks-Liste

Verfasst: Mo 14. Aug 2023, 10:39
von erdmann
LotharS hat geschrieben: So 13. Aug 2023, 14:59 @Lars: Danke für die Hilfe!
Habe nach frischem Frühstück :idea: mal mit DosQueryFSAttach() probiert, demnach könnte die Beschränkung aufs resultierende FSQBuffer2-iType =3 meine Lösung sein. Code etwas bequemer kopierbar von hier, allerdings etliche Zeilen mehr als RexxUtil-SysDriveMap() :) aber jedenfalls irgendwie verwendbar in meiner qt-Studie.
Hast du das schon ausprobiert? Ich meine, DosQueryFSAttach ruft den IFS entry point FS_ATTACH in den geladenen IFSen auf. Wäre in der Tat interessant, was die einzelnen IFSen da zurückmelden. Z.B. liefert mein DUMPFS.IFS (das Dateisystem zum Lesen von System Dumps) da nur einen Fehler zurück, macht also gar nichts.

Nach dem Durchlesen der "DosQueryFSAttach" Hilfe: könnte doch funktionieren, diese API Funktion scheint einen Mischmasch diverser FS Treiberfunktionen zurückzugeben, inklusive eines frei definierbare Anteils der von FS_ATTACH zurückgeliefert wird. Allerdings kann man über den iType nicht zwischen CD-ROM und Harddisk unterscheiden .

Vorsicht auch mit pcbBuffLength: im Gegensatz zum Codebeispiel sollte dein Puffer wesentlich größer als sizeof(FSQBUFFER2) sein weil die letzten drei Felder in FSQBUFFER2 dynamische Länge haben (es sind jeweils ASCII Strings!!!). Die einzelnen Längen dieser Strings (hoffentlich inklusive Zero Terminator) stehen dann in den vorhergehenden Längenfeldern.

Re: Laufwerks-Liste

Verfasst: Mo 14. Aug 2023, 12:20
von LotharS
erdmann hat geschrieben: Mo 14. Aug 2023, 10:39 Hast du das schon ausprobiert? Ich meine, DosQueryFSAttach ruft den IFS entry point FS_ATTACH in den geladenen IFSen auf. Wäre in der Tat interessant, was die einzelnen IFSen da zurückmelden.
Woher ganz genau die Informationen stammen, da bin ich überfragt... Hier ein paar Beispiele:

Code: Alles auswählen

iType     = 3
szName    = C:
szFSDName = JFS
rgFSAData =

iType     = 4
szName    = J:
szFSDName = NDFS32
rgFSAData = NetDrive

iType     = 3
szName    = M:
szFSDName = CDFS
rgFSAData =
Mich interessieren in dem Fall höchstens Treffer in "local drives", dh. von allen zuvor erkannten nur solche vom iType=3. Vom Ergebnis dann anscheinend wie aus RexxUtil-SysDriveMap(, 'LOCAL').
Z.B. liefert mein DUMPFS.IFS (das Dateisystem zum Lesen von System Dumps) da nur einen Fehler zurück, macht also gar nichts.
Hast Du mal zum Vergleich das Command "df -a -T" probiert?

Re: Laufwerks-Liste

Verfasst: Mo 14. Aug 2023, 19:59
von ak120
LotharS hat geschrieben: Sa 12. Aug 2023, 10:55
Nachtrag: Am liebsten so etwas wie anschließend GetDriveType() aus Win portiert ;)
Diese Funktion ist doch bereits im Umfang von Open32 enthalten und kann wie unter Win32 genutzt werden. Die os2win.h sollte genügen?

Re: Laufwerks-Liste

Verfasst: Mo 14. Aug 2023, 21:45
von erdmann
Das geht leider nicht so einfach. Die Open32 API steht nur zur Verfügung wenn das Programm eine spezielle Main Routine (WinMain) enthält die von der Main Routine registriert werden muss. Warum das so ist, weiß ich leider auch nicht. Auf jeden Fall ist das schlecht in eine Library oder separates Object File zu integrieren.