다음을 통해 공유


_BRB_L2CA_OPEN_CHANNEL 구조체(bthddi.h)

_BRB_L2CA_OPEN_CHANNEL 구조는 원격 디바이스에 열려는 L2CAP 채널 또는 원격 디바이스에서 시작된 들어오는 L2CAP 연결 요청을 수락하거나 거부하는 프로필 드라이버의 응답을 설명합니다.

통사론

struct _BRB_L2CA_OPEN_CHANNEL {
  BRB_HEADER                     Hdr;
  L2CAP_CHANNEL_HANDLE           ChannelHandle;
  union {
    struct {
      USHORT Response;
      USHORT ResponseStatus;
    };
    USHORT Psm;
  };
  ULONG                          ChannelFlags;
  BTH_ADDR                       BtAddress;
  struct {
    ULONG                    Flags;
    L2CAP_CONFIG_VALUE_RANGE Mtu;
    L2CAP_CONFIG_VALUE_RANGE FlushTO;
    L2CAP_FLOWSPEC           Flow;
    USHORT                   LinkTO;
    ULONG                    NumExtraOptions;
    PL2CAP_CONFIG_OPTION     ExtraOptions;
    struct {
      UCHAR ServiceType;
      ULONG Latency;
    } LocalQos;
  } ConfigOut;
  struct {
    ULONG                    Flags;
    L2CAP_CONFIG_VALUE_RANGE Mtu;
    L2CAP_CONFIG_RANGE       FlushTO;
  } ConfigIn;
  ULONG                          CallbackFlags;
  PFNBTHPORT_INDICATION_CALLBACK Callback;
  PVOID                          CallbackContext;
  PVOID                          ReferenceObject;
  CHANNEL_CONFIG_RESULTS         OutResults;
  CHANNEL_CONFIG_RESULTS         InResults;
  UCHAR                          IncomingQueueDepth;
};

회원

Hdr

현재 BRB에 대한 정보를 포함하는 BRB_HEADER 구조체입니다.

ChannelHandle

연결 성공 시 연결을 식별하는 데 사용되는 핸들입니다. BRB_L2CA_OPEN_CHANNEL보낼 때 BRB가 완료되면 채워집니다. BRB_L2CA_OPEN_CHANNEL_RESPONSE보내는 경우 BRB를 보내기 전에 서버에서 채워야 합니다. 할당된 값은 IndicationRemoteConnect 중에 전달된 INDICATION_PARAMETERS::ConnectionHandle 합니다.

Response

BRB_L2CA_OPEN_CHANNEL_RESPONSE경우에만 사용됩니다. CONNECT_RSP_RESULT_Xxx 값 중 하나가 사용됩니다.

BRB가 STATUS_REQUEST_NOT_ACCEPTED 상태로 반환되면 응답 원격 호스트의 부정 응답이 포함됩니다.

ResponseStatus

응답 CONNECT_RSP_RESULT_PENDING 같으면 이 필드는 유효합니다. CONNECT_RSP_STATUS_XXX 값 중 하나가 사용됩니다.

Psm

채널이 원격 디바이스에 연결하는 데 사용하는 프로토콜/서비스 멀티플렉서(PSM)입니다. BRB_L2CA_OPEN_CHANNEL 요청과 함께 사용할 경우 이 멤버는 입력 필드로 설정됩니다. BRB_L2CA_OPEN_CHANNEL_RESPONSE 요청과 함께 사용하는 경우 이 멤버는 출력 필드로 사용됩니다.

ChannelFlags

채널 열기에 대한 요구 사항을 지정하는 플래그입니다. 유효한 플래그 값은 다음 표에 나와 있습니다.

묘사
CF_LINK_AUTHENTICATED 링크를 인증해야 합니다.
CF_LINK_ENCRYPTED 링크를 암호화해야 합니다. 이 플래그를 설정하면 CF_LINK_AUTHENTICATED 플래그도 설정됩니다.
CF_LINK_SUPPRESS_PIN 프로필 드라이버는 사용자에게 PIN을 묻는 메시지가 표시되지 않음을 기본 설정으로 나타냅니다.

BtAddress

연결이 의도된 디바이스의 Bluetooth 주소입니다.

ConfigOut

