структура WLAN_REALTIME_CONNECTION_QUALITY (wlanapi.h)
Важно!
Некоторые сведения относятся к предварительной версии продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет атрибуты, описывающие качество соединения в заданном интерфейсе.
Синтаксис
typedef struct _WLAN_REALTIME_CONNECTION_QUALITY {
DOT11_PHY_TYPE dot11PhyType;
ULONG ulLinkQuality;
ULONG ulRxRate;
ULONG ulTxRate;
BOOL bIsMLOConnection;
ULONG ulNumLinks;
WLAN_REALTIME_CONNECTION_QUALITY_LINK_INFO linksInfo[1];
} WLAN_REALTIME_CONNECTION_QUALITY, *PWLAN_REALTIME_CONNECTION_QUALITY;
Члены
dot11PhyType
Значение DOT11_PHY_TYPE , указывающее физический тип связи.
ulLinkQuality
Процентное значение ULONG , представляющее качество сигнала соединения. Этот элемент содержит значение от 0 до 100. Значение 0 подразумевает фактическую силу сигнала RSSI в –100 dbm. Значение 100 подразумевает фактическую силу сигнала RSSI в размере –50 dbm. Значение силы сигнала RSSI для значений ulLinkQuality в диапазоне от 1 до 99 можно вычислить с помощью линейной интерполяции.
ulRxRate
Содержит скорость получения связи.
ulTxRate
Содержит скорость передачи связи.
bIsMLOConnection
Указывает, является ли это подключение многоканейным подключением (MLO).
ulNumLinks
Количество подключенных ссылок.
linksInfo[1]
WLAN_REALTIME_CONNECTION_QUALITY_LINK_INFO размера ulNumLinks. Каждый элемент содержит сведения о разных подключенных каналах.
Remarks
Примеры
DWORD IsWLANLinkSpeedSufficient(
GUID* interfaceGuid,
const ULONG minRequiredLinkQuality,
const ULONG requiredRxRate,
const ULONG requiredTxRate,
bool* isSufficient)
{
wil::unique_wlan_handle clientHandle;
DWORD maxClientVersion = 2;
DWORD currentClientVersion = 0;
DWORD result = WlanOpenHandle(maxClientVersion, nullptr, ¤tClientVersion, &clientHandle);
if (result != ERROR_SUCCESS)
{
wprintf(L"WlanOpenHandle failed with error: %u\n", result);
return result;
}
DWORD connectionQualitySize = 0;
wil::unique_wlan_ptr<WLAN_REALTIME_CONNECTION_QUALITY> connectionQuality;
result = WlanQueryInterface(
clientHandle.get(),
interfaceGuid,
wlan_intf_opcode_realtime_connection_quality,
nullptr,
&connectionQualitySize,
wil::out_param_ptr<void**>(connectionQuality),
nullptr);
if (result != ERROR_SUCCESS)
{
wprintf(L"WlanQueryInterface failed with error: %u\n", result);
return result;
}
if (connectionQuality->ulLinkQuality < minRequiredLinkQuality ||
connectionQuality->ulRxRate < requiredRxRate ||
connectionQuality->ulTxRate < requiredTxRate)
{
*isSufficient = false;
}
else
{
*isSufficient = true;
}
return ERROR_SUCCESS;
}
DWORD GetCenterChannelFrequencyOfLinkWithBestRSSI(GUID* interfaceGuid, ULONG* channelFrequency)
{
wil::unique_wlan_handle clientHandle;
DWORD maxClientVersion = 2;
DWORD currentClientVersion = 0;
DWORD result = WlanOpenHandle(maxClientVersion, nullptr, ¤tClientVersion, &clientHandle);
if (result != ERROR_SUCCESS)
{
wprintf(L"WlanOpenHandle failed with error: %u\n", result);
return result;
}
DWORD connectionQualitySize = 0;
wil::unique_wlan_ptr<WLAN_REALTIME_CONNECTION_QUALITY> connectionQuality;
result = WlanQueryInterface(
clientHandle.get(),
interfaceGuid,
wlan_intf_opcode_realtime_connection_quality,
nullptr,
&connectionQualitySize,
wil::out_param_ptr<void**>(connectionQuality),
nullptr);
if (result != ERROR_SUCCESS)
{
wprintf(L"WlanQueryInterface failed with error: %u\n", result);
return result;
}
auto linkWithBestRssi = std::min_element(
connectionQuality->linksInfo,
connectionQuality->linksInfo + connectionQuality->ulNumLinks,
[](const WLAN_REALTIME_CONNECTION_QUALITY_LINK_INFO& lhs, const WLAN_REALTIME_CONNECTION_QUALITY_LINK_INFO& rhs) {
return lhs.lRssi > rhs.lRssi; // `Greater than` because RSSI is negative.
});
*channelFrequency = linkWithBestRssi->ulChannelCenterFrequencyMhz;
return ERROR_SUCCESS;
}
Требования
Требование | Значение |
---|---|
Заголовок | wlanapi.h |