Hallo
Ik ben bezig met het opvraggen van signaalsterktes met behulp van ndis5.1
Dat werkte prima totdat ik het met een andere netwerkkaart ging proberen. Nu heb ik eindelijk uitgevonden dat de vraag die ik met DeviceIoControl aan de driver stel niet altijd het zelfde resultaat opleverd
de ene keer levert het een NDIS_802_11_BSSID_LIST sructuur op en de andere keer een NDIS_802_11_BSSID_LIST_EX structuur
de structuur heeft dit formaat.
het verschil komt doordat de ene keer de lijst gevuld is met NDIS_WLAN_BSSID structuren en de andere keer met NDIS_WLAN_BSSID_EX structuren
NDIS_WLAN_BSSID
NDIS_WLAN_BSSID_EX
Toen alles werkte gebruikte ik de eerste structuur.
Daar liep ik met onderstaande code doorheen
Dit werkt alleen niet voor de NDIS_802_11_BSSID_LIST_EX structuur omdat de NDIS_WLAN_BSSID_EX structuren een variabele lengte hebben.
Nu denk ik dat ik er met een pointer doorheen moet lopen en dan deze aan het begin van elke structuur zetten. om zo op de goeie plek inn het geheugen te komen.
Mijn probleem is echter dat ik dat het wel in pseudo code kan bedenken maar niet zo goed in c++ ben dat ik het ook kan coderen(heb ik vaker last van :-))
Is er hier iemand die mij kan uitleggen hoe ik op een goeie manier door de lijst heen kan lopen
Ik ben bezig met het opvraggen van signaalsterktes met behulp van ndis5.1
Dat werkte prima totdat ik het met een andere netwerkkaart ging proberen. Nu heb ik eindelijk uitgevonden dat de vraag die ik met DeviceIoControl aan de driver stel niet altijd het zelfde resultaat opleverd
de ene keer levert het een NDIS_802_11_BSSID_LIST sructuur op en de andere keer een NDIS_802_11_BSSID_LIST_EX structuur
de structuur heeft dit formaat.
C++:
1
2
3
4
5
| typedef_struct _NDIS_802_11_BSSID_LIST { ULONG NumberOfItems; NDIS_WLAN_BSSID Bssid[1]; } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST; |
het verschil komt doordat de ene keer de lijst gevuld is met NDIS_WLAN_BSSID structuren en de andere keer met NDIS_WLAN_BSSID_EX structuren
NDIS_WLAN_BSSID
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
| struct _NDIS_WLAN_BSSID { ULONG Length; NDIS_802_11_MAC_ADDRESS MacAddress; Uchar Reserved[2]; NDIS_802_11_SSID Ssid; ULONG Privacy; NDIS_802_11_RSSI Rssi; NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; NDIS_802_11_CONFIGURATION Configuration; NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; NDIS_802_11_RATES SupportedRates; } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID; |
NDIS_WLAN_BSSID_EX
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| struct _NDIS_WLAN_BSSID_EX { ULONG Length; NDIS_802_11_MAC_ADDRESS MacAddress; Uchar Reserved[2]; NDIS_802_11_SSID Ssid; ULONG Privacy; NDIS_802_11_RSSI Rssi; NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; NDIS_802_11_CONFIGURATION Configuration; NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; NDIS_802_11_RATES_EX SupportedRates; ULONG IELength; UCHAR IEs[1]; } NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; |
Toen alles werkte gebruikte ik de eerste structuur.
Daar liep ik met onderstaande code doorheen
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| bssidList = (NDIS_802_11_BSSID_LIST *)( &queryOID->Data ); for ( unsigned int i = 0; i < bssidList->NumberOfItems; i++ ) { TCHAR s[ 512 ]; // Adjust RSSI value so that it's negative, as it should be. if ( bssidList->Bssid[ i ].Rssi > 0 ) bssidList->Bssid[ i ].Rssi = -1 * bssidList->Bssid[ i ].Rssi; //if ((bssidList->Bssid[ i ].Rssi < 0) && (bssidList->Bssid[ i ].Rssi > -99)){ _stprintf( s, _T( "%02x%02x%02x%02x%02x%02x:%d," ), bssidList->Bssid[ i ].MacAddress[0],bssidList->Bssid[ i ].MacAddress[1]...., bssidList->Bssid[ i ].Rssi ); _tcscat(str,s); // } } |
Dit werkt alleen niet voor de NDIS_802_11_BSSID_LIST_EX structuur omdat de NDIS_WLAN_BSSID_EX structuren een variabele lengte hebben.
Nu denk ik dat ik er met een pointer doorheen moet lopen en dan deze aan het begin van elke structuur zetten. om zo op de goeie plek inn het geheugen te komen.
Mijn probleem is echter dat ik dat het wel in pseudo code kan bedenken maar niet zo goed in c++ ben dat ik het ook kan coderen(heb ik vaker last van :-))
Is er hier iemand die mij kan uitleggen hoe ik op een goeie manier door de lijst heen kan lopen