I am trying to get the list of all available networks using WlanGetAvailableNetworkList
. When I loop over the array of networks based on dwNumberOfItems
it only shows me the first network and anything beyond that gives me index out of bounds: the len is 1 but the index is 1
. Here’s my code:
let mut w_handle: HANDLE = HANDLE::default();
let mut current_version: u32 = 0;
if WIN32_ERROR(WlanOpenHandle(2, None, &mut current_version, &mut w_handle)) != ERROR_SUCCESS {
return;
}
let mut wlan_interface_info_list = std::ptr::null_mut();
if WIN32_ERROR(WlanEnumInterfaces(w_handle, None, &mut wlan_interface_info_list)) != ERROR_SUCCESS {
return;
}
for i in 0..wlan_interface_info_list.as_ref().unwrap().dwNumberOfItems {
let interface_info = wlan_interface_info_list.as_ref().unwrap().InterfaceInfo[i as usize];
let interface_name = interface_info.strInterfaceDescription;
let mut available_network_list = std::mem::zeroed();
if WIN32_ERROR(WlanGetAvailableNetworkList(w_handle, &interface_info.InterfaceGuid, 0, None, &mut available_network_list)) != ERROR_SUCCESS {
continue;
}
let list = available_network_list.as_ref().unwrap();
println!("Number of available networks on {}: {}", String::from_utf16_lossy(&interface_name), list.dwNumberOfItems);
for j in 0..list.dwNumberOfItems {
let network_name = (*list).Network[j as usize].strProfileName; // <- Panicked
println!("Network name: {}", String::from_utf16_lossy(&network_name));
}
}
WlanCloseHandle(w_handle, None);