WLAN_REALTIME_CONNECTION_QUALITY 구조체(wlanapi.h)
중요
일부 정보는 상용 출시 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. 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은 -100 dbm의 실제 RSSI 신호 강도를 의미합니다. 값이 100이면 실제 RSSI 신호 강도가 -50dbm인 것을 의미합니다. 선형 보간을 사용하여 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;
}
요구 사항
요구 사항 | 값 |
---|---|
헤더 | wlanapi.h |