Sdílet prostřednictvím


Komunikace s GenericUSBFn.sys ze služby v uživatelském režimu

Všechny požadavky na uživatelský režim se odesílají do ovladače v režimu jádra poskytnutého Microsoftem GenericUSBFn.sys. Můžete vytvořit službu v uživatelském režimu, která komunikuje s GenericUSBFn.sys odesláním tohoto V/V řídicího kódu (IOCTL) a GenericUSBFn.sys zpracovává komunikaci v režimu jádra s ovladači funkce USB.

IOCTL kódy deklarované v genericusbfnioctl.h slouží ke komunikaci se GenericUSBFn.sys ze služby v uživatelském režimu.

Následující kroky popisují, jak můžete definovat službu rozhraní USB, která komunikuje s GenericUSBFn.sys komunikovat s ovladači funkcí USB:

  1. Při spuštění služba naslouchá příchodu rozhraní zařízení. Identifikátor GUID rozhraní zařízení je hodnota InterfaceGUID deklarovaná v registru pod OEM-definovaným subklíčem HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\USBFN\Interfaces. Existují dvě běžné metody naslouchání příjezdu zařízení:
    • Aktivujte spuštění služby. Další informace najdete v tématu Události spouštěče služby.
    • Zaregistrujte se pro aktivaci rozhraní zařízení. Další informace najdete v CM_Register_Notification funkci.
  2. Po příchodu rozhraní služba otevře popisovač zařízení:
    • Symbolický název zařízení získáte voláním funkce CM_Get_Device_Interface_List. Zadejte identifikátor GUID rozhraní zařízení, který je deklarován v hodnotě InterfaceGUID v registru.
    • Jakmile budete mít symbolický název zařízení, otevřete rukojeť k zařízení pomocí funkce CreateFile.
  3. Služba vydává IOCTL_GENERICUSBFN_GET_CLASS_INFO za účelem načtení informací o dostupných kanálech podle konfigurace v registru.
  4. cs-CZ: Jakmile je služba připravena ke komunikaci, vydá příkaz IOCTL_GENERICUSBFN_ACTIVATE_USB_BUS. Po aktivaci všech ovladačů třídy USB se rozšíření pro funkční třídu USB může připojit k hostitelskému počítači.
  5. Aby bylo možné přijímat oznámení USB, služba vydá IOCTL_GENERICUSBFN_BUS_EVENT_NOTIFICATION. Tento příkaz IOCTL se dokončí, když nastane nová událost USB. Mezi zvláštní zajímavé události (USBFN_EVENT) patří:
  6. UsbfnEventReset: Slouží k určení rychlosti připojeného zařízení USB.
  7. UsbfnEventConfigured: Služba teď může vydávat žádosti o přenos.
  8. UsbfnEventSetupPacket: Rozšíření třídy funkcí USB obdrželo paket nastavení specifický pro rozhraní (bmRequestType.Type == BMREQUEST_CLASS). Služba by měla odpovědět na instalační paket vydáním žádosti o přenos v kanálu 0, za kterým následuje požadavek handshake (IOCTL_GENERICUSBFN_CONTROL_STATUS_HANDSHAKE_OUT) v opačném směru na kanálu 0.
  9. Po přijetí události UsbfnEventConfigured může služba začít vydávat žádosti o přenos pomocí IOCTL_GENERICUSBFN_TRANSFER_IN, IOCTL_GENERICUSBFN_TRANSFER_IN_APPEND_ZERO_PKT a IOCTL_GENERICUSBFN_TRANSFER_OUT.