mikrocontroller.net

Forum: PC-Programmierung Netzwerkkarte auf 10MBit stellen


Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte die Netzwerkkarte im PC per software zwischen 10 und 100 MBit 
umstellen können (Windows XP). In der Systemsteuerung kann ich das ohne 
Probleme vornehmen (Eigenschaften der Netzwerkkarte und dann 
Erweitert...).

Aber ist sowas auch software-technisch möglich? Ist schon eine etwas 
speziellere Frage, zu der ich auch per googel noch nichts gefunden habe.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist eine Konfigurationseinstellung des Netzwerkkartentreibers. Ob 
der eine programmatisch bedienbare Schnittstelle bietet, um das 
umzukonfigurieren, wird nur der Hersteller des Treibers wissen.

Wozu braucht man das?

Autor: Mathias H. (mathew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Wozu braucht man das?

Lupin schrieb:
> In der Systemsteuerung kann ich das ohne
>
> Probleme vornehmen

vorallem dann wenns eh schon geht

Autor: Gerry E. (micky01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
...
>
> Wozu braucht man das?

Das ist ganz einfach:

Wenn man eh schon weiß, dass die Leitung nur 10MBit/s hergibt, so kann 
man dadurch den "Intelligenzbolzen" unter den Netzteilnehmern 
untersagen, dass sie andauernd versuchen untereinander eine schnellere 
Verbindung auszuhandeln. Das kostet nämlich mehr Zeit als durch die 
feste Datenrate verloren geht. Eventuell kommt sogar überhaupt keine 
Verbindung zustande.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darum ging es mir nicht; den Sinn des Abschaltens der "auto negotiation" 
kenne ich.

Warum aber will man das programmatisch anstellen, also ohne den Weg über 
den Gerätemanager?

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Selbstverständlich kann man das machen. Wo stehen denn solche Daten?
In der Registry natürlich! Und die kann man ja per WIN-API verändern.

Du machst folgendes:

Geh in den Gerätemanager auf Deine Netzwerkkarteneigenschaften und dann 
unter "Details" auf "Passende Geräteerkennung". Da steht eine ID in der 
Forum "PCI\ven......".

Jetzt suchst Du per regedit in der Registry im Schlüssel 
"HKLM\SYSTEM\CurrentControlSet\Control\Class" nach dieser ID.

Im selben Schlüssel, wo diese ID auftaucht, müsste auch ein Wert mit dem 
Namen "RequestedMediaType" stehen. Dieser gibt die Geschwindigkeit an.
Welcher Zahlenwert für RequestedMediaType welche Geschwindigkeit 
bedeutet, kannst Du herausfinden, indem Du im Gerätemanager die 
Geschwindigkeit einstellst und dann in der Registry nachschaust.

Jetzt kennst Du den Schlüssel und den Wert. Voila.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage ist dann natürlich noch, wann dieser Wert ausgewertet wird.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Die Frage ist dann natürlich noch, wann dieser Wert ausgewertet wird.

ich denke nach menueller änderung in der Reg muss man ein Event 
rumschicken das sich die Konfig geändert hat.

Autor: Marcus Müller (marcus67)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö, fast alle Netzwerksettings in der Registry sind erst nach einem 
Reboot aktiv.

Gruß, Marcus

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus Müller schrieb:
> Nö, fast alle Netzwerksettings in der Registry sind erst nach einem
> Reboot aktiv.

da man auch die Geschwindigkeit im Gerätemanager einstellen kann geht es 
scheinbar auch im Betrieb. Für sotwas gibt es ja extra Events damit die 
Software die geänderten werte ausesen kann. (weiss jetzt aber nicht ob 
es in diesem Fall geht)

Autor: User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Üblicherweise öffnet man dem Treiber und schickt ihm ein 
DeviceIOControl(...). Welches, dafür gibt es evtl. Schnüffelprogramme.

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich hab jetzt auch nochmal ein wenig rumprobiert.

Siehe C-Code unten. Damit kann man die Registrysettings neu einlesen 
lassen. Oder ein Gerät aktivieren oder deaktivieren (so wie im 
Gerätemanager).

Die Zeichenkette für die Geräteinstanz (device_instance_id) bekommt man 
im Gerätemanager unter Details -> Geräteinstanzerkennung.

Um das Gerät zu aktivieren/deaktivieren, muss man 
PropChangeParam.StateChange auf DICS_ENABLE bzw. DICS_DISABLE 
setzen.

Auf die Überprüfung von Rückgabewerten habe ich jetzt mal verzichtet, 
und es fehlt auch das Setzen der eigentlichen Registrywerte. Das bleibt 
dem Leser als Übung überlassen.

#include <windows.h>
#include <setupapi.h>
#include <cfgmgr32.h>

int main(int argc, char* argv[])
{
  // Zeichenkette aus Gerätemananger (Details\Geräteinstanzerkennung)
  char device_instance_id[] = "BLABLABLABLA";
  
  DWORD device_instance;

  // device_instance holen
  CM_Locate_DevNode(&device_instance,device_instance_id,CM_LOCATE_DEVNODE_NORMAL);  
   
  HDEVINFO HDevInfo = SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES);

  SP_DEVINFO_DATA DeviceInfoData;
  DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);

  // über alle Geräte iterieren und nach Gerät suchen
  for(size_t n=0; SetupDiEnumDeviceInfo(HDevInfo,n,&DeviceInfoData); n++)
  {      
    if(DeviceInfoData.DevInst == device_instance) break;     
  }

  SP_PROPCHANGE_PARAMS PropChangeParam;

  PropChangeParam.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
  PropChangeParam.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
  PropChangeParam.StateChange = DICS_PROPCHANGE;
  PropChangeParam.Scope = DICS_FLAG_GLOBAL;
  PropChangeParam.HwProfile = 0;

  // Installationsparameter setzen und Installer aufrufen
  SetupDiSetClassInstallParams(HDevInfo,&DeviceInfoData,(SP_CLASSINSTALL_HEADER*)&PropChangeParam,sizeof(PropChangeParam));
  SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,HDevInfo,&DeviceInfoData);

  return 0;
}





Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag:

Nicht bei allen Netzwerkkarten heißt der Registryschlüssel 
"RequestedMediaType". Bei meiner Intel-Karte heißt er "SpeedDuplex".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.