как разорвать входящее dial-up соединение?

Тема в разделе "WASM.WIN32", создана пользователем FairPerson, 10 июн 2009.

  1. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    Или как отключить подключенного клиента? С исходящим все понятно, а вот с входящим - нет. И в интернете ни одного примера. Может кто имел дело? В какую сторону смотреть?
     
  2. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    RasEnumConnections, RasHangup ?
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Выключить модем.
     
  4. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    Rasenumconnections не возвращает входящие соединения
     
  5. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Один может перечислять входящие таким путём, например:
    Код (Text):
    1.     MPR_SERVER_HANDLE local;
    2.     MprAdminServerConnect(NULL, &local);
    3.  
    4.     RAS_CONNECTION_0* conns = NULL;
    5.     DWORD nConsRead, nConsTotal;
    6.     DWORD ResumeHandle = 0;
    7.     MprAdminConnectionEnum(local, 0, (LPBYTE*)&conns, 0, &nConsRead, &nConsTotal, &ResumeHandle);
    8.     <...>
    Отключать, вероятно, можно с помощью MprAdminPortDisconnect.
     
  6. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    функция MprAdminServerConnect возвращает хэндл 0. как я понял из документации эта функция подключается к маршрутиризатору для последующей работы с ним. или я не правильно понял? дело в том, что у меня прямое соединение по последовательному порту.
     
  7. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    В таких необходимость смотреть код возвращаемой ошибки, ага? Впрочем, судя по докам, причин может быть две: либо не бежит служба Routing and Remote Access (RemoteAccess), либо мало прав (у нас работало из-под системной службы; вероятно, достаточно какого-нибудь подмножества прав администратора).

    Мы пользовали для перечисления входящих подключений к обыкновенному модему. Никогда детально не разбирали это. По идее dial-in есть dial-in. Поэкспериментируй — расскажешь.
     
  8. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    Sol_Ksacap, ты с самого начала был прав. Это то, что мне было нужно. а хэндл я получал 0, потому что действительно не работала служба маршрутиризации и удаленного доступа. На компе завелся вирус и у меня подозрения, что он как-то косвенно на нее влияет, служба либо запускается, потом сразу останавливается, либо не запускается вообще. Не суть, этот вопрос решен. Вот мой вариант кода, правда на делфи.

    Код (Text):
    1. type
    2.   RAS_PORT_0 = record
    3.     hPort:THandle;
    4.     hConnection:THandle;
    5.     dwPortCondition:DWORD;
    6.     dwTotalNumberOfCalls:DWORD;
    7.     dwConnectDuration:DWORD;
    8.     wszPortName:array[0..16] of WCHAR;
    9.     wszMediaName:array[0..16] of WCHAR;
    10.     wszDeviceName:array[0..128] of WCHAR;
    11.     wszDeviceType:array[0..16] of WCHAR;
    12. end;
    13. type
    14.   RAS_CONNECTION_0 = record
    15.     hConnection:THandle;
    16.     hInterface:THandle;
    17.     dwConnectDuration:DWORD;
    18.     dwInterfaceType:DWORD;
    19.     dwConnectionFlags:DWORD;
    20.     wszInterfaceName:array[0..256] of WCHAR;
    21.     wszUserName:array[0..256] of WCHAR;
    22.     wszLogonDomain:array[0..15] of WCHAR;
    23.     wszRemoteComputer:array[0..16] of WCHAR;
    24. end;
    25.  
    26. function MprAdminServerConnect(lpwsServerName:PWideString;phMprServer:PHandle):LongInt;stdcall;
    27.           external 'mprapi.dll' name 'MprAdminServerConnect';
    28.  
    29. function MprAdminPortEnum(hRasServer:THandle;
    30.                           dwLevel:DWORD;
    31.                           hConnection:THandle;
    32.                           var lplpBuffer:Pointer;
    33.                           dwPrefMaxLen:DWORD;
    34.                           lpdwEntriesRead:PDWORD;
    35.                           lpdwTotalEntries:PDWORD;
    36.                           lpdwResumeHandle:PDWORD):LongInt; stdcall;
    37.           external 'mprapi.dll' name 'MprAdminPortEnum';
    38.  
    39. function MprAdminConnectionEnum(hRasServer:THandle;
    40.                                 dwLevel:DWORD;
    41.                                 var lplpBuffer:Pointer;
    42.                                 dwPrefMaxLen:DWORD;
    43.                                 lpdwEntriesRead:PDWORD;
    44.                                 lpdwTotalEntries:PDWORD;
    45.                                 lpdwResumeHandle:PDWORD):LongInt;stdcall;
    46.           external 'mprapi.dll' name 'MprAdminConnectionEnum';
    47.  
    48. function MprAdminPortDisconnect(hRasServer:THandle;hPort:THandle):LongInt; stdcall;
    49.           external 'mprapi.dll' name 'MprAdminPortDisconnect';
    50.  
    51. function MprAdminServerDisconnect(hMprServer:THandle):LongInt;stdcall;
    52.           external 'mprapi.dll' name 'MprAdminServerDisconnect';
    53.  
    54.  
    55. procedure ResetClient;
    56. var
    57.   local:THandle;
    58.   conns:RAS_CONNECTION_0;
    59.   CRead,CTotal,CResumeH:DWORD;
    60.   z,c:pointer;
    61.   ports:RAS_PORT_0;
    62.   ERead,ETotal,EResumeH:DWORD;
    63.   rez:integer;
    64. begin
    65.   CResumeH:=0;
    66.   EResumeH:=0;
    67.   local:=0;
    68.   MprAdminServerConnect(nil,@local);
    69.   MprAdminConnectionEnum(local,0,z,DWORD(-1),@CRead,@CTotal,@CResumeH);
    70.   conns:=RAS_CONNECTION_0(z^);
    71.   rez:=MprAdminPortEnum(local,0,conns.hConnection,c,DWORD(-1),@ERead,@ETotal,@EResumeH);
    72.   if rez = 0 then begin
    73.     ports:=RAS_PORT_0(c^);
    74.     MprAdminPortDisconnect(local,ports.hPort);
    75.   end;
    76.   MprAdminServerDisconnect(local);
    77. end;