원격 디바이스로 전송된 BRB_L2CA_OPEN_CHANNEL BRB에 대한 매개 변수 설정을 포함하는 하위 구조입니다.

ConfigOut.Flags

채널 열기에 대한 요구 사항을 지정하는 플래그입니다. 유효한 플래그 값은 다음 표에 나와 있습니다.

묘사
CF_LINK_AUTHENTICATED 링크를 인증해야 합니다.
CF_LINK_ENCRYPTED 링크를 암호화해야 합니다. 이 플래그를 설정하면 CF_LINK_AUTHENTICATED 플래그도 설정됩니다.
CF_LINK_SUPPRESS_PIN 프로필 드라이버는 사용자에게 PIN을 묻는 메시지가 표시되지 않음을 기본 설정으로 나타냅니다.

ConfigOut.Mtu

채널의 아웃바운드 절반 크기를 협상하는 데 사용되는 MTU(메시지 전송 단위) 범위입니다.

ConfigOut.FlushTO

채널의 아웃바운드 절반에 대한 플러시 시간 제한에 사용할 수 있는 값의 범위입니다.

ConfigOut.Flow

나중에 사용할 수 있습니다. 사용하지 마세요.

ConfigOut.LinkTO

링크 관리자 링크 시간 제한입니다.

ConfigOut.NumExtraOptions

ExtraOptions 멤버에 포함된 배열 항목의 수입니다. 이 값은 대부분의 클라이언트에 대해 0이어야 합니다.

ConfigOut.ExtraOptions

ExtraOptions 멤버에 포함된 배열 항목의 수입니다. 이 값은 대부분의 클라이언트에 대해 0이어야 합니다.

ConfigOut.LocalQos

나중에 사용할 수 있습니다. 사용하지 마세요.

ConfigOut.LocalQos.ServiceType

나중에 사용할 수 있습니다. 사용하지 마세요.

ConfigOut.LocalQos.Latency

나중에 사용할 수 있습니다. 사용하지 마세요.

ConfigIn

원격 디바이스에서 전송되는 들어오는 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB의 유효성을 검사하기 위한 매개 변수 설정이 포함된 하위 구조입니다.

ConfigIn.Flags

채널 열기에 대한 요구 사항을 지정하는 플래그입니다. 유효한 플래그 값은 다음 표에 나와 있습니다.

묘사
CF_LINK_AUTHENTICATED 링크를 인증해야 합니다.
CF_LINK_ENCRYPTED 링크를 암호화해야 합니다. 이 플래그를 설정하면 CF_LINK_AUTHENTICATED 플래그도 설정됩니다.
CF_LINK_SUPPRESS_PIN 프로필 드라이버는 사용자에게 PIN을 묻는 메시지가 표시되지 않음을 기본 설정으로 나타냅니다.

ConfigIn.Mtu

채널의 아웃바운드 절반 크기를 협상하는 데 사용되는 MTU(메시지 전송 단위) 범위입니다.

ConfigIn.FlushTO

채널의 아웃바운드 절반에 대한 플러시 시간 제한에 사용할 수 있는 값의 범위입니다.

CallbackFlags

이벤트가 발생했음을 프로필 드라이버에 알리기 위해 콜백 루틴을 생성해야 하는 이벤트를 지정하는 플래그입니다. 유효한 플래그 값은 다음 표에 포함되어 있습니다.

묘사
CALLBACK_CONFIG_EXTRA_IN 설정된 경우 원격 디바이스에 대한 구성 요청에 추가 옵션이 포함된 경우 콜백 루틴이 호출됩니다. 설정하지 않으면 추가 구성 옵션이 알 수 없는 옵션으로 거부됩니다. 이 플래그는 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB와 함께 사용됩니다.
CALLBACK_CONFIG_EXTRA_OUT 설정된 경우 원격 디바이스가 BRB_L2CA_OPEN_CHANNEL 요청에서 추가 구성 옵션을 거부할 때 콜백 루틴이 호출됩니다. 설정하지 않고 원격 디바이스가 추가 옵션으로 인해 구성 요청을 거부하는 경우 연결이 닫힙니다.
CALLBACK_CONFIG_QOS 설정된 경우 원격 디바이스가 QOS 값이 포함된 구성 요청을 보낼 때 콜백 루틴이 호출됩니다. 이 플래그가 설정되지 않고 원격 디바이스가 구성 요청에서 QOS 매개 변수를 보내거나 프로필 드라이버의 요청된 QOS 매개 변수를 거부하는 경우 연결이 끊어집니다.
CALLBACK_DISCONNECT 설정된 경우 원격 디바이스가 L2CAP 채널에서 연결을 끊을 때 콜백 루틴이 호출됩니다.
CALLBACK_RECV_PACKET 설정된 경우 프로필 드라이버가 들어오는 L2CAP 패킷을 받을 때 콜백 루틴이 호출됩니다.

