USB



  • Wenn ein selber gebasteltes Hardware element via usb angeschlossen wird erstellt dann windows automatisch einen filename??

    Irgendwas Grundsätzliches Wissen fehlt mir hier noch... hm...



  • Dass ist keine Dateinamen sondern ein Devicename. Windows generiert für jedes eingesteckt USB-Gerät solch einen Devicenamen.



  • ScriptGod schrieb:

    Dass ist keine Dateinamen sondern ein Devicename.

    Ich schrieb ja auch

    MiC++ha schrieb:

    praktisch der "Filename"

    C:\ ist auch ein Device und c:\Ordner\Datei.txt ist Device\Verzeichnis\Dateiname

    \.\USB oder \.\LPT1 ist das Device wie C:\ und der Regkey der Path.
    Es wird also praktisch als "Filename" verwendet und der regcode ist der Path und Dateiname der Hardware und \.\USB das Device.
    In der MSDN wird ja auch nur Filename angegeben und nicht File-/Devicename:

    HANDLE CreateFile(
      LPCTSTR lpFileName, // <- guckst du hier
      DWORD dwDesiredAccess,
      DWORD dwShareMode,
      LPSECURITY_ATTRIBUTES lpSecurityAttributes,
      DWORD dwCreationDisposition,
      DWORD dwFlagsAndAttributes,
      HANDLE hTemplateFile
    );
    

    Mit \\ wird signalisiert das sich etwas auserhalb des eigenen Dateisystems befindet, z.B.: \\PC2\Ordner\Datei.txt in einem LAN, wobei \\PC2 wiederum das Device ist, und mit .\DEVICENAME wird angegeben das es ein internes Device ist und unter "DEVICENAME" zu finden ist der Regkey wiederum der Path wie bei einem Filename, es könnte ja auch ein Wechseldatenträger am USB sein und schon
    kommt man wieder auf ein Filename.

    Fazit: ich sagte "praktisch" da man in der Praxis immer eine Art Filename verwendet. Und wenn man die Struktur sich so merkt wie ich das da oben beschrieb, dann kommt man auch klar.
    Es heist ja auch CreateFile und ein CreateDevice giebt nur bei Multimedia, bzw. DirectX.

    Übersicht:
    Dateien: Device\Ordner\Ordner\Datei (c:\Programme\CPP\source.cpp)
    Geräte: \.\Device#Register-Path (\.\USB#Controler#INSTANCE#ClassGUID)
    --------------------------------> \.\USB#VID_145E&PID_0076#INST_0#{4d36e96a-e325-11ce-bfc1-08002be10318})
    ------in Register: \HKEY_LOCAL_MACHINE\ENUM\USB\VID_145E&PID_0076\INST_0\-Die Keys- (ClassGUID)

    Das am Beispiel meiner Digicam die als Wechseldatenträger angesprochen werden kann.

    Für die Thread-Frage bedeutet dies:
    1. USB Geräte auflisten und bei dem im Schlüssel "DeviceDesc" der Name bzw. Beschreibung seines Gerätes sitzt, die ClassGUID auslesen.
    2. Den Path bzw. Filename daraus zusammen setzten und
    3. Mit CreateFile aufrufen.

    ich hoffe ich konnte dem Gen.d.Pz.Tr.Seb jetzt bissel mehr Klarheit verschafen



  • Ich hab jetzt einmal z.b. den ordner meiner (usb) maus gefunden.

    Versteh aber noch nicht so richtig aus welchen keys ich den string zusammensetzten soll.

    \.\USB#Controler#INSTANCE#ClassGUID

    DEr erste und der letzte Teil sind klar. Wie ich auf die andren komm check ich nicht so ganz.



  • Achja, nochwas;

    Selbst wenn ich es schaffe die Daten aus der Registry auszulesen (indem ich mir die richtigen suche), wie finde ich die Daten dann auf anderen Rechnern? Legt Windows dann immer dieselben Daten auf jedem System an oder muss ich wieder irgendwie von vorne anfangen??



  • Du mußt auf anderen Rechnern, bzw. auch bei deinem im Programm nach dem Gerät suchen. "EnumRegisterWordProc()" glaub ich war das um die Strings zu finden, schau am besten mal in der MSDN.

    Daraus baust du dann den Phat. Wenn du jetzt bei dir mit regedit danach gesucht hast, dann steht unten in der Statusleiste der Path.



  • \.\USB#Controler#INSTANCE#ClassGUID

    Könnest du mir sagen wo ich Controller und Instance finde?

    Welcher von den Keys?



  • Gehört der String so aus?

    HardwareID#(instance????)#ClassGUID

    Gehört der Key Hardware ID gekürzt?



  • HANDLE hUsb;
        hUsb = CreateFile("\\.\USB\Vid_0c76&Pid_0005#5&255e8704&0&1#{36FC9E60-C465-11CF-8056-444553540000}",
                        GENERIC_WRITE,
                        FILE_SHARE_WRITE,
                        NULL,
                        OPEN_EXISTING,
                        0,
                        0 );
    
        if( hUsb == INVALID_HANDLE_VALUE )
        {
           ShowMessage("Invalid Handle!");
        }
    
        DWORD dwRead;
    
        char lpBuf[12];
    
        // Issue read operation.
        ReadFile( hUsb, lpBuf, 1, &dwRead, NULL );
        ShowMessage(dwRead);
    
        CloseHandle( hUsb );
    

    Das hab ich mal gecodet. Ich versuche kontakt mit meinem USB Stick aufzunehmen. Krieg aber immer nur Invalid Handle. Hab es auch schon mit der (usb) Maus probiert.

    Ich glaub ich kapiuer die zusammensetzung von dem String noch immer nicht so ganz.



  • Ich kriegs nicht hin. Hat den keiner eine Ahnung was ich da eigentlich falsch mache?



  • Aaah befreiend. Ich habe es endlich geschafft meinen Usb Stick anzusprechen. (bzw. ich hab eindlich ein Handle bekommen)

    Aber eine weitere Frage; Wenn ich ein eigenes Gerät entwickle (was ich auch tun werde), bekommt dann das Gerät auf jedem (Windows) Rechner denselben ipFilename??


Anmelden zum Antworten