Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Wifi api


Автор: Alexey68 4.9.2014, 20:41
Здравствуйте All!
Прошу помощи в решении следующей задачи:
После выполнения функции WlanGetInterfaceCapability, получаю код возврата 0x32, не знаю где посмотреть значение в "удобочитаемом" виде, также интересует правильно ли она выполняется (то есть соблюдены ли все необходимые требования)?
Код

DWORD WINAPI ResultInterface;
DWORD dwResult = 0;
DWORD dwMaxClient = 2;   //
DWORD dwCurVersion = 0;
HANDLE hClientHandle;
WCHAR GuidString[40] = {0};
unsigned long dwError = 0;
int iRet = 0;
int i;

setlocale(LC_ALL,"russian");

PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
PWLAN_INTERFACE_INFO pIfInfo      = NULL;

wprintf(L"Перечисление сетевых интерфейсов в системе\n");
dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClientHandle);
dwResult = WlanEnumInterfaces(hClientHandle, NULL, &pIfList);
wprintf(L"Num Entries: %d\n", pIfList->dwNumberOfItems);
wprintf(L"Current Index: %lu\n", pIfList->dwIndex);

for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) {
            pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
            wprintf(L"  Индекс интерфейса[%d]:\t %lu\n", i, i);
            iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 39);
            if (iRet == 0)
                wprintf(L"StringFromGUID2 failed\n");
            else
            {
                wprintf(L"  GUID интерфейса[%d]: %s\n",i, GuidString);
            }

}

wprintf(L"  Имя устройства[%d]: %s", i,
                pIfInfo->strInterfaceDescription);
            wprintf(L"\n");

GUID* pGuid = (GUID*)GuidString;
PWLAN_INTERFACE_CAPABILITY pCapability = NULL;

dwError = WlanGetInterfaceCapability(hClientHandle, pGuid, NULL, &pCapability);
if (dwError !=0)
printf("function WlanGetInterfaceCapability. %X\n", dwError);

С уважением Алексей.

Автор: Romikgy 4.9.2014, 21:19
Цитата(Alexey68 @  4.9.2014,  19:41 Найти цитируемый пост)
получаю код возврата 0x32

Код

#define ERROR_NOT_SUPPORTED 50

http://msdn.microsoft.com/en-us/library/windows/desktop/ms706733(v=vs.85).aspx
Цитата

ERROR_NOT_SUPPORTED
This function was called from an unsupported platform. This value will be returned if this function was called from a Windows XP with SP3 or Wireless LAN API for Windows XP with SP2 client.

Автор: Alexey68 6.9.2014, 13:47
Цитата(Romikgy @ 4.9.2014,  21:19)
Цитата(Alexey68 @  4.9.2014,  19:41 Найти цитируемый пост)
получаю код возврата 0x32

Код

#define ERROR_NOT_SUPPORTED 50

http://msdn.microsoft.com/en-us/library/windows/desktop/ms706733(v=vs.85).aspx
Цитата

ERROR_NOT_SUPPORTED
This function was called from an unsupported platform. This value will be returned if this function was called from a Windows XP with SP3 or Wireless LAN API for Windows XP with SP2 client.

Благодарю, а "расшифровку" кода возврата через GetLastError получили?

Автор: feodorv 6.9.2014, 22:52
Цитата(Alexey68 @  6.9.2014,  14:47 Найти цитируемый пост)
"расшифровку"

Здесь очень бывает полезным http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381%28v=vs.85%29.aspx smile 

Автор: Alexey68 7.9.2014, 21:52
Цитата(feodorv @ 6.9.2014,  22:52)
Цитата(Alexey68 @  6.9.2014,  14:47 Найти цитируемый пост)
"расшифровку"

Здесь очень бывает полезным http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381%28v=vs.85%29.aspx smile

Спасибо, а есть ли локальная версия?
Или через GetLastError получать?

Автор: feodorv 8.9.2014, 00:37
Цитата(Alexey68 @  7.9.2014,  22:52 Найти цитируемый пост)
а есть ли локальная версия?

Можно поставить локальный MSDN, а можно подсмотреть в winerror.h.


