PCI-Bus scannen
Verfasst: 27.03.2007 20:30
Zufällig habe ich am Wochenende mitbekommen, das TVicPort für nicht-kommerzielle Anwendungen Free-Ware geworden ist. Mit diesem Programm (bzw. der DLL) können Ports gelesen und beschrieben werden, ähnlich inpout32 oder winio, aber praktisch ohne Einschränkungen.
Auf die Schnelle habe ich damit mal ein Progrämmchen zum PCI-Bus scannen geschrieben, alles weitere steht im Code.
Gruss
Helle
Auf die Schnelle habe ich damit mal ein Progrämmchen zum PCI-Bus scannen geschrieben, alles weitere steht im Code.
Code: Alles auswählen
;- Scannen des PCI-Busses (#0) um Gerät (Device) sowie Hersteller (Vendor) zu ermitteln
;- "Helle" Klaus Helbing, 27.03.2007, PB v4.02
;- Verwendet wird dazu die TVicPort.dll, erhältlich von EnTech, "http://www.entechtaiwan.com/dev/port/index.shtm"
;- Die DLL ist (Haupt-) Bestandteil des für nicht-kommerzielle Anwendungen freien Programms TVicPort
;- Die Installation ist harmlos, wie bei ähnlichen Programmen auch wird eine DDL nach %WINDIR%\System
;- und eine SYS nach %WINDIR%\System32\Drivers kopiert
;- Die DLL ist gut dokumentiert und z.B. auch für Parallel-Ports bestens geeignet, dafür sogar mit vielen Extras
;- Auf "http://www.pcidatabase.com" sind Vendor- und Device-Listen frei erhältlich, mit deren
;- Hilfe Hersteller und Gerät namentlich zu bestimmen sind. Könnte man auch in´s Programm einbauen!
;- Aufbau Bus-Configuration-Address-Register, Adresse $0CF8:
;- Bit 0-1: Reserviert
;- Bit 2-7: Register-Nummer 0-63, für Vendor und Device nur 0 von Interesse
;- Bit 8-10: Funktions-Nummer 0-7
;- Bit 11-15 Device-Nummer 0-31
;- Bit 16-23 Bus-Nummer 0-255, hier nur 0; 1 wäre z.B. der AGP-Bus
;- Bit 24-30 Reserviert
;- Bit 31: Configuration-Address-Register Ein/Aus
If OpenWindow(0, 0, 0, 420, 400, "Geräte und ihre Funktionen am PCI-Bus (Bus-Nr.#0)", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
ListViewGadget(0, 10, 10, 400, 380)
If OpenLibrary(0, "TVicPort.dll") = 0
MessageRequester("TVicPort", "Bibliothek TVicPort.dll konnte nicht geöffnet werden!")
End
EndIf
CallFunction(0, "OpenTVicPort")
If CallFunction(0, "IsDriverOpened")
Y = $80000000 ;Bit 31 setzen
For J = 0 To 31 ;Device-Nr.
Y & $FFFFF8FF ;Funktions-Nr. auf Null setzen
For I = 0 To 7 ;Funktions-Nr.
CallFunction(0, "WritePortL", $0CF8, Y)
X = CallFunction(0, "ReadPortL", $0CFC) ;Bus-Configuration-Data-Register auslesen
If X <> $FFFFFFFF
X$ = RSet(Hex(X), 8)
X1$ = "Device-Nr. = " + Str(J)
X2$ = "Funktions-Nr. = " + Str(I)
X3$ = "Vendor = " + Mid(X$, 5, 4)
X4$ = "Device = " + Mid(X$, 1, 4)
AddGadgetItem (0, -1, X1$ + " , " + X2$ + " : " + X3$ + " , " + X4$)
EndIf
Y + $100
Next
Next
Else
MessageRequester("TVicPort", "Driver konnte nicht geladen werden!")
EndIf
CallFunction(0, "CloseTVicPort")
Repeat
Delay(1)
Until WindowEvent() = #PB_Event_CloseWindow
EndIf
End
Helle