wlanapi.h) (WLAN_REALTIME_CONNECTION_QUALITY 结构
重要
某些信息与预发行产品相关,该产品在商业发布之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示描述给定接口上的连接质量的属性。
语法
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。 可以使用线性内插计算介于 1 和 99 之间的 ulLinkQuality 值的 RSSI 信号强度值。
ulRxRate
包含关联的接收速率。
ulTxRate
包含关联的传输速率。
bIsMLOConnection
表示这是否是多链接操作 (MLO) 连接。
ulNumLinks
连接的链接数。
linksInfo[1]
大小为 ulNumLinks 的WLAN_REALTIME_CONNECTION_QUALITY_LINK_INFO。 每个元素都包含有关不同连接链接的信息。
注解
示例
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;
}
要求
要求 | 值 |
---|---|
Header | wlanapi.h |