huago-corrcet_tools/HuaGoCorrect/pub/ddk/bthioctl.h

610 lines
14 KiB
C

/****************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
bthioctl.h
Abstract:
defines the IOCTL codes for the kernel/user calls
Environment:
Kernel & user mode
Revision History:
4-4-00 : created by Husni Roukbi
2-4-05 : split into public and private header files by SandySp
****************************************************************************/
#ifndef __BTHIOCTL_H__
#define __BTHIOCTL_H__
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning(disable:4201) // nameless struct/union
#if (NTDDI_VERSION >= NTDDI_VISTA)
#ifndef CTL_CODE
#pragma message("CTL_CODE undefined. Include winioctl.h or wdm.h")
#endif
//
// IOCTL defines.
//
#define BTH_IOCTL_BASE 0
#define BTH_CTL(id) CTL_CODE(FILE_DEVICE_BLUETOOTH, \
(id), \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define BTH_KERNEL_CTL(id) CTL_CODE(FILE_DEVICE_BLUETOOTH, \
(id), \
METHOD_NEITHER, \
FILE_ANY_ACCESS)
//
// kernel-level (internal) IOCTLs
//
#define IOCTL_INTERNAL_BTH_SUBMIT_BRB BTH_KERNEL_CTL(BTH_IOCTL_BASE+0x00)
//
// Input: none
// Output: BTH_ENUMERATOR_INFO
//
#define IOCTL_INTERNAL_BTHENUM_GET_ENUMINFO BTH_KERNEL_CTL(BTH_IOCTL_BASE+0x01)
//
// Input: none
// Output: BTH_DEVICE_INFO
//
#define IOCTL_INTERNAL_BTHENUM_GET_DEVINFO BTH_KERNEL_CTL(BTH_IOCTL_BASE+0x02)
//
// IOCTLs
//
//
// Input: none
// Output: BTH_LOCAL_RADIO_INFO
//
#define IOCTL_BTH_GET_LOCAL_INFO BTH_CTL(BTH_IOCTL_BASE+0x00)
//
// Input: BTH_ADDR
// Output: BTH_RADIO_INFO
//
#define IOCTL_BTH_GET_RADIO_INFO BTH_CTL(BTH_IOCTL_BASE+0x01)
//
// use this ioctl to get a list of cached discovered devices in the port driver.
//
// Input: None
// Output: BTH_DEVICE_INFO_LIST
//
#define IOCTL_BTH_GET_DEVICE_INFO BTH_CTL(BTH_IOCTL_BASE+0x02)
//
// Input: BTH_ADDR
// Output: none
//
#define IOCTL_BTH_DISCONNECT_DEVICE BTH_CTL(BTH_IOCTL_BASE+0x03)
#if (NTDDI_VERSION > NTDDI_VISTASP1 || \
(NTDDI_VERSION == NTDDI_VISTASP1 && defined(VISTA_KB942567)))
#ifdef FULL_EIR_SUPPORT // in WUR this funcitonality is disabled
//
// Input: BTH_GET_DEVICE_RSSI
// Output: ULONG
//
#define IOCTL_BTH_GET_DEVICE_RSSI BTH_CTL(BTH_IOCTL_BASE+0x05)
//
// Input: BTH_EIR_GET_RECORDS
// Output: UCHAR array, sequence of length + type + data fields triplets.
//
#define IOCTL_BTH_EIR_GET_RECORDS BTH_CTL(BTH_IOCTL_BASE+0x10)
//
// Input: BTH_EIR_SUBMIT_RECORD
// Output HANDLE
//
#define IOCTL_BTH_EIR_SUBMIT_RECORD BTH_CTL(BTH_IOCTL_BASE+0x11)
//
// Input: BTH_EIR_SUBMIT_RECORD
// Output None
//
#define IOCTL_BTH_EIR_UPDATE_RECORD BTH_CTL(BTH_IOCTL_BASE+0x12)
//
// Input: HANDLE
// Output: None
//
#define IOCTL_BTH_EIR_REMOVE_RECORD BTH_CTL(BTH_IOCTL_BASE+0x13)
#endif // FULL_EIR_SUPPORT
//
// Input: BTH_VENDOR_SPECIFIC_COMMAND
// Output: PVOID
//
#define IOCTL_BTH_HCI_VENDOR_COMMAND BTH_CTL(BTH_IOCTL_BASE+0x14)
#endif // >= SP1+KB942567
//
// Input: BTH_SDP_CONNECT
// Output: BTH_SDP_CONNECT
//
#define IOCTL_BTH_SDP_CONNECT BTH_CTL(BTH_IOCTL_BASE+0x80)
//
// Input: HANDLE_SDP
// Output: none
//
#define IOCTL_BTH_SDP_DISCONNECT BTH_CTL(BTH_IOCTL_BASE+0x81)
//
// Input: BTH_SDP_SERVICE_SEARCH_REQUEST
// Output: ULONG * number of handles wanted
//
#define IOCTL_BTH_SDP_SERVICE_SEARCH BTH_CTL(BTH_IOCTL_BASE+0x82)
//
// Input: BTH_SDP_ATTRIBUTE_SEARCH_REQUEST
// Output: BTH_SDP_STREAM_RESPONSE or bigger
//
#define IOCTL_BTH_SDP_ATTRIBUTE_SEARCH BTH_CTL(BTH_IOCTL_BASE+0x83)
//
// Input: BTH_SDP_SERVICE_ATTRIBUTE_SEARCH_REQUEST
// Output: BTH_SDP_STREAM_RESPONSE or bigger
//
#define IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH \
BTH_CTL(BTH_IOCTL_BASE+0x84)
//
// Input: raw SDP stream (at least 2 bytes)
// Ouptut: HANDLE_SDP
//
#define IOCTL_BTH_SDP_SUBMIT_RECORD BTH_CTL(BTH_IOCTL_BASE+0x85)
//
// Input: HANDLE_SDP
// Output: none
//
#define IOCTL_BTH_SDP_REMOVE_RECORD BTH_CTL(BTH_IOCTL_BASE+0x86)
//
// Input: BTH_SDP_RECORD + raw SDP record
// Output: HANDLE_SDP
//
#define IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO BTH_CTL(BTH_IOCTL_BASE+0x87)
#include <PSHPACK1.H>
typedef struct _BTH_DEVICE_INFO_LIST {
//
// [IN/OUT] minimum of 1 device required
//
ULONG numOfDevices;
//
// Open ended array of devices;
//
BTH_DEVICE_INFO deviceList[1];
} BTH_DEVICE_INFO_LIST, *PBTH_DEVICE_INFO_LIST;
typedef struct _BTH_RADIO_INFO {
//
// Supported LMP features of the radio. Use LMP_XXX() to extract
// the desired bits.
//
ULONGLONG lmpSupportedFeatures;
//
// Manufacturer ID (possibly BTH_MFG_XXX)
//
USHORT mfg;
//
// LMP subversion
//
USHORT lmpSubversion;
//
// LMP version
//
UCHAR lmpVersion;
} BTH_RADIO_INFO, *PBTH_RADIO_INFO;
typedef struct _BTH_LOCAL_RADIO_INFO {
//
// Local BTH_ADDR, class of defice, and radio name
//
BTH_DEVICE_INFO localInfo;
//
// Combo of LOCAL_RADIO_XXX values
//
ULONG flags;
//
// HCI revision, see core spec
//
USHORT hciRevision;
//
// HCI version, see core spec
//
UCHAR hciVersion;
//
// More information about the local radio (LMP, MFG)
//
BTH_RADIO_INFO radioInfo;
} BTH_LOCAL_RADIO_INFO, *PBTH_LOCAL_RADIO_INFO;
#define SDP_CONNECT_CACHE (0x00000001)
#define SDP_CONNECT_ALLOW_PIN (0x00000002)
#define SDP_REQUEST_TO_DEFAULT (0)
#define SDP_REQUEST_TO_MIN (10)
#define SDP_REQUEST_TO_MAX (45)
#define SERVICE_OPTION_DO_NOT_PUBLISH (0x00000002)
#define SERVICE_OPTION_NO_PUBLIC_BROWSE (0x00000004)
#define SERVICE_OPTION_DO_NOT_PUBLISH_EIR (0x00000008)
#define SERVICE_SECURITY_USE_DEFAULTS (0x00000000)
#define SERVICE_SECURITY_NONE (0x00000001)
#define SERVICE_SECURITY_AUTHORIZE (0x00000002)
#define SERVICE_SECURITY_AUTHENTICATE (0x00000004)
#define SERVICE_SECURITY_ENCRYPT_REQUIRED (0x00000010)
#define SERVICE_SECURITY_ENCRYPT_OPTIONAL (0x00000020)
#define SERVICE_SECURITY_DISABLED (0x10000000)
#define SERVICE_SECURITY_NO_ASK (0x20000000)
//
// Do not attempt to validate that the stream can be parsed
//
#define SDP_SEARCH_NO_PARSE_CHECK (0x00000001)
//
// Do not check the format of the results. This includes suppression of both
// the check for a record patten (SEQ of UINT16 + value) and the validation
// of each universal attribute's accordance to the spec.
//
#define SDP_SEARCH_NO_FORMAT_CHECK (0x00000002)
typedef ULONGLONG HANDLE_SDP, *PHANDLE_SDP;
#define HANDLE_SDP_NULL ((HANDLE_SDP) 0x0)
#define HANDLE_SDP_LOCAL ((HANDLE_SDP) -2)
typedef struct _BTH_SDP_CONNECT {
//
// Address of the remote SDP server. Cannot be the local radio.
//
BTH_ADDR bthAddress;
//
// Combination of SDP_CONNECT_XXX flags
//
ULONG fSdpConnect;
//
// When the connect request returns, this will specify the handle to the
// SDP connection to the remote server
//
HANDLE_SDP hConnection;
//
// Timeout, in seconds, for the requests on ths SDP channel. If the request
// times out, the SDP connection represented by the HANDLE_SDP must be
// closed. The values for this field are bound by SDP_REQUEST_TO_MIN and
// SDP_REQUEST_MAX. If SDP_REQUEST_TO_DEFAULT is specified, the timeout is
// 30 seconds.
//
UCHAR requestTimeout;
} BTH_SDP_CONNECT, *PBTH_SDP_CONNECT;
typedef struct _BTH_SDP_DISCONNECT {
//
// hConnection returned by BTH_SDP_CONNECT
//
HANDLE_SDP hConnection;
} BTH_SDP_DISCONNECT, *PBTH_SDP_DISCONNECT;
typedef struct _BTH_SDP_RECORD {
//
// Combination of SERVICE_SECURITY_XXX flags
//
ULONG fSecurity;
//
// Combination of SERVICE_OPTION_XXX flags
//
ULONG fOptions;
//
// combo of COD_SERVICE_XXX flags
//
ULONG fCodService;
//
// The length of the record array, in bytes.
//
ULONG recordLength;
//
// The SDP record in its raw format
//
UCHAR record[1];
} BTH_SDP_RECORD, *PBTH_SDP_RECORD;
typedef struct _BTH_SDP_SERVICE_SEARCH_REQUEST {
//
// Handle returned by the connect request or HANDLE_SDP_LOCAL
//
HANDLE_SDP hConnection;
//
// Array of UUIDs. Each entry can be either a 2 byte, 4 byte or 16 byte
// UUID. SDP spec mandates that a request can have a maximum of 12 UUIDs.
//
SdpQueryUuid uuids[MAX_UUIDS_IN_QUERY];
} BTH_SDP_SERVICE_SEARCH_REQUEST, *PBTH_SDP_SERVICE_SEARCH_REQUEST;
typedef struct _BTH_SDP_ATTRIBUTE_SEARCH_REQUEST {
//
// Handle returned by the connect request or HANDLE_SDP_LOCAL
//
HANDLE_SDP hConnection;
//
// Combo of SDP_SEARCH_Xxx flags
//
ULONG searchFlags;
//
// Record handle returned by the remote SDP server, most likely from a
// previous BTH_SDP_SERVICE_SEARCH_RESPONSE.
//
ULONG recordHandle;
//
// Array of attributes to query for. Each SdpAttributeRange entry can
// specify either a single attribute or a range. To specify a single
// attribute, minAttribute should be equal to maxAttribute. The array must
// be in sorted order, starting with the smallest attribute. Furthermore,
// if a range is specified, the minAttribute must be <= maxAttribute.
//
SdpAttributeRange range[1];
} BTH_SDP_ATTRIBUTE_SEARCH_REQUEST, *PBTH_SDP_ATTRIBUTE_SEARCH_REQUEST;
typedef struct _BTH_SDP_SERVICE_ATTRIBUTE_SEARCH_REQUEST {
//
// Handle returned by the connect request or HANDLE_SDP_LOCAL
//
HANDLE_SDP hConnection;
//
// Combo of SDP_SEARCH_Xxx flags
//
ULONG searchFlags;
//
// See comments in BTH_SDP_SERVICE_SEARCH_REQUEST
//
SdpQueryUuid uuids[MAX_UUIDS_IN_QUERY];
//
// See comments in BTH_SDP_ATTRIBUTE_SEARCH_REQUEST
//
SdpAttributeRange range[1];
} BTH_SDP_SERVICE_ATTRIBUTE_SEARCH_REQUEST,
*PBTH_SDP_SERVICE_ATTRIBUTE_SEARCH_REQUEST;
typedef struct _BTH_SDP_STREAM_RESPONSE {
//
// The required buffer size (not including the first 2 ULONG_PTRs of this
// data structure) needed to contain the response.
//
// If the buffer passed was large enough to contain the entire response,
// requiredSize will be equal to responseSize. Otherwise, the caller should
// resubmit the request with a buffer size equal to
// sizeof(BTH_SDP_STREAM_RESPONSE) + requiredSize - 1. (The -1 is because
// the size of this data structure already includes one byte of the
// response.)
//
// A response cannot exceed 4GB in size.
//
ULONG requiredSize;
//
// The number of bytes copied into the response array of this data
// structure. If there is not enough room for the entire response, the
// response will be partially copied into the response array.
//
ULONG responseSize;
//
// The raw SDP response from the serach.
//
UCHAR response[1];
} BTH_SDP_STREAM_RESPONSE, *PBTH_SDP_STREAM_RESPONSE;
#if (NTDDI_VERSION > NTDDI_VISTASP1 || \
(NTDDI_VERSION == NTDDI_VISTASP1 && defined(VISTA_KB942567)))
//
// Vendor specific HCI command header
//
typedef struct _BTH_COMMAND_HEADER {
//
// Opcode for the command
//
USHORT OpCode;
//
// Payload of the command excluding the header.
// TotalParameterLength = TotalCommandLength - sizeof(BTH_COMMAND_HEADER)
//
UCHAR TotalParameterLength;
} BTH_COMMAND_HEADER, * PBTH_COMMAND_HEADER;
//
// Vendor Specific Command structure
//
typedef struct _BTH_VENDOR_SPECIFIC_COMMAND {
//
// Manufacturer ID
//
ULONG ManufacturerId;
//
// LMP version. Command is send to radio only if the radios
// LMP version is greater than this value.
//
UCHAR LmpVersion;
//
// Should all the patterns match or just one. If MatchAnySinglePattern == TRUE
// then if a single pattern matches the command, we decide that we have a match.
//
BOOLEAN MatchAnySinglePattern;
//
// HCI Command Header
//
BTH_COMMAND_HEADER HciHeader;
//
// Data for the above command including patterns
//
UCHAR Data[1];
} BTH_VENDOR_SPECIFIC_COMMAND, * PBTH_VENDOR_SPECIFIC_COMMAND;
//
// Structure of patterns
//
typedef struct _BTH_VENDOR_PATTERN {
//
// Pattern Offset in the event structure excluding EVENT header
//
UCHAR Offset;
//
// Size of the Pattern
//
UCHAR Size;
//
// Pattern
//
UCHAR Pattern[1];
} BTH_VENDOR_PATTERN, * PBTH_VENDOR_PATTERN;
//
//The buffer associated with GUID_BLUETOOTH_HCI_VENDOR_EVENT
//
typedef struct _BTH_VENDOR_EVENT_INFO {
//
//Local radio address with which the event is associated.
//
BTH_ADDR BthAddress;
//
//Size of the event buffer including Event header
//
ULONG EventSize;
//
//Information associated with the event
//
UCHAR EventInfo[1];
} BTH_VENDOR_EVENT_INFO, * PBTH_VENDOR_EVENT_INFO;
//
// Extended Inquiry Response data defines.
//
typedef ULONGLONG HANDLE_EIR, *PHANDLE_EIR;
#define INVALID_HANDLE_EIR_VALUE ((HANDLE_EIR)((LONGLONG)-1))
typedef struct _BTH_EIR_GET_RECORDS {
//
// [IN] Device's Bluetooth address. For local device use BTH_ADDR_NULL.
//
BTH_ADDR BthAddress;
//
// Reseved field (set to zero).
//
ULONG Reserved;
} BTH_EIR_GET_RECORDS, *PBTH_EIR_GET_RECORDS;
typedef struct _BTH_EIR_SUBMIT_RECORD {
//
// [IN/OUT] Record Handle. Set to INVALID_HANDLE_EIR_VALUE for submit.
//
HANDLE_EIR Handle;
//
// Reserved field (set to zero).
//
ULONG Reserved;
//
// [IN] Record size in bytes.
//
ULONG RecordSize;
//
// [IN] The EIR record data array (data-type and data).
//
UCHAR Record[1];
} BTH_EIR_SUBMIT_RECORD, *PBTH_EIR_SUBMIT_RECORD;
#endif // >= SP1+KB942567
#include <POPPACK.H>
#endif // (NTDDI_VERSION >= NTDDI_VISTA)
#if _MSC_VER >= 1200
#pragma warning(pop)
#else
#pragma warning(default:4201)
#endif
#endif // __BTHIOCTL_H__