Цитата(Alexey68 @  7.9.2014,  22:52 Найти цитируемый пост)
Или через GetLastError получать? 

Через GetLastError можно получить код ошибки (а через http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351%28v=vs.85%29.aspx - текст ошибки, и даже на русском на русской Windows), но получить имя ошибки (в смысле ERROR_NOT_SUPPORTED) только через справочник...

Автор: Alexey68 8.9.2014, 15:56
Цитата(feodorv @ 8.9.2014,  00:37)
Цитата(Alexey68 @  7.9.2014,  22:52 Найти цитируемый пост)
а есть ли локальная версия?

Можно поставить локальный MSDN, а можно подсмотреть в winerror.h.


Цитата(Alexey68 @  7.9.2014,  22:52 Найти цитируемый пост)
Или через GetLastError получать? 

Через GetLastError можно получить код ошибки (а через http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351%28v=vs.85%29.aspx - текст ошибки, и даже на русском на русской Windows), но получить имя ошибки (в смысле ERROR_NOT_SUPPORTED) только через справочник...

Большое спасибо)

Автор: Alexey68 8.9.2014, 18:22
При выполнении приведённого мной кода (в первом посте) под Win7 получаю код ошибки 0x490 - ERROR_NOT_FOUND (Element not found.), в чём может быть причина? почему функция не записывает данные в структуру PWLAN_INTERFACE_CAPABILITY?

Автор: feodorv 9.9.2014, 04:25
Цитата(Alexey68 @  4.9.2014,  21:41 Найти цитируемый пост)
GUID* pGuid = (GUID*)GuidString;
dwError = WlanGetInterfaceCapability(hClientHandle, pGuid, NULL, &pCapability);

А зачем Вы строку отправляете в функцию WlanGetInterfaceCapability под видом GUID (вместо pIfInfo->InterfaceGuid)? И почему у Вас код
Цитата(Alexey68 @  4.9.2014,  21:41 Найти цитируемый пост)
wprintf(L"  Имя устройства[%d]: %s", i,
                pIfInfo->strInterfaceDescription);
            wprintf(L"\n");
GUID* pGuid = (GUID*)GuidString;
PWLAN_INTERFACE_CAPABILITY pCapability = NULL;
dwError = WlanGetInterfaceCapability(hClientHandle, pGuid, NULL, &pCapability);
if (dwError !=0)
printf("function WlanGetInterfaceCapability. %X\n", dwError);

находится вне тела цикла
Цитата(Alexey68 @  4.9.2014,  21:41 Найти цитируемый пост)
for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) {

???

Автор: Alexey68 17.9.2014, 21:27
>>А зачем Вы строку отправляете в функцию WlanGetInterfaceCapability под видом GUID (вместо >>pIfInfo->InterfaceGuid)?
Так:
dwError = WlanGetInterfaceCapability(hClientHandle, pIfInfo->InterfaceGuid, NULL, &pCapability);
выдаёт ошибку:
[BCC32 Error] main.cpp(111): E2034 Cannot convert '_GUID' to 'const _GUID *'

Автор: feodorv 18.9.2014, 07:42
Цитата(Alexey68 @  17.9.2014,  22:27 Найти цитируемый пост)
dwError = WlanGetInterfaceCapability(hClientHandle, &pIfInfo->InterfaceGuid, NULL, &pCapability);


Автор: Alexey68 19.9.2014, 20:33
feodorv и Romikgy, большое спасибо за помощь!
Что из ниже перечисленного необходимо для отправки пакета через wifi?:
в Native wifi Api функции отправки пакета не обнаружил, начал смотреть в сторону DeviceIoControl, возможно ли через эту функцию осуществить отправку и где посмотреть список управляющих кодов для данной задачи?
В некоторых публикациях используется драйвер NDIS (приём/передача) например тут:
http://www.codeproject.com/Articles/28713/Packet-Injection-for-Windows
или
http://www.codeproject.com/Articles/5292/Raw-Ethernet-Packet-Sending
какой самый правильный и менее ресурсоёмкий вариант можете посоветовать (если возможно, на русском)? 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)