123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539 |
- //
- // Copyright 2002 - Microsoft Corporation
- //
- // Created By:
- // Geoff Pease (GPease) 12-JAN-2002
- //
- //////////////////////////////////////////////////////////////////////////////
- #pragma once
- #define BLUETOOTH_MAX_NAME_SIZE (248)
- #define BLUETOOTH_MAX_PASSKEY_SIZE (16)
- #define BLUETOOTH_MAX_PASSKEY_BUFFER_SIZE (BLUETOOTH_MAX_PASSKEY_SIZE + 1)
- #ifdef __cplusplus
- extern "C" {
- #endif
- // ***************************************************************************
- //
- // Bluetooth Address
- //
- // ***************************************************************************
- typedef ULONGLONG BTH_ADDR;
- typedef struct _BLUETOOTH_ADDRESS {
- union {
- BTH_ADDR ullLong; // easier to compare again BLUETOOTH_NULL_ADDRESS
- BYTE rgBytes[ 6 ]; // easier to format when broken out
- };
- } BLUETOOTH_ADDRESS_STRUCT;
- #define BLUETOOTH_ADDRESS BLUETOOTH_ADDRESS_STRUCT
- #define BLUETOOTH_NULL_ADDRESS ( (ULONGLONG) 0x0 )
- // ***************************************************************************
- //
- // Radio Enumeration
- //
- // Description:
- // This group of APIs enumerates the installed Bluetooth radios.
- //
- // Sample Usage:
- // HANDLE hRadio;
- // BLUETOOTH_FIND_RADIO_PARAMS btfrp = { sizeof(btfrp) };
- //
- // HBLUETOOTH_RADIO_FIND hFind = BluetoothFindFirstRadio( &btfrp, &hRadio );
- // if ( NULL != hFind )
- // {
- // do
- // {
- // //
- // // TODO: Do something with the radio handle.
- // //
- //
- // CloseHandle( hRadio );
- //
- // } while( BluetoothFindNextRadio( hFind, &hRadio ) );
- //
- // BluetoothFindRadioClose( hFind );
- // }
- //
- // ***************************************************************************
- typedef struct _BLUETOOTH_FIND_RADIO_PARAMS {
- DWORD dwSize; // IN sizeof this structure
- } BLUETOOTH_FIND_RADIO_PARAMS;
- typedef HANDLE HBLUETOOTH_RADIO_FIND;
- //
- // Description:
- // Begins the enumeration of local Bluetooth radios.
- //
- // Parameters:
- // pbtfrp
- // A pointer to a BLUETOOTH_FIND_RADIO_PARAMS structure. The dwSize
- // member of this structure must match the sizeof the of the structure.
- //
- // phRadio
- // A pointer where the first radio HANDLE enumerated will be returned.
- //
- // Return Values:
- // NULL
- // Error opening radios or no devices found. Use GetLastError() for
- // more info.
- //
- // ERROR_INVALID_PARAMETER
- // pbtfrp parameter is NULL.
- //
- // ERROR_REVISION_MISMATCH
- // The pbtfrp structure is not the right length.
- //
- // ERROR_OUTOFMEMORY
- // Out of memory.
- //
- // other Win32 errors.
- //
- // any other
- // Success. The return handle is valid and phRadio points to a valid handle.
- //
- HBLUETOOTH_RADIO_FIND
- WINAPI
- BluetoothFindFirstRadio(
- BLUETOOTH_FIND_RADIO_PARAMS * pbtfrp,
- HANDLE * phRadio
- );
- //
- // Description:
- // Finds the next installed Bluetooth radio.
- //
- // Parameters:
- // hFind
- // The handle returned by BluetoothFindFirstRadio().
- //
- // phRadio
- // A pointer where the next radio HANDLE enumerated will be returned.
- //
- // Return Values:
- // TRUE
- // Next device succesfully found. pHandleOut points to valid handle.
- //
- // FALSE
- // No device found. pHandleOut points to an invalid handle. Call
- // GetLastError() for more details.
- //
- // ERROR_INVALID_HANDLE
- // The handle is NULL.
- //
- // ERROR_NO_MORE_ITEMS
- // No more radios found.
- //
- // ERROR_OUTOFMEMORY
- // Out of memory.
- //
- // other Win32 errors
- //
- BOOL
- WINAPI
- BluetoothFindNextRadio(
- HBLUETOOTH_RADIO_FIND hFind,
- HANDLE * phRadio
- );
- //
- // Description:
- // Closes the enumeration handle.
- //
- // Parameters
- // hFind
- // The handle returned by BluetoothFindFirstRadio().
- //
- // Return Values:
- // TRUE
- // Handle succesfully closed.
- //
- // FALSE
- // Failure. Check GetLastError() for details.
- //
- // ERROR_INVALID_HANDLE
- // The handle is NULL.
- //
- BOOL
- WINAPI
- BluetoothFindRadioClose(
- HBLUETOOTH_RADIO_FIND hFind
- );
- // ***************************************************************************
- //
- // Radio Information
- //
- // ***************************************************************************
- typedef struct _BLUETOOTH_RADIO_INFO {
- DWORD dwSize; // Size, in bytes, of this entire data structure
- BLUETOOTH_ADDRESS address; // Address of the local radio
- WCHAR szName[ BLUETOOTH_MAX_NAME_SIZE ]; // Name of the local radio
- ULONG ulClassofDevice; // Class of device for the local radio
- USHORT lmpSubversion; // lmpSubversion, manufacturer specifc.
- USHORT manufacturer; // Manufacturer of the radio, BTH_MFG_Xxx value. For the most up to date
- // list, goto the Bluetooth specification website and get the Bluetooth
- // assigned numbers document.
- } BLUETOOTH_RADIO_INFO, *PBLUETOOTH_RADIO_INFO;
- //
- // Description:
- // Retrieves the information about the radio represented by the handle.
- //
- // Parameters:
- // hRadio
- // Handle to a local radio retrieved through BluetoothFindFirstRadio()
- // et al or SetupDiEnumerateDeviceInterfaces()
- //
- // pRadioInfo
- // Radio information to be filled in. The dwSize member must match the
- // size of the structure.
- //
- // Return Values:
- // ERROR_SUCCESS
- // The information was retrieved successfully.
- //
- // ERROR_INVALID_PARAMETER
- // pRadioInfo or hRadio is NULL.
- //
- // ERROR_REVISION_MISMATCH
- // pRadioInfo->dwSize is invalid.
- //
- // other Win32 error codes.
- //
- DWORD
- WINAPI
- BluetoothGetRadioInfo(
- HANDLE hRadio,
- PBLUETOOTH_RADIO_INFO pRadioInfo
- );
- // ***************************************************************************
- //
- // Device Information Stuctures
- //
- // ***************************************************************************
- typedef struct _BLUETOOTH_DEVICE_INFO {
- DWORD dwSize; // size, in bytes, of this structure - must be the sizeof(BLUETOOTH_DEVICE_INFO)
- BLUETOOTH_ADDRESS Address; // Bluetooth address
- ULONG ulClassofDevice; // Bluetooth "Class of Device"
- BOOL fConnected; // Device connected/in use
- BOOL fRemembered; // Device remembered
- BOOL fAuthenticated; // Device authenticated/paired/bonded
- SYSTEMTIME stLastSeen; // Last time the device was seen
- SYSTEMTIME stLastUsed; // Last time the device was used for other than RNR, inquiry, or SDP
- WCHAR szName[ BLUETOOTH_MAX_NAME_SIZE ]; // Name of the device
- } BLUETOOTH_DEVICE_INFO_STRUCT;
- #define BLUETOOTH_DEVICE_INFO BLUETOOTH_DEVICE_INFO_STRUCT
- typedef BLUETOOTH_DEVICE_INFO * PBLUETOOTH_DEVICE_INFO;
- // ***************************************************************************
- //
- // Device Enumeration
- //
- // Description:
- // Enumerates the Bluetooth devices. The types of returned device depends
- // on the flags set in the BLUETOOTH_DEVICE_SEARCH_PARAMS (see structure
- // definition for details).
- //
- // Sample Usage:
- // HBLUETOOTH_DEVICE_FIND hFind;
- // BLUETOOTH_DEVICE_SEARCH_PARAMS btsp = { sizeof(btsp) };
- // BLUETOOTH_DEVICE_INFO btdi = { sizeof(btdi) };
- //
- // btsp.fReturnAuthenticated = TRUE;
- // btsp.fReturnRemembered = TRUE;
- //
- // hFind = BluetoothFindFirstDevice( &btsp, &btdi );
- // if ( NULL != hFind )
- // {
- // do
- // {
- // //
- // // TODO: Do something useful with the device info.
- // //
- //
- // } while( BluetoothFindNextDevice( hFind, &btdi ) );
- //
- // BluetoothFindDeviceClose( hFind );
- // }
- //
- // ***************************************************************************
- typedef struct _BLUETOOTH_DEVICE_SEARCH_PARAMS {
- DWORD dwSize; // IN sizeof this structure
- BOOL fReturnAuthenticated; // IN return authenticated devices
- BOOL fReturnRemembered; // IN return remembered devices
- BOOL fReturnUnknown; // IN return unknown devices
- BOOL fReturnConnected; // IN return connected devices
- BOOL fIssueInquiry; // IN issue a new inquiry
- UCHAR cTimeoutMultiplier; // IN timeout for the inquiry
- HANDLE hRadio; // IN handle to radio to enumerate - NULL == all radios will be searched
- } BLUETOOTH_DEVICE_SEARCH_PARAMS;
- typedef HANDLE HBLUETOOTH_DEVICE_FIND;
- //
- // Description:
- // Begins the enumeration of Bluetooth devices.
- //
- // Parameters:
- // pbtsp
- // A pointer to a BLUETOOTH_DEVICE_SEARCH_PARAMS structure. This
- // structure contains the flags and inputs used to conduct the search.
- // See BLUETOOTH_DEVICE_SEARCH_PARAMS for details.
- //
- // pbtdi
- // A pointer to a BLUETOOTH_DEVICE_INFO structure to return information
- // about the first Bluetooth device found. Note that the dwSize member
- // of the structure must be the sizeof(BLUETOOTH_DEVICE_INFO) before
- // calling because the APIs hast to know the size of the buffer being
- // past in. The dwSize member must also match the exact
- // sizeof(BLUETOOTH_DEVICE_INFO) or the call will fail.
- //
- // Return Values:
- // NULL
- // Error opening radios or not devices found. Use GetLastError for more info.
- //
- // ERROR_INVALID_PARAMETER
- // pbtsp parameter or pbtdi parameter is NULL.
- //
- // ERROR_REVISION_MISMATCH
- // The pbtfrp structure is not the right length.
- //
- // other Win32 errors
- //
- // any other value
- // Success. The return handle is valid and pbtdi points to valid data.
- //
- HBLUETOOTH_DEVICE_FIND
- WINAPI
- BluetoothFindFirstDevice(
- BLUETOOTH_DEVICE_SEARCH_PARAMS * pbtsp,
- BLUETOOTH_DEVICE_INFO * pbtdi
- );
- //
- // Description:
- // Finds the next Bluetooth device in the enumeration.
- //
- // Parameters:
- // hFind
- // The handle returned from BluetoothFindFirstDevice().
- //
- // pbtdi
- // A pointer to a BLUETOOTH_DEVICE_INFO structure to return information
- // about the first Bluetooth device found. Note that the dwSize member
- // of the structure must be the sizeof(BLUETOOTH_DEVICE_INFO) before
- // calling because the APIs hast to know the size of the buffer being
- // past in. The dwSize member must also match the exact
- // sizeof(BLUETOOTH_DEVICE_INFO) or the call will fail.
- //
- // Return Values:
- // TRUE
- // Next device succesfully found. pHandleOut points to valid handle.
- //
- // FALSE
- // No device found. pHandleOut points to an invalid handle. Call
- // GetLastError() for more details.
- //
- // ERROR_INVALID_HANDLE
- // The handle is NULL.
- //
- // ERROR_NO_MORE_ITEMS
- // No more radios found.
- //
- // ERROR_OUTOFMEMORY
- // Out of memory.
- //
- // other Win32 errors
- //
- BOOL
- WINAPI
- BluetoothFindNextDevice(
- HBLUETOOTH_DEVICE_FIND hFind,
- BLUETOOTH_DEVICE_INFO * pbtdi
- );
- //
- // Description:
- // Closes the enumeration handle.
- //
- // Parameters:
- // hFind
- // The handle returned from BluetoothFindFirstDevice().
- //
- // Return Values:
- // TRUE
- // Handle succesfully closed.
- //
- // FALSE
- // Failure. Check GetLastError() for details.
- //
- // ERROR_INVALID_HANDLE
- // The handle is NULL.
- //
- BOOL
- WINAPI
- BluetoothFindDeviceClose(
- HBLUETOOTH_DEVICE_FIND hFind
- );
- //
- // Description:
- // Retrieves information about a remote device.
- //
- // Fill in the dwSize and the Address members of the pbtdi structure
- // being passed in. On success, the rest of the members will be filled
- // out with the information that the system knows.
- //
- // Parameters:
- // hRadio
- // Handle to a local radio retrieved through BluetoothFindFirstRadio()
- // et al or SetupDiEnumerateDeviceInterfaces()
- //
- // pbtdi
- // A pointer to a BLUETOOTH_DEVICE_INFO structure to return information
- // about the first Bluetooth device found. The dwSize member of the
- // structure must be the sizeof the structure in bytes. The Address
- // member must be filled out with the Bluetooth address of the remote
- // device.
- //
- // Return Values:
- // ERROR_SUCCESS
- // Success. Information returned.
- //
- // ERROR_REVISION_MISMATCH
- // The size of the BLUETOOTH_DEVICE_INFO isn't compatible. Check
- // the dwSize member of the BLUETOOTH_DEVICE_INFO structure you
- // passed in.
- //
- // ERROR_NOT_FOUND
- // The radio is not known by the system or the Address field of
- // the BLUETOOTH_DEVICE_INFO structure is all zeros.
- //
- // ERROR_INVALID_PARAMETER
- // pbtdi is NULL.
- //
- // other error codes
- //
- DWORD
- WINAPI
- BluetoothGetDeviceInfo(
- HANDLE hRadio,
- BLUETOOTH_DEVICE_INFO * pbtdi
- );
- //
- // Description:
- // Updates the computer local cache about the device.
- //
- // Parameters:
- // pbtdi
- // A pointer to the BLUETOOTH_DEVICE_INFO structure to be updated.
- // The following members must be valid:
- // dwSize
- // Must match the size of the structure.
- // Address
- // Must be a previously found radio address.
- // szName
- // New name to be stored.
- //
- // Return Values:
- // ERROR_SUCCESS
- // The device information was updated successfully.
- //
- // ERROR_INVALID_PARAMETER
- // pbtdi is NULL.
- //
- // ERROR_REVISION_MISMATCH
- // pbtdi->dwSize is invalid.
- //
- // other Win32 error codes.
- //
- DWORD
- WINAPI
- BluetoothUpdateDeviceRecord(
- BLUETOOTH_DEVICE_INFO * pbtdi
- );
- //
- // Description:
- // Delete the authentication (aka "bond") between the computer and the
- // device. Also purges any cached information about the device.
- //
- // Return Values:
- // ERROR_SUCCESS
- // The device was removed successfully.
- //
- // ERROR_NOT_FOUND
- // The device was not found. If no Bluetooth radio is installed,
- // the devices could not be enumerated or removed.
- //
- DWORD
- WINAPI
- BluetoothRemoveDevice(
- BLUETOOTH_ADDRESS * pAddress
- );
- // ***************************************************************************
- //
- // Device Picker Dialog
- //
- // Description:
- // Invokes a common dialog for selecting Bluetooth devices. The list
- // of devices displayed to the user is determined by the flags and
- // settings the caller specifies in the BLUETOOTH_SELECT_DEVICE_PARAMS
- // (see structure definition for more details).
- //
- // If BluetoothSelectDevices() returns TRUE, the caller must call
- // BluetoothSelectDevicesFree() or memory will be leaked within the
- // process.
- //
- // Sample Usage:
- //
- // BLUETOOTH_SELECT_DEVICE_PARAMS btsdp = { sizeof(btsdp) };
- //
- // btsdp.hwndParent = hDlg;
- // btsdp.fShowUnknown = TRUE;
- // btsdp.fAddNewDeviceWizard = TRUE;
- //
- // BOOL b = BluetoothSelectDevices( &btsdp );
- // if ( b )
- // {
- // BLUETOOTH_DEVICE_INFO * pbtdi = btsdp.pDevices;
- // for ( ULONG cDevice = 0; cDevice < btsdp.cNumDevices; cDevice ++ )
- // {
- // if ( pbtdi->fAuthenticated || pbtdi->fRemembered )
- // {
- // //
- // // TODO: Do something usefull with the device info
- // //
- // }
- //
- // pbtdi = (BLUETOOTH_DEVICE_INFO *) ((LPBYTE)pbtdi + pbtdi->dwSize);
- // }
- //
- // BluetoothSelectDevicesFree( &btsdp );
- // }
- //
- // ***************************************************************************
- typedef struct _BLUETOOTH_COD_PAIRS {
- ULONG ulCODMask; // ClassOfDevice mask to compare
- LPCWSTR pcszDescription; // Descriptive string of mask
- } BLUETOOTH_COD_PAIRS;
- typedef BOOL (WINAPI *PFN_DEVICE_CALLBACK)(LPVOID pvParam, PBLUETOOTH_DEVICE_INFO pDevice);
- typedef struct _BLUETOOTH_SELECT_DEVICE_PARAMS {
- DWORD dwSize; // IN sizeof this structure
- ULONG cNumOfClasses; // IN Number in prgClassOfDevice - if ZERO search for all devices
- BLUETOOTH_COD_PAIRS * prgClassOfDevices; // IN Array of CODs to find.
- LPWSTR pszInfo; // IN If not NULL, sets the "information" text
- HWND hwndParent; // IN parent window - NULL == no parent
- BOOL fForceAuthentication; // IN If TRUE, authenication will be forced before returning
- BOOL fShowAuthenticated; // IN If TRUE, authenticated devices will be shown in the picker
- BOOL fShowRemembered; // IN If TRUE, remembered devices will be shown in the picker
- BOOL fShowUnknown; // IN If TRUE, unknown devices that are not authenticated or "remember" will be shown.
- BOOL fAddNewDeviceWizard; // IN If TRUE, invokes the add new device wizard.
- BOOL fSkipServicesPage; // IN If TRUE, skips the "Services" page in the wizard.
- PFN_DEVICE_CALLBACK pfnDeviceCallback; // IN If non-NULL, a callback that will be called for each device. If the
- // the callback returns TRUE, the item will be added. If the callback is
- // is FALSE, the item will not be shown.
- LPVOID pvParam; // IN Parameter to be passed to pfnDeviceCallback as the pvParam.
- DWORD cNumDevices; // IN number calles wants - ZERO == no limit.
- // OUT the number of devices returned.
- PBLUETOOTH_DEVICE_INFO pDevices; // OUT pointer to an array for BLUETOOTH_DEVICE_INFOs.
- // call BluetoothSelectDevicesFree() to free
- } BLUETOOTH_SELECT_DEVICE_PARAMS;
- //
- // Description:
- // (See header above)
- //
- // Return Values:
- // TRUE
- // User selected a device. pbtsdp->pDevices points to valid data.
- // Caller should check the fAuthenticated && fRemembered flags to
- // determine which devices we successfuly authenticated or valid
- // selections by the user.
- //
- // Use BluetoothSelectDevicesFree() to free the nessecary data
- // such as pDevices only if this function returns TRUE.
- //
- // FALSE
- // No valid data returned. Call GetLastError() for possible details
- // of the failure. If GLE() is:
- //
- // ERROR_CANCELLED
- // The user cancelled the request.
- //
- // ERROR_INVALID_PARAMETER
- // The pbtsdp is NULL.
- //
- // ERROR_REVISION_MISMATCH
- // The structure passed in as pbtsdp is of an unknown size.
- //
- // other WIN32 errors
- //
- BOOL
- WINAPI
- BluetoothSelectDevices(
- BLUETOOTH_SELECT_DEVICE_PARAMS * pbtsdp
- );
- //
- // Description:
- // This function should only be called if BluetoothSelectDevices() returns
- // TRUE. This function will free any memory and resource returned by the
- // BluetoothSelectDevices() in the BLUETOOTH_SELECT_DEVICE_PARAMS
- // structure.
- //
- // Return Values:
- // TRUE
- // Success.
- //
- // FALSE
- // Nothing to free.
- //
- BOOL
- WINAPI
- BluetoothSelectDevicesFree(
- BLUETOOTH_SELECT_DEVICE_PARAMS * pbtsdp
- );
- // ***************************************************************************
- //
- // Device Property Sheet
- //
- // ***************************************************************************
- //
- // Description:
- // Invokes the CPLs device info property sheet.
- //
- // Parameters:
- // hwndParent
- // HWND to parent the property sheet.
- //
- // pbtdi
- // A pointer to a BLUETOOTH_DEVICE_INFO structure of the device
- // to be displayed.
- //
- // Return Values:
- // TRUE
- // The property page was successfully displayed.
- //
- // FALSE
- // Failure. The property page was not displayed. Check GetLastError
- // for more details.
- //
- BOOL
- WINAPI
- BluetoothDisplayDeviceProperties(
- HWND hwndParent,
- BLUETOOTH_DEVICE_INFO * pbtdi
- );
- // ***************************************************************************
- //
- // Radio Authentication
- //
- // ***************************************************************************
- //
- // Description:
- // Sends an authentication request to a remote device.
- //
- // There are two modes of operation. "Wizard mode" and "Blind mode."
- //
- // "Wizard mode" is invoked when the pszPasskey is NULL. This will cause
- // the "Bluetooth Connection Wizard" to be invoked. The user will be
- // prompted to enter a passkey during the wizard after which the
- // authentication request will be sent. The user will see the success
- // or failure of the authentication attempt. The user will also be
- // given the oppurtunity to try to fix a failed authentication.
- //
- // "Blind mode" is invoked when the pszPasskey is non-NULL. This will
- // cause the computer to send a authentication request to the remote
- // device. No UI is ever displayed. The Bluetooth status code will be
- // mapped to a Win32 Error code.
- //
- // Parameters:
- //
- // hwndParent
- // The window to parent the authentication wizard. If NULL, the
- // wizard will be parented off the desktop.
- //
- // hRadio
- // A valid local radio handle or NULL. If NULL, then all radios will
- // be tired. If any of the radios succeed, then the call will
- // succeed.
- //
- // pbtdi
- // BLUETOOTH_DEVICE_INFO record of the device to be authenticated.
- //
- // pszPasskey
- // PIN to be used to authenticate the device. If NULL, then UI is
- // displayed and the user steps through the authentication process.
- // If not NULL, no UI is shown. The passkey is NOT NULL terminated.
- //
- // ulPasskeyLength
- // Length of szPassKey in bytes. The length must be less than or
- // equal to BLUETOOTH_MAX_PASSKEY_SIZE * sizeof(WCHAR).
- //
- // Return Values:
- //
- // ERROR_SUCCESS
- // Success.
- //
- // ERROR_CANCELLED
- // User aborted the operation.
- //
- // ERROR_INVALID_PARAMETER
- // The device structure in pbtdi is invalid.
- //
- // ERROR_NO_MORE_ITEMS
- // The device in pbtdi is already been marked as authenticated.
- //
- // other WIN32 error
- // Failure. Return value is the error code.
- //
- // For "Blind mode," here is the current mapping of Bluetooth status
- // code to Win32 error codes:
- //
- // { BTH_ERROR_SUCCESS, ERROR_SUCCESS },
- // { BTH_ERROR_NO_CONNECTION, ERROR_DEVICE_NOT_CONNECTED },
- // { BTH_ERROR_PAGE_TIMEOUT, WAIT_TIMEOUT },
- // { BTH_ERROR_HARDWARE_FAILURE, ERROR_GEN_FAILURE },
- // { BTH_ERROR_AUTHENTICATION_FAILURE, ERROR_NOT_AUTHENTICATED },
- // { BTH_ERROR_MEMORY_FULL, ERROR_NOT_ENOUGH_MEMORY },
- // { BTH_ERROR_CONNECTION_TIMEOUT, WAIT_TIMEOUT },
- // { BTH_ERROR_LMP_RESPONSE_TIMEOUT, WAIT_TIMEOUT },
- // { BTH_ERROR_MAX_NUMBER_OF_CONNECTIONS, ERROR_REQ_NOT_ACCEP },
- // { BTH_ERROR_PAIRING_NOT_ALLOWED, ERROR_ACCESS_DENIED },
- // { BTH_ERROR_UNSPECIFIED_ERROR, ERROR_NOT_READY },
- // { BTH_ERROR_LOCAL_HOST_TERMINATED_CONNECTION, ERROR_VC_DISCONNECTED },
- //
- DWORD
- WINAPI
- BluetoothAuthenticateDevice(
- HWND hwndParent,
- HANDLE hRadio,
- BLUETOOTH_DEVICE_INFO * pbtbi,
- PWCHAR pszPasskey,
- ULONG ulPasskeyLength
- );
- //
- // Description:
- // Allows the caller to prompt for multiple devices to be authenticated
- // within a single instance of the "Bluetooth Connection Wizard."
- //
- // Parameters:
- //
- // hwndParent
- // The window to parent the authentication wizard. If NULL, the
- // wizard will be parented off the desktop.
- //
- // hRadio
- // A valid local radio handle or NULL. If NULL, then all radios will
- // be tired. If any of the radios succeed, then the call will
- // succeed.
- //
- // cDevices
- // Number of devices in the rgbtdi array.
- //
- // rgbtdi
- // An array BLUETOOTH_DEVICE_INFO records of the devices to be
- // authenticated.
- //
- // Return Values:
- //
- // ERROR_SUCCESS
- // Success. Check the fAuthenticate flag on each of the devices.
- //
- // ERROR_CANCELLED
- // User aborted the operation. Check the fAuthenticate flags on
- // each device to determine if any of the devices were authenticated
- // before the user cancelled the operation.
- //
- // ERROR_INVALID_PARAMETER
- // One of the items in the array of devices is invalid.
- //
- // ERROR_NO_MORE_ITEMS
- // All the devices in the array of devices are already been marked as
- // being authenticated.
- //
- // other WIN32 error
- // Failure. Return value is the error code.
- //
- DWORD
- WINAPI
- BluetoothAuthenticateMultipleDevices(
- HWND hwndParent,
- HANDLE hRadio,
- DWORD cDevices,
- BLUETOOTH_DEVICE_INFO * pbtdi
- );
- // ***************************************************************************
- //
- // Bluetooth Services
- //
- // ***************************************************************************
- #define BLUETOOTH_SERVICE_DISABLE 0x00
- #define BLUETOOTH_SERVICE_ENABLE 0x01
- #define BLUETOOTH_SERVICE_MASK ( BLUETOOTH_ENABLE_SERVICE | BLUETOOTH_DISABLE_SERVICE )
- //
- // Description:
- // Enables/disables the services for a particular device.
- //
- // The system maintains a mapping of service guids to supported drivers for
- // Bluetooth-enabled devices. Enabling a service installs the corresponding
- // device driver. Disabling a service removes the corresponding device driver.
- //
- // If a non-supported service is enabled, a driver will not be installed.
- //
- // Parameters
- // hRadio
- // Handle of the local Bluetooth radio device.
- //
- // pbtdi
- // Pointer to a BLUETOOTH_DEVICE_INFO record.
- //
- // pGuidService
- // The service GUID on the remote device.
- //
- // dwServiceFlags
- // Flags to adjust the service.
- // BLUETOOTH_SERVICE_DISABLE - disable the service
- // BLUETOOTH_SERVICE_ENABLE - enables the service
- //
- // Return Values:
- // ERROR_SUCCESS
- // The call was successful.
- //
- // ERROR_INVALID_PARAMETER
- // dwServiceFlags are invalid.
- //
- // ERROR_SERVICE_DOES_NOT_EXIST
- // The GUID in pGuidService is not supported.
- //
- // other WIN32 error
- // The call failed.
- //
- DWORD
- WINAPI
- BluetoothSetServiceState(
- HANDLE hRadio,
- BLUETOOTH_DEVICE_INFO * pbtdi,
- GUID * pGuidService,
- DWORD dwServiceFlags
- );
- //
- // Description:
- // Enumerates the services guids enabled on a particular device. If hRadio
- // is NULL, all device will be searched for the device and all the services
- // enabled will be returned.
- //
- // Parameters:
- // hRadio
- // Handle of the local Bluetooth radio device. If NULL, it will search
- // all the radios for the address in the pbtdi.
- //
- // pbtdi
- // Pointer to a BLUETOOTH_DEVICE_INFO record.
- //
- // pcService
- // On input, the number of records pointed to by pGuidServices.
- // On output, the number of valid records return in pGuidServices.
- //
- // pGuidServices
- // Pointer to memory that is at least *pcService in length.
- //
- // Return Values:
- // ERROR_SUCCESS
- // The call succeeded. pGuidServices is valid.
- //
- // ERROR_MORE_DATA
- // The call succeeded. pGuidService contains an incomplete list of
- // enabled service GUIDs.
- //
- // other WIN32 errors
- // The call failed.
- //
- DWORD
- WINAPI
- BluetoothEnumerateInstalledServices(
- HANDLE hRadio,
- BLUETOOTH_DEVICE_INFO * pbtdi,
- DWORD * pcServices,
- GUID * pGuidServices
- );
- //
- // Description:
- // Change the discovery state of the local radio(s).
- // If hRadio is NULL, all the radios will be set.
- //
- // Use BluetoothIsDiscoverable() to determine the radios current state.
- //
- // The system ensures that a discoverable system is connectable, thus
- // the radio must allow incoming connections (see
- // BluetoothEnableIncomingConnections) prior to making a radio
- // discoverable. Failure to do so will result in this call failing
- // (returns FALSE).
- //
- // Parameters:
- // hRadio
- // If not NULL, changes the state of a specific radio.
- // If NULL, the API will interate through all the radios.
- //
- // fEnabled
- // If FALSE, discovery will be disabled.
- //
- // Return Values
- // TRUE
- // State was successfully changed. If the caller specified NULL for
- // hRadio, at least of the radios accepted the state change.
- //
- // FALSE
- // State was not changed. If the caller specified NULL for hRadio, all
- // of the radios did not accept the state change.
- //
- BOOL
- WINAPI
- BluetoothEnableDiscovery(
- HANDLE hRadio,
- BOOL fEnabled
- );
- //
- // Description:
- // Determines if the Bluetooth radios are discoverable. If there are
- // multiple radios, the first one to say it is discoverable will cause
- // this function to return TRUE.
- //
- // Parameters:
- // hRadio
- // Handle of the radio to check. If NULL, it will check all local
- // radios.
- //
- // Return Values:
- // TRUE
- // A least one radio is discoverable.
- //
- // FALSE
- // No radios are discoverable.
- //
- BOOL
- WINAPI
- BluetoothIsDiscoverable(
- HANDLE hRadio
- );
- //
- // Description:
- // Enables/disables the state of a radio to accept incoming connections.
- // If hRadio is NULL, all the radios will be set.
- //
- // Use BluetoothIsConnectable() to determine the radios current state.
- //
- // The system enforces that a radio that is not connectable is not
- // discoverable too. The radio must be made non-discoverable (see
- // BluetoothEnableDiscovery) prior to making a radio non-connectionable.
- // Failure to do so will result in this call failing (returns FALSE).
- //
- // Parameters:
- // hRadio
- // If not NULL, changes the state of a specific radio.
- // If NULL, the API will interate through all the radios.
- //
- // fEnabled
- // If FALSE, incoming connection will be disabled.
- //
- // Return Values
- // TRUE
- // State was successfully changed. If the caller specified NULL for
- // hRadio, at least of the radios accepted the state change.
- //
- // FALSE
- // State was not changed. If the caller specified NULL for hRadio, all
- // of the radios did not accept the state change.
- //
- BOOL
- WINAPI
- BluetoothEnableIncomingConnections(
- HANDLE hRadio,
- BOOL fEnabled
- );
- //
- // Description:
- // Determines if the Bluetooth radios are connectable. If there are
- // multiple radios, the first one to say it is connectable will cause
- // this function to return TRUE.
- //
- // Parameters:
- // hRadio
- // Handle of the radio to check. If NULL, it will check all local
- // radios.
- //
- // Return Values:
- // TRUE
- // A least one radio is allowing incoming connections.
- //
- // FALSE
- // No radios are allowing incoming connections.
- //
- BOOL
- WINAPI
- BluetoothIsConnectable(
- HANDLE hRadio
- );
- // ***************************************************************************
- //
- // Authentication Registration
- //
- // ***************************************************************************
- typedef HANDLE HBLUETOOTH_AUTHENTICATION_REGISTRATION;
- typedef BOOL (*PFN_AUTHENTICATION_CALLBACK)(LPVOID pvParam, PBLUETOOTH_DEVICE_INFO pDevice);
- //
- // Description:
- // Registers a callback function to be called when a particular device
- // requests authentication. The request is sent to the last application
- // that requested authentication for a particular device.
- //
- // Parameters:
- // pbtdi
- // A pointer to a BLUETOOTH_DEVICE_INFO structure. The Bluetooth
- // address will be used for comparision.
- //
- // phRegHandle
- // A pointer to where the registration HANDLE value will be
- // stored. Call BluetoothUnregisterAuthentication() to close
- // the handle.
- //
- // pfnCallback
- // The function that will be called when the authentication event
- // occurs. This function should match PFN_AUTHENTICATION_CALLBACK's
- // prototype.
- //
- // pvParam
- // Optional parameter to be past through to the callback function.
- // This can be anything the application was to define.
- //
- // Return Values:
- // ERROR_SUCCESS
- // Success. A valid registration handle was returned.
- //
- // ERROR_OUTOFMEMORY
- // Out of memory.
- //
- // other Win32 error.
- // Failure. The registration handle is invalid.
- //
- DWORD
- WINAPI
- BluetoothRegisterForAuthentication(
- BLUETOOTH_DEVICE_INFO * pbtdi,
- HBLUETOOTH_AUTHENTICATION_REGISTRATION * phRegHandle,
- PFN_AUTHENTICATION_CALLBACK pfnCallback,
- PVOID pvParam
- );
- //
- // Description:
- // Unregisters an authentication callback and closes the handle. See
- // BluetoothRegisterForAuthentication() for more information about
- // authentication registration.
- //
- // Parameters:
- // hRegHandle
- // Handle returned by BluetoothRegisterForAuthentication().
- //
- // Return Value:
- // TRUE
- // The handle was successfully closed.
- //
- // FALSE
- // The handle was not successfully closed. Check GetLastError for
- // more details.
- //
- // ERROR_INVALID_HANDLE
- // The handle is NULL.
- //
- // other Win32 errors.
- //
- BOOL
- WINAPI
- BluetoothUnregisterAuthentication(
- HBLUETOOTH_AUTHENTICATION_REGISTRATION hRegHandle
- );
- //
- // Description:
- // This function should be called after receiving an authentication request
- // to send the passkey response.
- //
- // Parameters:
- //
- // hRadio
- // Optional handle to the local radio. If NULL, the function will try
- // each radio until one succeeds.
- //
- // pbtdi
- // A pointer to a BLUETOOTH_DEVICE_INFO structure describing the device
- // being authenticated. This can be the same structure passed to the
- // callback function.
- //
- // pszPasskey
- // A pointer to UNICODE zero-terminated string of the passkey response
- // that should be sent back to the authenticating device.
- //
- // Return Values:
- // ERROR_SUCESS
- // The device accepted the passkey response. The device is authenticated.
- //
- // ERROR_CANCELED
- // The device denied the passkey reponse. This also will returned if there
- // is a communications problem with the local radio.
- //
- // E_FAIL
- // The device returned a failure code during authentication.
- //
- // other Win32 error codes
- //
- DWORD
- WINAPI
- BluetoothSendAuthenticationResponse(
- HANDLE hRadio,
- BLUETOOTH_DEVICE_INFO * pbtdi,
- LPWSTR pszPasskey
- );
- // ***************************************************************************
- //
- // SDP Parsing Functions
- //
- // ***************************************************************************
- typedef struct _SDP_ELEMENT_DATA {
- //
- // Enumeration of SDP element types. Generic element types will have a
- // specificType value other then SDP_ST_NONE. The generic types are:
- // o SDP_TYPE_UINT
- // o SDP_TYPE_INT
- // o SDP_TYPE_UUID
- //
- SDP_TYPE type;
- //
- // Specific types for the generic SDP element types.
- //
- SDP_SPECIFICTYPE specificType;
- //
- // Union of all possible data types. type and specificType will indicate
- // which field is valid. For types which do not have a valid specificType,
- // specific type will be SDP_ST_NONE.
- //
- union {
- // type == SDP_TYPE_INT
- SDP_LARGE_INTEGER_16 int128; // specificType == SDP_ST_INT128
- LONGLONG int64; // specificType == SDP_ST_INT64
- LONG int32; // specificType == SDP_ST_INT32
- SHORT int16; // specificType == SDP_ST_INT16
- CHAR int8; // specificType == SDP_ST_INT8
- // type == SDP_TYPE_UINT
- SDP_ULARGE_INTEGER_16 uint128; // specificType == SDP_ST_UINT128
- ULONGLONG uint64; // specificType == SDP_ST_UINT64
- ULONG uint32; // specificType == SDP_ST_UINT32
- USHORT uint16; // specificType == SDP_ST_UINT16
- UCHAR uint8; // specificType == SDP_ST_UINT8
- // type == SDP_TYPE_BOOLEAN
- UCHAR booleanVal;
- // type == SDP_TYPE_UUID
- GUID uuid128; // specificType == SDP_ST_UUID128
- ULONG uuid32; // specificType == SDP_ST_UUID32
- USHORT uuid16; // specificType == SDP_ST_UUID32
- // type == SDP_TYPE_STRING
- struct {
- // raw string buffer, may not be encoded as ANSI, use
- // BluetoothSdpGetString to convert the value if it is described
- // by the base language attribute ID list
- LPBYTE value;
- // raw length of the string, may not be NULL terminuated
- ULONG length;
- } string;
- // type == SDP_TYPE_URL
- struct {
- LPBYTE value;
- ULONG length;
- } url;
- // type == SDP_TYPE_SEQUENCE
- struct {
- // raw sequence, starts at sequence element header
- LPBYTE value;
- // raw sequence length
- ULONG length;
- } sequence;
- // type == SDP_TYPE_ALTERNATIVE
- struct {
- // raw alternative, starts at alternative element header
- LPBYTE value;
- // raw alternative length
- ULONG length;
- } alternative;
- } data;
- } SDP_ELEMENT_DATA, *PSDP_ELEMENT_DATA;
- //
- // Description:
- // Retrieves and parses the element found at pSdpStream
- //
- // Parameters:
- // IN pSdpStream
- // pointer to valid SDP stream
- //
- // IN cbSdpStreamLength
- // length of pSdpStream in bytes
- //
- // OUT pData
- // pointer to be filled in with the data of the SDP element at the
- // beginning of pSdpStream
- //
- // Return Values:
- // ERROR_INVALID_PARAMETER
- // one of required parameters is NULL or the pSdpStream is invalid
- //
- // ERROR_SUCCESS
- // the sdp element was parsed correctly
- //
- DWORD
- WINAPI
- BluetoothSdpGetElementData(
- LPBYTE pSdpStream,
- ULONG cbSdpStreamLength,
- PSDP_ELEMENT_DATA pData
- );
- typedef HANDLE HBLUETOOTH_CONTAINER_ELEMENT;
- //
- // Description:
- // Iterates over a container stream, returning each elemetn contained with
- // in the container element at the beginning of pContainerStream
- //
- // Parameters:
- // IN pContainerStream
- // pointer to valid SDP stream whose first element is either a sequence
- // or alternative
- //
- // IN cbContainerlength
- // length in bytes of pContainerStream
- //
- // IN OUT pElement
- // Value used to keep track of location within the stream. The first
- // time this function is called for a particular container, *pElement
- // should equal NULL. Upon subsequent calls, the value should be
- // unmodified.
- //
- // OUT pData
- // pointer to be filled in with the data of the SDP element at the
- // current element of pContainerStream
- //
- // Return Values:
- // ERROR_SUCCESS
- // The call succeeded, pData contains the data
- //
- // ERROR_NO_MORE_ITEMS
- // There are no more items in the list, the caller should cease calling
- // BluetoothSdpGetContainerElementData for this container.
- //
- // ERROR_INVALID_PARAMETER
- // A required pointer is NULL or the container is not a valid SDP
- // stream
- //
- // Usage example:
- //
- // HBLUETOOTH_CONTAINER_ELEMENT element;
- // SDP_ELEMENT_DATA data;
- // ULONG result;
- //
- // element = NULL;
- //
- // while (TRUE) {
- // result = BluetoothSdpGetContainerElementData(
- // pContainer, ulContainerLength, &element, &data);
- //
- // if (result == ERROR_NO_MORE_ITEMS) {
- // // We are done
- // break;
- // }
- // else if (result != ERROR_SUCCESS) {
- // // error
- // }
- //
- // // do something with data ...
- // }
- //
- //
- DWORD
- WINAPI
- BluetoothSdpGetContainerElementData(
- LPBYTE pContainerStream,
- ULONG cbContainerLength,
- HBLUETOOTH_CONTAINER_ELEMENT* pElement,
- PSDP_ELEMENT_DATA pData
- );
- //
- // Description:
- // Retrieves the attribute value for the given attribute ID. pRecordStream
- // must be an SDP stream that is formatted as an SDP record, a SEQUENCE
- // containing UINT16 + element pairs.
- //
- // Parameters:
- // IN pRecordStream
- // pointer to a valid SDP stream which is formatted as a singl SDP
- // record
- //
- // IN cbRecordlnegh
- // length of pRecordStream in bytes
- //
- // IN usAttributeId
- // the attribute ID to search for. see bthdef.h for SDP_ATTRIB_Xxx
- // values.
- //
- // OUT pAttributeData
- // pointer that will contain the attribute ID's value
- //
- // Return Values:
- // ERRROR_SUCCESS
- // Call succeeded, pAttributeData contains the attribute value
- //
- // ERROR_INVALID_PARAMETER
- // One of the required pointers was NULL, pRecordStream was not a valid
- // SDP stream, or pRecordStream was not a properly formatted SDP record
- //
- // ERROR_FILE_NOT_FOUND
- // usAttributeId was not found in the record
- //
- // Usage:
- //
- // ULONG result;
- // SDP_DATA_ELEMENT data;
- //
- // result = BluetoothSdpGetAttributeValue(
- // pRecordStream, cbRecordLength, SDP_ATTRIB_RECORD_HANDLE, &data);
- // if (result == ERROR_SUCCESS) {
- // printf("record handle is 0x%x\n", data.data.uint32);
- // }
- //
- DWORD
- WINAPI
- BluetoothSdpGetAttributeValue(
- LPBYTE pRecordStream,
- ULONG cbRecordLength,
- USHORT usAttributeId,
- PSDP_ELEMENT_DATA pAttributeData
- );
- //
- // These three fields correspond one to one with the triplets defined in the
- // SDP specification for the language base attribute ID list.
- //
- typedef struct _SDP_STRING_TYPE_DATA {
- //
- // How the string is encoded according to ISO 639:1988 (E/F): "Code
- // for the representation of names of languages".
- //
- USHORT encoding;
- //
- // MIBE number from IANA database
- //
- USHORT mibeNum;
- //
- // The base attribute where the string is to be found in the record
- //
- USHORT attributeId;
- } SDP_STRING_TYPE_DATA, *PSDP_STRING_TYPE_DATA;
- //
- // Description:
- // Converts a raw string embedded in the SDP record into a UNICODE string
- //
- // Parameters:
- // IN pRecordStream
- // a valid SDP stream which is formatted as an SDP record
- //
- // IN cbRecordLength
- // length of pRecordStream in bytes
- //
- // IN pStringData
- // if NULL, then the calling thread's locale will be used to search
- // for a matching string in the SDP record. If not NUL, the mibeNum
- // and attributeId will be used to find the string to convert.
- //
- // IN usStringOffset
- // the SDP string type offset to convert. usStringOffset is added to
- // the base attribute id of the string. SDP specification defined
- // offsets are: STRING_NAME_OFFSET, STRING_DESCRIPTION_OFFSET, and
- // STRING_PROVIDER_NAME_OFFSET (found in bthdef.h).
- //
- // OUT pszString
- // if NULL, pcchStringLength will be filled in with the required number
- // of characters (not bytes) to retrieve the converted string.
- //
- // IN OUT pcchStringLength
- // Upon input, if pszString is not NULL, will contain the length of
- // pszString in characters. Upon output, it will contain either the
- // number of required characters including NULL if an error is returned
- // or the number of characters written to pszString (including NULL).
- //
- // Return Values:
- // ERROR_SUCCES
- // Call was successful and pszString contains the converted string
- //
- // ERROR_MORE_DATA
- // pszString was NULL or too small to contain the converted string,
- // pccxhStringLength contains the required length in characters
- //
- // ERROR_INVALID_DATA
- // Could not perform the conversion
- //
- // ERROR_NO_SYSTEM_RESOURCES
- // Could not allocate memory internally to perform the conversion
- //
- // ERROR_INVALID_PARAMETER
- // One of the rquired pointers was NULL, pRecordStream was not a valid
- // SDP stream, pRecordStream was not a properly formatted record, or
- // the desired attribute + offset was not a string.
- //
- // Other HRESULTs returned by COM
- //
- DWORD
- WINAPI
- BluetoothSdpGetString(
- LPBYTE pRecordStream,
- ULONG cbRecordLength,
- PSDP_STRING_TYPE_DATA pStringData,
- USHORT usStringOffset,
- PWCHAR pszString,
- PULONG pcchStringLength
- );
- // ***************************************************************************
- //
- // Raw Attribute Enumeration
- //
- // ***************************************************************************
- typedef BOOL (CALLBACK *PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK)(
- ULONG uAttribId,
- LPBYTE pValueStream,
- ULONG cbStreamSize,
- LPVOID pvParam
- );
- //
- // Description:
- // Enumerates through the SDP record stream calling the Callback function
- // for each attribute in the record. If the Callback function returns
- // FALSE, the enumeration is stopped.
- //
- // Return Values:
- // TRUE
- // Success! Something was enumerated.
- //
- // FALSE
- // Failure. GetLastError() could be one of the following:
- //
- // ERROR_INVALID_PARAMETER
- // pSDPStream or pfnCallback is NULL.
- //
- // ERROR_INVALID_DATA
- // The SDP stream is corrupt.
- //
- // other Win32 errors.
- //
- #define BluetoothEnumAttributes BluetoothSdpEnumAttributes
- BOOL
- WINAPI
- BluetoothSdpEnumAttributes(
- LPBYTE pSDPStream,
- ULONG cbStreamSize,
- PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK pfnCallback,
- LPVOID pvParam
- );
- #ifdef __cplusplus
- }
- #endif
|