O2 Prepaid Stick ZTE MF160 und der Asynchrone RAS-Adapter

Ich hatte gerade zwei Stunden Spaß mit einem o² Prepaid Surf-Stick, dem ZTE MF160. Anstatt jetzt aber nur die Lösung aufzuführen, gebe ich mal den Weg dazu – vielleicht hilfts ja jemanden ähnliche Probleme mit Treibern zu lösen. In diesem Fall noch auf Windows XP bezogen, für die neueren Varianten ist es aber analog – dort unterscheidet sich nur der Weg um an die Datei am Ende zu gelangen. Dabei dürfte aber Google helfen. Ebenso werden die Geräte- und Dienstbezeichnungen auf Englisch sein, da ich sie der INF von Windows XP x64 entnommen habe. In einem deutschen Windows heißt der entsprechende Netzwerk-Adapter „Asynchroner RAS-Adapter“.

Vorwarnung: Ab hier geht’s an eingemachte… Wer das Problem nicht hat, oder sich nicht für die Innereien von Windows interessiert sollte weitersurfen

Obwohl die Treiber und die Software installiert waren, hing sich die Einwahl über den Connection Manager jedes mal auf. Auch über eine manuelle DFÜ Verbindung war nichts zu machen, dabei kam dann Fehler 633. Nachdem auch deinstallieren und neu installieren an einem anderem USB Port nicht geholfen hat, habe ich mir die Situation mal genauer angeschaut.

Bei jeder Einwahl erschien im Geräte-Manager, unter „Netzwerkkarten“, ein „RAS Async Adapter“ – allerdings mit dem berühmten gelben Ausrufezeichen. Der Treiber konnte nicht geladen werden. Ist zwar eine interne Komponente von Windows, und von daher etwas merkwürdig, aber Windows halt. Ich sage ihm also das er ihn gefälligst neu installieren soll, aber Pustekuchen. Am Ende verabschiedete sich der Treiber-Assistent mit der Meldung das ein Abschnitt zur Dienstinstallation in der INF-Datei des Treibers fehlerhaft sei von mir.

Jetzt ging das innerliche „WTF?!“ los. Gerade weil es eine Komponente von Windows selbst ist, war ich mir eigentlich recht sicher das dass nicht normal sein kann. Im Eventlog fand sich natürlich wieder exakt gar kein hilfreicher Eintrag (wofür hat Windows das Ding eigentlich? Da lobe ich mir doch syslog…). Jetzt hieß es also die INF zu finden, um nach der Ursache zu suchen. Das war auch recht simpel, im üblichen Ordner – `%windir%\inf` – fand ich die `netrasa.inf`.

Jetzt wird es spannend, sehen wir uns die INF mal etwas genauer an… Der erste interessante Abschnitt ist dieser:
[Msft.NTamd64]
; DisplayName Section DeviceID
; ----------- ------- --------
%Mp-AsyncMac-DispName% = Ndi-Mp-AsyncMac, "SW\{eeab7790-c514-11d1-b42b-00805fc1270e}"
%Mp-Irda-Dispname% = Ndi-Mp-Irda, "MS_IrdaMiniport"
%Mp-IrModem-Dispname% = Ndi-Mp-IrModem, "MS_IrModemMiniport"
%Mp-L2tp-Dispname% = Ndi-Mp-L2tp, "MS_L2tpMiniport"
%Mp-Pptp-Dispname% = Ndi-Mp-Pptp, "MS_PptpMiniport"
%Mp-Pti-Dispname% = Ndi-Mp-Pti, "MS_PtiMiniport"
%Mp-Atalk-DispName% = Ndi-Mp-Atalk, "MS_NdisWanAtalk"
%Mp-Bh-DispName% = Ndi-Mp-Bh, "MS_NdisWanBh"
%Mp-Ip-DispName% = Ndi-Mp-Ip, "MS_NdisWanIp"
%Mp-Ipx-DispName% = Ndi-Mp-Ipx, "MS_NdisWanIpx"
%Mp-NbfIn-DispName% = Ndi-Mp-NbfIn, "MS_NdisWanNbfIn"
%Mp-NbfOut-DispName% = Ndi-Mp-NbfOut, "MS_NdisWanNbfOut"
%Mp-Pppoe-DispName% = Ndi-Mp-Pppoe, "MS_PppoeMiniport"

Hier sehen wir, das dieser Treiber gleich mehrere (Pseudo-)Geräte bereitstellt. Die dazu gehörigen Klarnamen findet man am Ende der Datei, im Abschnitt `[Strings]` – wobei die Platzhalter ja schon weitgehend selbsterklärend sind. Uns interessiert an dieser Stelle vor allem der Eintrag mit `%Mp-AsyncMac-DispName%` als DisplayName – wir sind also in dieser Datei definitiv an der richtigen Stelle.

