mikrocontroller.net

Forum: PC-Programmierung IOCTL_GET_VERSION Problem (Error 1, ERROR_INVALID_FUNCTION)


Autor: Ai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ihr,

nachdem ich nun an meinem USB Problem weitergemacht habe kommt ein 
komischer Fehler. Ich habe das Handle auf einen USB Device, aber
ich kann komischer Weise keine DeviceIoControl Funktionen darauf 
aufrufen.

Zum Ausprobieren habe ich einen einfachen Fall genommen, einfach mal die 
Treiberversion zu erfragen. Jedoch wird bei diesem Aufruf immer mit 
Error 1 (ERROR_INVALID_FUNCTION) beendet.

Hier ist mein Code dafür. Nix besonderes.

1. Handle holen (funktioniert)
2. Treiberversion erfragen (funktioniert nicht)
3. Handle wieder abgeben (funktioniert)

                DWORD nBytes;
    DRV_VERSION dVer = {0, 0, 0};

    HANDLE hUsbDevice = CreateFile( TEXT("\\\\?\\usb#vid_067b&pid_2305#5&10b270c0&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"),                   // name of the file or device to be created or opened. 
              GENERIC_READ | GENERIC_WRITE, // access mode of device
              0,                            // dont share device
              NULL,                         // handle can not be inherited by any child process
              OPEN_EXISTING,                // opens a file or device, only if it exists
              0,                            // no device attributes and flags
              NULL);                        // handle to a template file with the GENERIC_READ access right
    
    if(hUsbDevice == INVALID_HANDLE_VALUE)
      wcout << L"Couldn't get handle" << endl;
    else
      wcout << L"Handle: " << hUsbDevice << endl;
            

    // DeviceIoControl need administrator privileges to succeed
    bool success = DeviceIoControl(  hUsbDevice,
              IOCTL_GET_VERSION,
              NULL,
              0,
              &dVer,
                    sizeof(DRV_VERSION),
                                                        &nBytes,
              NULL);
    if(success)
      printf("Version: %d.%d\n",dVer.major,dVer.minor);
    else
      printf("Error %d in IOCTL_GET_VERSION\n",GetLastError());
            
    

    // close device
    CloseHandle(hUsbDevice) ;



Kann mir jemand einen Tipp geben?

Viele Grüße,
Ai

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.