Windows-skrivbordsapp för en USB-enhet

I den här artikeln får du lära dig mer om hur ett program kan anropa WinUSB-funktioner för att kommunicera med en USB-enhet. För ett sådant program måste WinUSB (Winusb.sys) installeras som enhetens funktionsdrivrutin. WinUSB i enhetens kärnmodslagestack. Den här drivrutinen ingår i Windows i mappen \Windows\System32\drivers.

Om du använder Winusb.sys som en USB-enhets funktionsdrivrutin kan du anropa WinUSB-funktioner från ett program för att kommunicera med enheten. Dessa funktioner, som exponeras av DLL-Winusb.dlli användarläge, förenklar kommunikationsprocessen. I stället för att konstruera enhets-I/O-kontrollbegäranden för att utföra usb-standardåtgärder (till exempel att konfigurera enheten, skicka kontrollbegäranden och överföra data till eller från enheten), anropar program motsvarande WinUSB-funktion.

Winusb.dll använder programbaserade data för att konstruera lämplig enhets-I/O-kontrollbegäran och skickar sedan begäran till Winusb.sys för bearbetning. För att kommunicera med USB-stacken anropar Funktionen WinUSB funktionen DeviceIoControl med lämplig IOCTL som korrelerar med programmets begäran. När begäran är klar skickar Funktionen WinUSB all information som returneras av Winusb.sys (till exempel data från en läsbegäran) tillbaka till anropsprocessen. Om anropet till DeviceIoControl lyckas returnerar det ett värde som inte är noll. Om anropet misslyckas eller väntar (bearbetas inte omedelbart) returnerar DeviceIoControl ett nollvärde. Om ett fel inträffar kan programmet anropa GetLastError för ett mer detaljerat felmeddelande.

Det är enklare att använda WinUSB-funktioner för att kommunicera med en enhet än att implementera en drivrutin. Observera dock följande begränsningar:

  • Med WinUSB-funktioner kan ett program i taget kommunicera med enheten. Om du behöver mer än ett program för att kommunicera samtidigt med en enhet måste du implementera en funktionsdrivrutin.

  • Före Windows 8.1 stöder WinUSB-funktioner inte strömmande data till eller från isokrona slutpunkter.

  • WinUSB-funktioner stöder inte enheter som redan har stöd för kärnläge. Exempel på sådana enheter är modem och nätverkskort, som stöds av telefoni-API:et (TAPI) respektive NDIS.

  • För multifunktionsenheter kan du använda enhetens INF-fil för att specificera antingen en inbyggd drivrutin i kernelläge eller Winusb.sys för varje USB-funktion separat. Du kan dock bara ange ett av dessa alternativ för en viss funktion, inte båda.

Anmärkning

WinUSB-funktioner kräver Windows XP eller senare. Du kan använda dessa funktioner i C/C++-programmet för att kommunicera med DIN USB-enhet. Information om hur du skriver en UWP-app som använder WinUSB-API:er finns i UWP-appen för en USB-enhet.

Komma igång

  1. Hämta de verktyg som krävs för att skriva en Windows-skrivbordsapp för enheter

  2. Hämta en USB-testenhet och dess maskinvaruspecifikation.

    • Använd specifikationen för att fastställa appens funktioner och relaterade designbeslut.

    • Microsoft USB-testverktygsenheter (MUTT) är tillgängliga från JJG Technologies. Den här enheten kräver inbyggd programvara från Microsoft som finns på Ladda ned MUTT Software Package.

  3. Skriv ett basprogram som erhåller åtkomst till enheten.

    Det finns två metoder för att skriva det första programmet:

  4. Installera Winusb.sys för enheten.

    Om du använder Visual Studio installerar du drivrutinspaketet på måldatorn med hjälp av Visual Studio-distributionen. Anvisningar finns i Skriva en Windows-skrivbordsapp baserat på WinUSB-mallen. Annars installerar du drivrutinen manuellt i Enhetshanteraren genom att skriva en anpassad INF. Mer information finns i Installation av WinUSB (Winusb.sys).

  5. Hämta information om enheten och visa dess beskrivningar.

    Konceptuell information finns i Begrepp för alla USB-utvecklare. Hämta information om dina enhetsfunktioner genom att läsa konfigurationsbeskrivningen, gränssnittsbeskrivningar för varje alternativinställningar som stöds och deras slutpunktsbeskrivningar. Mer information finns i Fråga enheten om USB-beskrivningar.

  6. Skicka en USB-kontrollöverföring.

    Skicka standardkontrollbegäranden och leverantörskommandon till enheten. Mer information finns i Skicka kontrollöverföring till standardslutpunkten.

  7. Skicka mass- eller avbrottsöverföringar.

    Utför läs- och skrivåtgärder till och från de mass-, avbrotts- och isokrona slutpunkter som stöds av enheten. För mer information, se Utfärda I/O-begäranden.

  8. Skicka isochroniska överföringar.

    Skicka isochroniska läs- och skrivbegäranden, som främst används för strömmande data. Den här funktionen är endast tillgänglig i Windows 8.1 och senare. Mer information finns i Skicka USB-isochrona överföringar från en WinUSB-skrivbordsapp.

Se även