Nächster Schritt: Herausfinden welche Dienste von diesem Treiber, für dieses Subgerät des Treibers, installiert werden. Dazu suchen wir nun den Abschnitt `[Ndi-Mp-AsyncMac.Services]` – also der Text aus „Section“ DOT „Services“. Dort wird festgelegt welche Dienste für diesen Treiber installiert werden.
[Ndi-Mp-AsyncMac.Services]
AddService = AsyncMac, 2, Svc-Mp-AsyncMac, Evt-Rasmsg

Interessant ist hier der dritte Parameter, `Svc-Mp-AsyncMac`. Dies ist der Name des Abschnitt den wir als nächstes suchen müssen – wo der Dienst selbst definiert wird.

Dann wollen wir uns den Dienst doch mal näher anschauen…
[Svc-Mp-AsyncMac]
DisplayName = %Svc-Mp-AsyncMac-DispName%
ServiceType = 1 ;SERVICE_KERNEL_DRIVER
StartType = 3 ;SERVICE_DEMAND_START
ErrorControl = 1 ;SERVICE_ERROR_NORMAL
ServiceBinary = %12%\asyncmac.sys
Description = %Svc-Mp-AsyncMac-DispName%

Aha, es ist also ein Kernelmode-Treiber wie uns `ServiceType` sagt. Das heißt also das wir diesen Dienst nicht unter „Dienste“ finden werden, sondern unter „Nicht-PnP-Treiber“ im Geräte-Manager (ein Relikt von Windows NT). Diese Kategorie wird übrigens nur angezeigt wenn man unter „Anzeige“ den Punkt „Ausgeblendete Geräte anzeigen“ aktiviert. Nur werden wir dort definitiv kein `%Svc-Mp-AsyncMac-DispName%` finden, denn `Description` verweist wieder nur auf eine Variable. Dem Abschnitt `[Strings]` können wir entnehmen das wir nach „RAS Asynchronous Media Driver“ (Deutsch: „Asynchroner RAS -Medientreiber“ | das fehlerhafte Leerzeichen ist Original Microsoft) schauen müssen.

Und tatsächlich, dieser Dienst stand auf automatischer Start – war aber im Status „beendet“ und ließ sich auch nicht manuell starten da eine Datei fehlte. Dem Eintrag `ServiceBinary` können wir entnehmen das dieser Dienst praktischerweise nur aus einer Datei, der `asyncmac.sys`, besteht. Etwas ungläubig ließ ich nun eine Suche über die Platte laufen ob die Datei wirklich fehlt, und, warum auch immer, sie fehlte wirklich.

Also eine Windows CD geschnappt und die Rohdatei, `asyncmac.sy_`, aus dem Quellordner (`i386` für x86, `amd64` für x64) gefischt. Diese muss nun noch in `.cab` umbenannt, und anschließend entpackt werden. Die entpackte Datei nun noch an die richtige Stelle schieben – in diesem Fall %12%. Aber wo wird dieser Platzhalter definiert? Jedenfalls nicht in der INF selbst… Also gehen wir wieder mal auf die Suche.

Hier wird nun der größte Nachteil von Windows, die zentrale und aufgeblähte Registry, zu einem Vorteil. Denn natürlich werden dort auch die Dienste angelegt. Also `regedit` gestartet, und eine Suche nach „asyncmac.sys“ (oder alternativ dem Text aus `Description`) machen. Nun landen wir (früher oder später) bei dem Dienst, zu erkennen an zwei DWORD-Werten `Start`und `Type`. Der String `ImagePath` sagt uns wo Windows die Datei erwartet. Also die entpackte Datei hier hin verschieben, in diesem Fall `%windir%\system32\drivers`.

Nun sollte sich im Geräte-Manager das Pseudo-Gerät „RAS Asynchronous Media Driver“ auch wieder starten lassen. Sollte aktuell noch eine Instanz des Eintrags unter „Netzwerkkarten“ mit gelben Fragenzeichen existieren, kann nun dafür eine automatische Treiberinstallation die auch durchlaufen wird. Kein ordentliches Windows-Tutorial ohne obligatorischen Reboot, jetzt ist der perfekte Zeitpunkt. (Eigentlich sollte der nicht mal nötig sein, aber sicher ist sicher ^^)

Und jetzt wird die Verbindung auch einwandfrei funktionieren.

Gelesen: 6388 · Heute: 2 · Zuletzt: 21. November 2024

Das könnte dich auch interessieren …

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.