Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wszystkie żądania trybu użytkownika są wysyłane do sterownika trybu jądra dostarczonego przez firmę Microsoft GenericUSBFn.sys. Możesz utworzyć usługę trybu użytkownika, która komunikuje się z GenericUSBFn.sys, wysyłając kody sterowania we/wy (IOCTL), a GenericUSBFn.sys obsługuje komunikację w trybie jądra ze sterownikami funkcji USB.
Zadeklarowane w pliku Genericusbfnioctl.h IOCTL-e są używane do komunikacji z GenericUSBFn.sys przez usługę działającą w trybie użytkownika.
W poniższych krokach opisano sposób definiowania usługi interfejsu USB, która współdziała z GenericUSBFn.sys w celu komunikowania się ze sterownikami funkcji USB:
- Podczas uruchamiania usługa nasłuchuje na przybycie interfejsu urządzenia. Identyfikator GUID interfejsu urządzenia to wartość InterfaceGUID zadeklarowana w rejestrze, w podkluczu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\USBFN\Interfaceszdefiniowanym przez producenta OEM. Istnieją dwie typowe metody nasłuchiwania przybycia urządzenia:
- Wyzwól uruchomienie usługi. Aby uzyskać więcej informacji, zobacz Zdarzenia wyzwalania usług.
- Zarejestruj się na powiadomienie o pojawieniu się interfejsu urządzenia. Aby uzyskać więcej informacji, zobacz funkcję CM_Register_Notification.
- Po nadejściu interfejsu usługa otworzy dojście do urządzenia:
- Aby pobrać symboliczną nazwę urządzenia, wywołaj funkcję CM_Get_Device_Interface_List. Określ identyfikator GUID interfejsu urządzenia zadeklarowany w wartości InterfaceGUID w rejestrze.
- Po utworzeniu symbolicznej nazwy urządzenia otwórz dojście do urządzenia przy użyciu polecenia CreateFile.
- Usługa wystawia IOCTL_GENERICUSBFN_GET_CLASS_INFO, aby pobrać informacje o dostępnych potokach zgodnie z konfiguracją w rejestrze.
- Gdy usługa będzie gotowa do komunikowania się, wydaje IOCTL_GENERICUSBFN_ACTIVATE_USB_BUS. Po aktywowaniu wszystkich sterowników klas, rozszerzenie funkcji klasy USB może nawiązać połączenie z hostem.
- Aby otrzymywać powiadomienia USB, usługa wydaje IOCTL_GENERICUSBFN_BUS_EVENT_NOTIFICATION. Operacja IOCTL kończy się po wystąpieniu nowego zdarzenia USB. Zdarzenia (USBFN_EVENT) o szczególnym znaczeniu obejmują:
- UsbfnEventReset: służy do określania szybkości podłączonego urządzenia USB.
- UsbfnEventConfigured: usługa może teraz wysyłać żądania transferu.
- UsbfnEventSetupPacket: rozszerzenie klasy funkcji USB otrzymało pakiet instalacyjny specyficzny dla interfejsu (bmRequestType.Type == BMREQUEST_CLASS). Usługa powinna odpowiedzieć na pakiet instalacyjny, wysyłając żądanie transferu w potoku 0, a następnie żądanie uzgadniania (IOCTL_GENERICUSBFN_CONTROL_STATUS_HANDSHAKE_OUT) w przeciwnym kierunku na tym samym potoku 0.
- Po odebraniu zdarzenia UsbfnEventConfigured usługa może rozpocząć wydawanie żądań transferu przy użyciu IOCTL_GENERICUSBFN_TRANSFER_IN, IOCTL_GENERICUSBFN_TRANSFER_IN_APPEND_ZERO_PKT i IOCTL_GENERICUSBFN_TRANSFER_OUT.