@@ -49,6 +49,7 @@ const char* ffDetectWifi(FFlist* result)
4949 FF_LIBRARY_LOAD_SYMBOL_MESSAGE (wlanapi , WlanQueryInterface )
5050 FF_LIBRARY_LOAD_SYMBOL_MESSAGE (wlanapi , WlanFreeMemory )
5151 FF_LIBRARY_LOAD_SYMBOL_MESSAGE (wlanapi , WlanCloseHandle )
52+ FF_LIBRARY_LOAD_SYMBOL_MESSAGE (wlanapi , WlanGetNetworkBssList )
5253
5354 DWORD curVersion ;
5455 HANDLE hClient = NULL ;
@@ -82,21 +83,23 @@ const char* ffDetectWifi(FFlist* result)
8283 item -> conn .signalQuality = 0.0 /0.0 ;
8384 item -> conn .rxRate = 0.0 /0.0 ;
8485 item -> conn .txRate = 0.0 /0.0 ;
86+ item -> conn .channel = 0 ;
87+ item -> conn .frequency = 0 ;
8588
8689 convertIfStateToString (ifInfo -> isState , & item -> inf .status );
8790
8891 if (ifInfo -> isState != wlan_interface_state_connected )
8992 continue ;
9093
91- DWORD connectInfoSize = sizeof (WLAN_CONNECTION_ATTRIBUTES );
92- WLAN_OPCODE_VALUE_TYPE opCode = wlan_opcode_value_type_invalid ;
9394 WLAN_CONNECTION_ATTRIBUTES * connInfo = NULL ;
95+ DWORD bufSize = sizeof (* connInfo );
96+ WLAN_OPCODE_VALUE_TYPE opCode = wlan_opcode_value_type_query_only ;
9497
9598 if (ffWlanQueryInterface (hClient ,
9699 & ifInfo -> InterfaceGuid ,
97100 wlan_intf_opcode_current_connection ,
98101 NULL ,
99- & connectInfoSize ,
102+ & bufSize ,
100103 (PVOID * )& connInfo ,
101104 & opCode ) != ERROR_SUCCESS
102105 ) continue ;
@@ -107,8 +110,8 @@ const char* ffDetectWifi(FFlist* result)
107110 (const char * )connInfo -> wlanAssociationAttributes .dot11Ssid .ucSSID );
108111
109112 for (size_t i = 0 ; i < sizeof (connInfo -> wlanAssociationAttributes .dot11Bssid ); i ++ )
110- ffStrbufAppendF (& item -> conn .bssid , "%.2X- " , connInfo -> wlanAssociationAttributes .dot11Bssid [i ]);
111- ffStrbufTrimRight (& item -> conn .bssid , '- ' );
113+ ffStrbufAppendF (& item -> conn .bssid , "%.2X: " , connInfo -> wlanAssociationAttributes .dot11Bssid [i ]);
114+ ffStrbufTrimRight (& item -> conn .bssid , ': ' );
112115
113116 switch (connInfo -> wlanAssociationAttributes .dot11PhyType )
114117 {
@@ -201,7 +204,34 @@ const char* ffDetectWifi(FFlist* result)
201204 else
202205 ffStrbufAppendS (& item -> conn .security , "Insecure" );
203206
207+ WLAN_BSS_LIST * bssList = NULL ;
208+ if (ffWlanGetNetworkBssList (hClient ,
209+ & ifInfo -> InterfaceGuid ,
210+ & connInfo -> wlanAssociationAttributes .dot11Ssid ,
211+ connInfo -> wlanAssociationAttributes .dot11BssType ,
212+ connInfo -> wlanSecurityAttributes .bSecurityEnabled ,
213+ NULL ,
214+ & bssList ) == ERROR_SUCCESS && bssList -> dwNumberOfItems > 0
215+ ) {
216+ item -> conn .frequency = (uint16_t ) (bssList -> wlanBssEntries [0 ].ulChCenterFrequency / 1000 );
217+ ffWlanFreeMemory (bssList );
218+ }
219+
204220 ffWlanFreeMemory (connInfo );
221+
222+ ULONG * channelNumber = 0 ;
223+ bufSize = sizeof (* channelNumber );
224+ if (ffWlanQueryInterface (hClient ,
225+ & ifInfo -> InterfaceGuid ,
226+ wlan_intf_opcode_channel_number ,
227+ NULL ,
228+ & bufSize ,
229+ (PVOID * )& channelNumber ,
230+ & opCode ) == ERROR_SUCCESS
231+ ) {
232+ item -> conn .channel = (uint16_t ) * channelNumber ;
233+ ffWlanFreeMemory (channelNumber );
234+ }
205235 }
206236
207237exit :
0 commit comments