Callback

L2CAP 콜백 함수는 프로필 드라이버에서 구현하는, Bluetooth 드라이버 스택이 L2CAP 연결의 변경 내용을 프로필 드라이버에 알리기 위해 호출해야 합니다.

CallbackContext

콜백 멤버에 지정된 콜백 함수에 전달할 컨텍스트입니다. 프로필 드라이버는 이 값을 정의합니다.

ReferenceObject

ObReferenceObjectObDereferenceObject 전달할 개체에 대한 포인터입니다.

OutResults

아웃바운드 요청에 대한 구성 매개 변수를 포함하는 CHANNEL_CONFIG_RESULTS 구조체입니다.

InResults

인바운드 요청에 대한 구성 매개 변수를 포함하는 CHANNEL_CONFIG_RESULTS 구조체입니다.

IncomingQueueDepth

MTU(메시지 전송 단위)에서 들어오는 큐 길이를 지정합니다.

응답

이 멤버는 BRB_L2CA_OPEN_CHANNEL_RESPONSE 요청에 대한 입력 매개 변수 및 BRB_L2CA_OPEN_CHANNEL 요청에 대한 출력 매개 변수로 사용됩니다.

BRB_L2CA_OPEN_CHANNEL_RESPONSE 요청의 경우 이 멤버는 원격 디바이스에 대한 프로필 드라이버의 응답을 나타내는 플래그를 보유합니다. 유효한 플래그 값은 다음 표에 포함되어 있습니다.

묘사
CONNECT_RSP_RESULT_NO_RESOURCES 프로필 드라이버는 리소스 부족으로 인해 연결을 거부했습니다.
CONNECT_RSP_RESULT_PENDING 프로필 드라이버가 현재 사용 중이며 연결을 수락할 수 없습니다. 나중에 다시 시도하세요.
CONNECT_RSP_RESULT_PSM_NEG PSM이 지원되지 않으므로 프로필 드라이버가 연결을 거부했습니다.
CONNECT_RSP_RESULT_SECURITY_BLOCK 프로필 드라이버는 보안상의 이유로 연결을 거부했습니다.
CONNECT_RSP_RESULT_SUCCESS 프로필 드라이버가 연결을 수락했습니다.

BRB_L2CA_OPEN_CHANNEL BRB의 경우 이 멤버는 프로필 드라이버가 연결을 시도한 원격 디바이스의 응답을 포함합니다. 유효한 플래그 값은 다음 표에 포함되어 있습니다.

묘사
CONNECT_RSP_RESULT_NO_RESOURCES 원격 디바이스가 리소스 부족으로 인해 연결을 거부했습니다.
CONNECT_RSP_RESULT_PSM_NEG 원격 디바이스가 연결을 거부했습니다.
CONNECT_RSP_RESULT_SECURITY_BLOCK 원격 디바이스가 보안상의 이유로 연결을 거부했습니다.
CONNECT_RSP_RESULT_SUCCESS 원격 디바이스가 연결을 수락했습니다.

ResponseStatus

BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB를 호출하는 동안 Response 멤버가 CONNECT_RSP_RESULT_PENDING설정된 경우 이 멤버는 유효하며 다음 값 중 하나를 포함합니다.

  • CONNECT_RSP_STATUS_AUTHENTICATION_PENDING
  • CONNECT_RSP_STATUS_AUTHORIZATION_PENDING
  • CONNECT_RSP_STATUS_NO_INFORMATION

발언

L2CAP 채널을 열려면 프로필 드라이버가 빌드하고 BRB_L2CA_OPEN_CHANNEL 요청을 보내야 합니다.

클라이언트 역할을 하는 프로필 드라이버는 대상 주소, PSM 및 다양한 구성 매개 변수를 지정합니다.

