Función WlanSetPsdIEDataList (wlanapi.h)
La función WlanSetPsdIeDataList establece la lista de datos del elemento de información de detección de servicios de proximidad (PSD).
Sintaxis
DWORD WlanSetPsdIEDataList(
[in] HANDLE hClientHandle,
[in] LPCWSTR strFormat,
[in] const PWLAN_RAW_DATA_LIST pPsdIEDataList,
PVOID pReserved
);
Parámetros
[in] hClientHandle
Identificador de sesión del cliente, obtenido por una llamada anterior a la función WlanOpenHandle .
[in] strFormat
El formato de un IE de PSD en la lista de datos de IE de PSD pasado en el parámetro pPsdIEDataList . Se trata de una cadena de URI terminada en NULL que especifica el espacio de nombres del protocolo utilizado para la detección.
[in] pPsdIEDataList
Puntero a una estructura de WLAN_RAW_DATA_LIST que contiene la lista de datos de IE de PSD que se va a establecer.
pReserved
Reservado para uso futuro. Debe establecerse en NULL.
Valor devuelto
Si la función se ejecuta correctamente, el valor devuelto es ERROR_SUCCESS.
Si se produce un error en la función, el valor devuelto puede ser uno de los siguientes códigos de retorno.
Código devuelto | Descripción |
---|---|
|
Un parámetro es incorrecto. Este error se devuelve si hClientHandle es NULL o no es válido o pReserved no es NULL. |
|
No se encontró el identificador hClientHandle en la tabla handle. |
|
Se llamó a esta función desde una plataforma no admitida. Este valor se devuelve si se llamó a la función desde un Windows XP con SP3 o la API de LAN inalámbrica para Windows XP con el cliente SP2. |
|
Varios códigos de error. |
Observaciones
El Protocolo de detección de servicios de proximidad es un protocolo propietario de Microsoft que permite a un cliente detectar servicios en su proximidad física, que se define mediante el intervalo de radio. El propósito del Protocolo de detección de servicios de proximidad es transmitir información de detección de servicios, como anuncios de servicio, como parte de marcos de baliza. Puntos de acceso (AP) y estaciones (STA) que operan en modo ad hoc periódicamente difunden marcos de baliza. El marco de baliza puede contener elementos de información de propiedad única o múltiple que llevan información de detección relativa a los servicios que ofrece el dispositivo.
Un IE de PSD se usa para transmitir información comprimida proporcionada por protocolos de detección de nivel superior con el fin de la detección pasiva. Uno de estos protocolos de nivel superior que se usan para la detección es el protocolo WS-Discovery. Cualquier protocolo se puede usar para la detección.
Windows Vista y Windows Server 2008 con el servicio LAN inalámbrico instalado admiten la detección pasiva para clientes ad hoc, servicios ad hoc y clientes de infraestructura. Esto significa que un servicio ad hoc puede anunciar un recurso o servicio disponible transmitiendo un IE de PSD en una o varias balizas. No hay ninguna garantía de que esta baliza sea recibida por un cliente ad hoc o de infraestructura.
Windows 7 y Windows Server 2008 R2 con el servicio LAN inalámbrico instalado admiten la detección pasiva para clientes ad hoc, servicios ad hoc y clientes de infraestructura de la misma manera que en Windows Vista. Además, el PSD IE también es compatible con la red inalámbrica hospedada, un punto de acceso inalámbrico basado en software (AP). Las aplicaciones del equipo local donde se va a ejecutar la red hospedada inalámbrica pueden usar la función WlanSetPsdIeDataList para establecer el IE de PSD antes de iniciar la red hospedada inalámbrica. Una vez establecido, el IE de PSD se incluirá en la baliza y la respuesta de sondeo después de que se inicie la red hospedada inalámbrica.
Cada aplicación que envía o recibe balizas mantiene su propia lista de datos de PSD IE. El parámetro pPsdIEDataList apunta a una lista de identificadores PSD generados por la aplicación. Cada IE de PSD tiene el formato siguiente.
Campo | Descripción y valor |
---|---|
Id. de elemento (1 byte) | 221 |
Longitud (1 byte) | Longitud, en bytes, del campo Datos más 8. |
OUI (3 bytes) | El identificador único organizativo (OUI) debe contener un valor de 00-50-F2. Esta OUI pública está registrada en Microsoft. |
Tipo de OUI (1 byte) | Para el Protocolo de detección de servicios de proximidad, el tipo de OUI debe contener un valor de 6. |
Hash de identificador de formato (4 bytes) | Bits 31-0 del HMAC calculado desde el parámetro strFormat . |
Datos (variable) | Contiene datos definidos por el usuario para la detección. Este campo no debe superar los 240 bytes de longitud. |
El campo Hash de identificador de formato describe el formato de la información que se lleva en el IE de PSD. Para garantizar la unicidad al evitar la necesidad de administración central de identificadores de formato, se usa una cadena en forma de identificador uniforme de recursos (URI), como se especifica en RFC 3986, para distinguir el formato. Sin embargo, dado que la transmisión debe ser eficaz y el espacio en el elemento de información es limitado, la cadena no se transmite realmente, sino que, en su lugar, se transmite su hash. En el cliente, que es el lado receptor de la baliza, el hash coincide con un conjunto conocido de identificadores de formato.
El campo hash de identificador de formato se representa mediante bits 0... 31 de un código de autenticación de mensajes basado en hash (HMAC) sobre la cadena de identificador de formato especificada en el parámetro strFormat . HMAC se usa para especificar el formato del campo Datos del IE de PSD. La fórmula utilizada para calcular el HMAC se describe en RFC 2104. El código de ejemplo para el cálculo del HMAC se especifica en RFC 4634. Al calcular el HMAC, use SHA-256 para la función hash. La clave usada es la clave "null" (puntero NULL a la clave de autenticación y la clave de autenticación de longitud cero según el código fuente en RFC 4634). Use el valor del parámetro strFormat (incluidos los espacios pero sin incluir el carácter de terminación NULL) como texto de entrada codificado como Unicode UTF-16 en formato little-endian.
Por ejemplo, si el parámetro strFormat es http://schemas.xmlsoaps.org/ws/2004/10/discovery
, los cuatro primeros octetos del HMAC correspondiente es 0xF8 0xCB 0x35 0x15
.
Si el parámetro strFormat es http://schemas.microsoft.com/networking/discoveryformat/v2
, los cuatro octetos del HMAC correspondiente son 0xCF 0xF1 0x64 0x17
.
Al enviar los primeros 4 octetos de un HMAC a través de la red, envíe primero el primer octeto (de la izquierda).
Tenga en cuenta que puede haber colisiones en los HMAC truncados, lo que significa que puede ser imposible determinar de forma única el protocolo de detección correspondiente a la carga de un IE de PSD de los bits especificados de un HMAC. Una aplicación que recibe un IE de PSD debe tomar una mejor estimación en el protocolo de detección usado desde un HMAC determinado y, a continuación, volver a ejecutar el protocolo de detección de nivel superior una vez establecida una conexión.
Como máximo, se pueden pasar cinco IDE de PSD en una lista. Además, la longitud total, en bytes, de la lista de IE de PSD puede estar restringida por limitaciones de hardware en la longitud de una baliza.
Una aplicación puede llamar a WlanSetPsdIeDataList muchas veces. Cuando se llama a WlanSetPsdIeDataList dos veces con el mismo strFormat, el contenido del WLAN_RAW_DATA_LIST rellenado por la primera llamada de función se sobrescribe mediante la carga WLAN_RAW_DATA_LIST de la segunda llamada. Cuando se llama a WlanSetPsdIeDataList con el parámetro pPsdIEDataList establecido en NULL, se borra la lista de IE de PSD asociada a strFormat . Cuando se llama a WlanSetPsdIeDataList con los parámetros pPsdIEDataList y strFormat establecidos en NULL, se borran todas las listas de IE de PSD establecidas por la aplicación.
El servicio inalámbrico procesa las listas de datos de PSD IE establecidas por diferentes aplicaciones y genera blobs de datos IE sin procesar. Cuando una máquina crea o une una red ad hoc en cualquier adaptador inalámbrico, envía balizas que incluyen un blob de datos DE PSD IE asociado a la red a otras máquinas.
Las estaciones pueden llamar a la función WlanExtractPsdIEDataList para obtener la lista de datos de IE de PSD después de recibir una baliza de una máquina.
Requisitos
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | wlanapi.h (incluya Wlanapi.h) |
Library | Wlanapi.lib |
Archivo DLL | Wlanapi.dll |