Weisen Sie einem Gerät über Windows eine Seriennummer zu, um die Gamepads zu unterscheiden

451
NaturalBornCamper

Ich habe 4 generische USB-Controller auf meinem Computer installiert, damit meine Neffen zusammen spielen können, ohne zu kämpfen ("Generic", da ich kein Geld für den Kauf von 4 offiziellen Xbox-Controllern habe).

Alle Controller arbeiten in ihren Spielen vollkommen unabhängig voneinander. Da es sich jedoch um generische chinesische Elektronikgeräte handelt, haben sie alle dieselbe Konfiguration. Wenn Sie die Konfiguration für einen der Controller in Steam ändern, wird für jeden Controller dieselbe Konfiguration zugewiesen.

Wie wir in Steam / logs / controller.txt sehen können, haben die Geräte keine Seriennummern, und ich vermute, dies ist der Grund, warum alle 4 dieselbe Konfiguration verwenden. In der letzten Zeile weist es eine Seriennummer (79-6-6151b0) zu, weist jedoch jedem die gleiche Nummer zu.

[2018-03-12 00:46:50] Local Device Found type: 0079 0006 path: sdl://15 serial_number:  [2018-03-12 00:46:50] Manufacturer:  [2018-03-12 00:46:50] Product: Generic1 [2018-03-12 00:46:50] Release: 0 [2018-03-12 00:46:50] Interface: -1 [2018-03-12 00:46:50] !! Steam controller device opened for index 2. [2018-03-12 00:46:50] Controller has an Invalid or missing unit serial number, setting to '79-6-6151b0' 

Ich bin mir bewusst, dass der SN in der Firmware der Controller gebrannt ist und somit unzugänglich ist. Weiß jemand, ob es eine Möglichkeit gibt, eine Seriennummer auf Windows-Ebene zu emulieren oder so zu machen, dass sie eindeutig ist?

1
Ja, die iSerialNumber sollte in Hardware eingebunden werden, da dies für Massenspeichergeräte eine eindeutige Nummer für eine bestimmte VID / PID ist. Es muss ein besonderes Verfahren in der Test- / Bin-Phase sein, was die Kosten erhöht. Wenn der Win10-Treiber einen Stecker für die fehlende iSerialNumber besitzt, aber für alle identischen Controller dieselbe Nummer hat, liegt der Treiberfehler vor. Technisch gesehen hat jedes USB-Gerät ein anderes Handle, da das Betriebssystem dann mit unterschiedlichen USB-Adressen auflistet. Daher sollte es möglich sein, unterschiedliche iSerialNumbers zu generieren. Ale..chenski vor 6 Jahren 0
Haben Sie versucht, alle vier Controller über einen externen Hub anzuschließen? Vielleicht wird der Treiber in den Sinn kommen und verschiedene iSerialNumbers machen? Ale..chenski vor 6 Jahren 0
Oh, so wäre es möglich? Großartig! Ich habe es eigentlich über einen Hub ausprobiert, so sind sie alle immer miteinander verbunden. Abgesehen davon habe ich versucht, mir die Treiberdetails und die Datei driver.inf anzusehen. Jede hatte eine eindeutige Nummer, die beim Herstellen der Verbindung immer wieder angezeigt wird, aber ich weiß nicht, woher sie kommt NaturalBornCamper vor 6 Jahren 0

1 Antwort auf die Frage

2
Keltari

Ich glaube nicht, dass Sie dafür eine einfache Lösung finden werden. Ehrlich gesagt, ich denke, Sie werden mit diesen Controllern so leben müssen, wie sie sind, oder sie zurückgeben und zu einem gebrauchten Spieleladen gehen und einige gebrauchte Controller für weniger Geld abholen.

Ich würde wetten, dass die internen Schaltkreise in diesen Controllern nur Chips sind, was bedeutet, dass Sie nicht darauf zugreifen können. Das schließt die Veränderung der Chips selbst aus.

Was das Ändern auf Windows-Ebene angeht, könnte dies technisch möglich sein, aber ich glaube nicht, dass dies irgendjemand vorher versucht hätte oder versuchen würde.

Ich hatte keine einfache Lösung erwartet, hehe;) Ich hatte gehofft, die input.inf-Datei für jede Datei zu ändern und etwas auf Windows-Ebene zu hacken. Und wusste, wenn es einen Weg gäbe, könnte mir jemand hier in die Startrichtung weisen, da Google nichts bringt. Ich warte ein bisschen, bis andere Leute Ideen haben, wenn nichts auftaucht, akzeptiere ich Ihre Lösung als einzige Eins, danke Freund! NaturalBornCamper vor 6 Jahren 0
@NaturalBornCamper In Wirklichkeit müssten Sie einen benutzerdefinierten Gerätetreiber für die Controller erstellen. Das bedeutet, Sie müssten die gesamte Funktionalität der Controller codieren. Dann müssten Sie Code schreiben, um einen Weg zu finden, sie eindeutig zu identifizieren (wenn möglich ohne Seriennummer) und dann eine Seriennummer zu vergeben. Da eine Seriennummer das ist, was sie einzigartig machen sollte ... dort ist Ihr Problem. Möglicherweise gibt es eine Möglichkeit, dies zu tun, aber der Arbeitsaufwand ist kostspieliger als der Kauf neuer Steuerungen. Keltari vor 6 Jahren 0
Ich hatte eigentlich gehofft, das tatsächlich zu tun, den bereits verwendeten Treiber zu nehmen und nur ein paar Zeilen zu ändern, um die Seriennummer zu generieren. Aber ich verstehe, wie jeder Controller dann den entsprechenden Treiber verwenden würde, ohne ihn eindeutig identifizieren zu können ... NaturalBornCamper vor 6 Jahren 0