Работа с драйвером виртуального сетевого адаптера (OpenVPN)
От: sizeof_void Россия  
Дата: 04.07.13 08:25
Оценка:
Всем привет! У меня некое продолжение закрытой темы (http://www.rsdn.ru/forum/network/3842938.1
Автор: MikelSV
Дата: 14.06.10
).

Я сейчас пробую работать с OpenVPN драйвером виртуального адаптера под Виндой из консольного приложения,
пытаюсь открыть его и выставить флаг коннекта (TAP_IOCTL_SET_MEDIA_STATUS), чтобы можно было посылать/принимать данные на его интерфейсе.
Почему-то вызов DeviceIoControl(TAP_IOCTL_SET_MEDIA_STATUS) возвращает ошибку "ERROR_INVALID_FUNCTION"(1).
Тестирую пока на WinXP SP3 (x32), но надо, чтобы код работал и на других виндах...

     
#define TAP_IOCTL_SET_MEDIA_STATUS      TAP_CONTROL_CODE (6, METHOD_BUFFERED)

HANDLE tap = INVALID_HANDLE_VALUE;          
         
GetAdaptersAddresses(...);

if (!_wcsicmp(MY_VNIC_DEVICE_NAME, a->FriendlyName))
{
     std::string dn("\\\\.\\Global\\");
     dn += a->AdapterName;
     //dn += ".tap";  // С суффиксом не открывается!

     cout << "device name to open is: " << dn.c_str() << endl;

     tap = CreateFileA(dn.c_str(),
                MAXIMUM_ALLOWED,
                0,
                            NULL,
                            OPEN_EXISTING,
                            FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED,
                            NULL
                );
           
          
      if (INVALID_HANDLE_VALUE == tap)
      {
        cout<<"Failed to open device!\n"<<endl;
      }
      else
      {
        cout<<"Device opened...\n"<<endl;
        DWORD len=0;
    DWORD uState = TRUE, uOut = FALSE;

    if (!::DeviceIoControl(tap, TAP_IOCTL_SET_MEDIA_STATUS, 
                &uState, sizeof(uState), 
                &uOut, sizeof(uOut), 
                &len, NULL))
    {
            int nErr = ::GetLastError();  // ТУТ ВОЗВРАЩАЕТ "1"!
            cout << "DeviceIoControl(): Error = " << nErr << endl;
            cout << "WARNING: The TAP-Win32 driver rejected a TAP_IOCTL_SET_MEDIA_STATUS DeviceIoControl call.\n";
    }          

        ...
      }
}


Подскажите, в чём причина ошибки и где посмотреть ещё инфу / примеры работы с этим драйвером...
"May the Force be with us all!" (c)
openvpn драйвер virtual adapter deviceiocontrol()
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.