Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Po załadowaniu i zainicjowaniu stosu sterowników Bluetooth stos sterowników odnajduje aktywne urządzenia Bluetooth, które zostały już sparowane. Następnie stos sterowników generuje identyfikatory urządzeń dla wszystkich sparowanych urządzeń. Następnie stos sterowników używa standardowych mechanizmów Plug and Play (PnP), aby załadować odpowiedni sterownik profilu dla każdego urządzenia. Na podstawie pliku INF, który instaluje sterownik profilu, oraz identyfikatora urządzenia, wybierany jest sterownik profilu do załadowania, zgodnie z opisem w Instalowanie urządzenia Bluetooth.
Sterowniki profilów komunikują się ze stosem sterowników Bluetooth za pośrednictwem standardowego mechanizmu żądania we/wy (IRP) stosowanego przez wszystkie sterowniki oparte na architekturze WDM. Sterownik profilu komunikuje się z urządzeniem, przydzielając i wysyłając IRP-y w dół stosu sterowników Bluetooth do sterownika portu Bluetooth, Bthport.sys.
Sterownik profilu przydziela i inicjuje IRP do przetworzenia przez Bthport.sys. Następnie sterowniki profilów komunikują się ze swoimi urządzeniami przy użyciu żądań IOCTL dostarczanych do urządzenia za pomocą IRP_MJ_INTERNAL_DEVICE_CONTROL lub IRP_MJ_DEVICE_CONTROL IRP. Sterownik profilu określa jeden z kodów kontrolek we/wy na poniższej liście w IRP.
Stos sterowników Bluetooth obsługuje następujące polecenia IOCTL dla wywołań trybu jądra za pośrednictwem IRP_MJ_DEVICE_CONTROL:
IOCTL_BTH_SDP_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO
Stos sterowników Bluetooth obsługuje następujące IOCTL oraz BRB wywołania w trybie jądra (zazwyczaj w przypadku komunikacji między sterownikami) za pośrednictwem IRP_MJ_INTERNAL_DEVICE_CONTROL:
BRB_L2CA_OPEN_CHANNEL_RESPONSE
BRB_GET_DEVICE_INTERFACE_STRING
IOCTL_INTERNAL_BTHENUM_GET_DEVINFO
IOCTL_INTERNAL_BTHENUM_GET_ENUMINFO
Aby uzyskać więcej informacji na temat użycia IOCTL opisanych na poprzednich listach IOCTL, zobacz Bluetooth IOCTLs.
Sterowniki profilów używają przede wszystkim IOCTL_INTERNAL_BTH_SUBMIT_BRB do komunikowania się i interakcji z funkcjami udostępnianymi w stosie sterowników Bluetooth. Sterownik profilu używa IOCTL_INTERNAL_BTH_SUBMIT_BRB do dostarczania do zarządzanego urządzenia struktury danych o zmiennej długości nazywanego blokiem żądań Bluetooth (BRB). Sterowniki profili używają BRB do otwierania i zamykania połączeń z urządzeniami zdalnymi oraz wykonywania większości zadań związanych z wejściem i wyjściem danych. IOCTL_INTERNAL_BTH_SUBMIT_BRB zawiera BRB, który dodatkowo opisuje operację Bluetooth do wykonania. Aby dowiedzieć się więcej o sposobie budowania i wysyłania BRB w stosie sterowników Bluetooth, zobacz Budowanie i wysyłanie BRB.
Każda BRB zaczyna się od standardowego nagłówka zdefiniowanego przez strukturę BRB_HEADER, która określa typ BRB, który określa strukturę pozostałej części BRB. Element członkowski typu, który musi być równy jednej z wartości znalezionych w wyliczeniu BRB_TYPE, określa typ operacji Bluetooth, której wymaga sterownik profilu. Struktura i rozmiar BRB różnią się w zależności od jego typu. Składowa Length struktury BRB_HEADER określa rozmiar BRB w bajtach. Funkcje BthAllocateBrb, BthInitializeBrbi BthReuseBrb automatycznie ustawiają typ i długość elementów członkowskich.
Aby na przykład otworzyć połączenie z urządzeniem zdalnym, określ jeden z kodów funkcji, BRB_L2CA_OPEN_CHANNEL lub BRB_SCO_OPEN_CHANNEL, aby wskazać, że sterownik profilu próbuje otworzyć L2CAP lub kanał połączenia SCO z urządzeniem zdalnym. Stos sterowników Bluetooth używa statusu elementu członkowskiego struktury BRB, aby zwrócić kod stanu specyficzny dla połączenia Bluetooth.
Dla każdego BRB sterownik profilu musi przydzielić i zainicjować odpowiednią strukturę z informacjami o operacji Bluetooth do wykonania.
W poniższej tabeli opisano struktury, które odpowiadają określonym BRBs, które sterowniki profilu mogą wydać:
Blok żądań Bluetooth (BRB) | Odpowiednia struktura |
---|---|
BRB_HCI_GET_LOCAL_BD_ADDR | _BRB_GET_LOCAL_BD_ADDR |
BRB_L2CA_REGISTER_SERVER | _BRB_L2CA_REGISTER_SERVER |
BRB_L2CA_UNREGISTER_SERVER | _BRB_L2CA_UNREGISTER_SERVER |
BRB_L2CA_OPEN_CHANNEL | _BRB_L2CA_OPEN_CHANNEL |
BRB_L2CA_OPEN_CHANNEL_RESPONSE | _BRB_L2CA_OPEN_CHANNEL |
BRB_L2CA_CLOSE_CHANNEL | _BRB_L2CA_CLOSE_CHANNEL |
BRB_L2CA_ACL_TRANSFER | _BRB_L2CA_ACL_TRANSFER |
BRB_L2CA_UPDATE_CHANNEL | _BRB_L2CA_UPDATE_CHANNEL |
BRB_L2CA_PING | _BRB_L2CA_PING |
BRB_REGISTER_PSM | _BRB_PSM |
BRB_UNREGISTER_PSM | _BRB_PSM |
BRB_SCO_REGISTER_SERVER | _BRB_SCO_REGISTER_SERVER |
BRB_SCO_UNREGISTER_SERVER | _BRB_SCO_UNREGISTER_SERVER |
BRB_SCO_OPEN_CHANNEL | _BRB_SCO_OPEN_CHANNEL |
BRB_SCO_OPEN_CHANNEL_RESPONSE | _BRB_SCO_OPEN_CHANNEL |
BRB_SCO_CLOSE_CHANNEL | _BRB_SCO_CLOSE_CHANNEL |
BRB_SCO_TRANSFER | _BRB_SCO_TRANSFER |
BRB_SCO_GET_CHANNEL_INFO | _BRB_SCO_GET_CHANNEL_INFO |
BRB_SCO_GET_SYSTEM_INFO | _BRB_SCO_GET_SYSTEM_INFO |
BRB_SCO_FLUSH_CHANNEL | _BRB_SCO_FLUSH_CHANNEL |
BRB_ACL_GET_MODE | _BRB_ACL_GET_MODE |
BRB_ACL_ENTER_ACTIVE_MODE | _BRB_ACL_ENTER_ACTIVE_MODE |
BRB_GET_DEVICE_INTERFACE_STRING | _BRB_GET_DEVICE_INTERFACE_STRING |
Aby uzyskać więcej informacji na temat korzystania z funkcji IOCTL Bluetooth i BRB, zobacz Kompilowanie i wysyłanie BRB.