BRB_L2CA_OPEN_CHANNEL 요청이 성공적으로 완료되면 새로 만든 연결에 대한 다양한 정보를 OutResultsInResults 멤버에서 사용할 수 있습니다. OutResults 채널의 아웃바운드 절반에 대한 매개 변수를 지정하고 InResults 채널의 인바운드 절반에 대한 매개 변수를 지정합니다.

Mtu 멤버와 같이 이 구조에 전달된 몇 가지 구성 매개 변수는 원격 라디오와의 협상에 사용되는 범위입니다. 클라이언트는 채널 협상에 성공할 가능성을 높이기 위해 가능한 한 넓은 범위를 제공해야 합니다. 기본 Bluetooth 최소 MTU 크기보다 큰 최소 MTU 크기를 지정하는 작업은 반드시 필요한 경우에만 수행해야 합니다. 협상이 실패하면 연결이 실패합니다.

프로필 드라이버는 ExtraOptions 멤버에 저장된 배열을 저장하기 위해 메모리를 할당해야 하며, 콜백 멤버에 정의된 콜백 함수가 표시 매개 변수에 전달된 IndicationFreeExtraOptions 알림 INDICATION_CODE 값으로 반환될 때까지 이 메모리를 해제하지 않아야 합니다.

_BRB_L2CA_OPEN_CHANNEL 구조의 IncomingQueueDepth 멤버는 Bluetooth 드라이버 스택이 수신하고 연결을 삭제하기 전에 큐에 대기할 최대 MTU 수를 지정합니다. 이 값을 매우 작은 숫자로 설정하면 데이터 손실 가능성이 높아지지만, 이 값을 매우 많은 수로 설정하면 메모리 사용량이 증가할 수 있습니다. 이 멤버를 10으로 설정하는 것은 효과적인 손상입니다.

원격 디바이스에서 시작한 들어오는 L2CAP 연결 요청을 수락하거나 거부하려면 프로필 드라이버가 BRB_L2CA_OPEN_CHANNEL_RESPONSE 요청을 빌드하고 보낼 있습니다.

프로필 드라이버는 Bluetooth 드라이버 스택이 프로필 드라이버의 L2CAP 콜백 함수 호출하고 콜백 함수의 표시 매개 변수에서 IndicationRemoteConnect 전달할 때 BRB_L2CA_OPEN_CHANNEL_RESPONSE 요청을 빌드하고 보내야 합니다.

이 구조의 Response 멤버 값에 따라 Bluetooth 드라이버 스택은 연결 요청을 수락하거나 거부합니다.

프로필 드라이버는 이 구조체의 Response 멤버에 적절한 값을 저장하여 연결을 수락할지 여부를 지정합니다.

CONNECT_RSP_RESULT_PENDING 응답을 받으면 연결 클라이언트는 연결 타이머를 다시 설정하여 업데이트된 연결 응답 메시지를 기다려야 합니다. 응답 멤버가 CONNECT_RSP_RESULT_PENDING 설정된 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB를 호출하는 프로필 드라이버는 업데이트된 연결 값으로 추가 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB를 즉시 발급해야 합니다. 업데이트된 값은 CONNECT_RSP_RESULT_PENDING 값 다시 보내기를 포함하여 응답 멤버에 설명된 상태 코드일 수 있습니다.

프로필 드라이버는 ExtraOptions 멤버에 저장된 배열을 저장하기 위해 메모리를 할당해야 하며, 콜백 멤버에 정의된 콜백 함수가 표시 매개 변수에 전달된 IndicationFreeExtraOptions 알림 INDICATION_CODE 값으로 반환될 때까지 이 메모리를 해제하지 않아야 합니다.

요구 사항

요구
지원되는 최소 클라이언트 버전:windows Vista 이상에서 _Supported.
헤더 bthddi.h(Bthddi.h 포함)

참고 항목

BRB_HEADER

BRB_L2CA_OPEN_CHANNEL

BRB_L2CA_OPEN_CHANNEL_RESPONSE

BRB_L2CA_REGISTER_SERVER

CHANNEL_CONFIG_RESULTS

INDICATION_CODE

INDICATION_PARAMETERS

L2CAP 콜백 함수

L2CAP_CONFIG_OPTION

ObDereferenceObject

ObReferenceObject