Code:
// Retrieve All Available APs
void CWlanAPInfo::getAvailableAPs(CStringArray * pAvailableAPs)
{
// Remove old array content
pAvailableAPs->RemoveAll();
IEnumWbemClassObject * pEnum = NULL;
IWbemClassObject * pObject = NULL;
ULONG ulCount;
HRESULT hRes;
VARIANT var;
VariantInit(&var);
hRes = wmiConnection.pSvc->CreateInstanceEnum(L"MSNdis_80211_BSSIList",
WBEM_FLAG_FORWARD_ONLY,
NULL,
&pEnum);
if (pEnum->Next(WBEM_INFINITE, 1, &pObject, &ulCount) == S_OK)
{
// retrieve process identifier
VariantClear(&var);
CComVariant variantSSIDList;
hRes = pObject->Get(L"Ndis80211BSSIList", 0, &variantSSIDList, 0, 0);
if (!FAILED(hRes) && (variantSSIDList.vt != VT_NULL))
{
HRESULT hr = S_OK;
// Calculate the number of elements
long lUpper = 0;
long lLower = 0;
hr = SafeArrayGetUBound(V_ARRAY(&variantSSIDList), 1, &lUpper);
hr = SafeArrayGetLBound(V_ARRAY(&variantSSIDList), 1, &lLower);
long lNumOfElems = lUpper - lLower + 1;
// Gain access to the SAFEARRAY
LPUNKNOWN HUGEP *punkArray = 0;
hr = SafeArrayAccessData(V_ARRAY(&variantSSIDList),
(void**)&punkArray);
for (int nIndex = 0; nIndex < lNumOfElems; nIndex++)
{
CComQIPtr<IWbemClassObject> spSummaryObject =
punkArray[nIndex];
_variant_t varSsId;
_variant_t varSsIdLength;
_variant_t varRssi;
varSsId.Clear();
varSsIdLength.Clear();
varRssi.Clear();
hr = spSummaryObject->Get(CComBSTR(_T("Ndis80211SsId")), 0,
&varSsId, 0, 0);
hr = spSummaryObject->Get(CComBSTR(_T("Ndis80211SsIdLength")), 0,
&varSsIdLength, 0, 0);
// hr = spSummaryObject->Get(CComBSTR(_T("Ndis80211Rssi")), 0,
// &varRssi, 0, 0);
CString SsId;
for (int x=0; x<varSsIdLength.lVal; x++)
{
SsId.Insert(x, (CHAR) *((char *)varSsId.parray->pvData + x));
}
pAvailableAPs->Add(SsId); // Add the SSID into array
}
hr = SafeArrayUnaccessData(V_ARRAY(&variantSSIDList));
}
}
}
i not understand how this works.... can any1 here teach me??