_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를 호출하는 동안 응답 멤버가 로 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 요청이 성공적으로 완료되면 OutResults 및 InResults 멤버에서 새로 만든 연결에 대한 다양한 정보를 사용할 수 있습니다. OutResults는 채널의 아웃바운드 절반에 대한 매개 변수를 지정하고 InResults 는 채널의 인바운드 절반에 대한 매개 변수를 지정합니다.

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

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

_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 값 다시 보내기를 포함하여 Response 멤버에 설명된 상태 코드일 수 있습니다.

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

요구 사항

요구 사항
지원되는 최소 클라이언트 버전: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