Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как узнать подключен или нет протокол TCP/IP?


knack ©   (2004-03-09 12:54:00) 

Здрасти.
как узнать (какой ключ в реестре Windows XP) подключен или нет протокол TCP/IP?
я нашел:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip
далее идут параметры сетевых карт по идентификаторам...например:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{2B8057FE-A9A6-472C-B57E-0F584217647F}
где именно находится статус (установлен/не установлен, подключен/ не подключен) протокола TCP/IP?


knack   (2004-03-09 15:04:00) [1]

класс - пример!
спасибо большое :)


Digitman   (2004-03-09 13:31:00) [2]

if StringFromCLSID(Protocol.ProviderId, tmpwstr) = S_OK then begin
               tmpstr:= tmpwstr;
               CoTaskMemFree(tmpwstr);
             end else
               tmpstr:= 'unknown';
             WriteLn('Provider GUID     : ' + tmpstr);
//            if ((Protocol.dwServiceFlags1 and XP1_QOS_SUPPORTED) = XP1_QOS_SUPPORTED)
//            and (Protocol.iSocketType = SocketType)
//            and (Protocol.iAddressFamily = AF_INET ) then

             tmpstr:= '';
             for j:= 0 to 31 do begin
               FlagMask:= 1 shl j;
               if (Protocol.dwServiceFlags1 and FlagMask) = FlagMask then
                 case FlagMask of
                   XP1_CONNECTIONLESS            :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'CONNECTIONLESS'; end;
                   XP1_GUARANTEED_DELIVERY       :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'GUARANTEED_DELIVERY'; end;
                   XP1_GUARANTEED_ORDER          :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'GUARANTEED_ORDER'; end;
                   XP1_MESSAGE_ORIENTED          :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'MESSAGE_ORIENTED'; end;
                   XP1_PSEUDO_STREAM             :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'PSEUDO_STREAM'; end;
                   XP1_GRACEFUL_CLOSE            :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'GRACEFUL_CLOSE'; end;
                   XP1_EXPEDITED_DATA            :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'EXPEDITED_DATA'; end;
                   XP1_CONNECT_DATA              :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'CONNECT_DATA'; end;
                   XP1_DISCONNECT_DATA           :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'DISCONNECT_DATA'; end;
                   XP1_SUPPORT_BROADCAST         :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'SUPPORT_BROADCAST'; end;
                   XP1_SUPPORT_MULTIPOINT        :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'SUPPORT_MULTIPOINT'; end;
                   XP1_MULTIPOINT_CONTROL_PLANE  :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'MULTIPOINT_CONTROL_PLANE'; end;
                   XP1_MULTIPOINT_DATA_PLANE     :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'MULTIPOINT_DATA_PLANE'; end;
                   XP1_QOS_SUPPORTED             :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'QOS_SUPPORTED'; end;
                   XP1_INTERRUPT                 :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'INTERRUPT'; end;
                   XP1_UNI_SEND                  :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'UNI_SEND'; end;
                   XP1_UNI_RECV                  :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'UNI_RECV'; end;
                   XP1_IFS_HANDLES               :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'IFS_HANDLES'; end;
                   XP1_PARTIAL_MESSAGE           :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'PARTIAL_MESSAGE'; end;
                 else
                   if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs;
                   tmpstr:= tmpstr + 'Unknown($' + IntToHex(FlagMask, 8) + ')';
                 end;
             end;
             Write('Service flags 1   : ');
             if tmpstr <> '' then
                WriteLn(tmpstr)
             else
               WriteLn('Not specified');

             tmpstr:= '';
             for j:= 0 to 31 do begin
               FlagMask:= 1 shl j;
               if (Protocol.dwProviderFlags and FlagMask) = FlagMask then
                 case FlagMask of
                   PFL_MULTIPLE_PROTO_ENTRIES    :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'MULTIPLE_PROTO_ENTRIES'; end;
                   PFL_RECOMMENDED_PROTO_ENTRY   :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'RECOMMENDED_PROTO_ENTRY'; end;
                   PFL_HIDDEN                    :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'HIDDEN'; end;
                   PFL_MATCHES_PROTOCOL_ZERO     :begin if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs; tmpstr:= tmpstr + 'MATCHES_PROTOCOL_ZERO'; end;
                 else
                   if tmpstr <> '' then tmpstr:= tmpstr + FmtOffs;
                   tmpstr:= tmpstr + 'Unknown($' + IntToHex(FlagMask, 8) + ')';
                 end;
             end;
             Write('Provider flags    : ');
             if tmpstr <> '' then
                WriteLn(tmpstr)
             else
               WriteLn('Not specified');

             WriteLn('--------------------------------------------------');
             if Succ(i) < ProtocolCount then begin
               Write('Press ENTER to continue ...');
               ReadLn;
               WriteLn;
               Inc(Integer(Protocol), SizeOf(TWSAProtocol_Info));
             end;
           end;
         end;
       finally
         FreeMem(InstProtocols);
       end;
     end;
   finally
     WSACleanup;
   end;
 end else begin
   WriteLn('Missing library ' + WINSOCK2_DLL);
 end;
 Write('Press ENTER to exit ...');
 ReadLn;
end.


Digitman   (2004-03-09 13:30:00) [3]

program NetProtoViewer;
{$APPTYPE CONSOLE}
uses
 Windows,
 Messages,
 ComObj,
 SysUtils,
 Winsock2;

const
 ole32_DLL = 'ole32.dll';
 FmtOffs = #10#13'                    ';
var
 hWinSock2: THandle;
 WSAData: TWSAData;
i,j: Integer;
ProtocolCount: Integer;
 BufSize, FlagMask: DWord;
 InstProtocols, Protocol: LPWSAProtocol_Info;
 tmpstr: string;
 tmpwstr: PWideChar;
 function StringFromCLSID(const clsid: TGUID; out psz: PWideChar): HResult; stdcall; external ole32_DLL name 'StringFromCLSID';
 procedure CoTaskMemFree(pv: Pointer); stdcall; external ole32_DLL name 'CoTaskMemFree';
begin
 hWinSock2:= LoadLibrary(WINSOCK2_DLL);
 if hWinSock2 > HINSTANCE_ERROR then begin
   WSAStartup($0202, WSAData);
   WriteLn('*****************************************************');
   WriteLn('************* Network protocols info ****************');
   WriteLn('*****************************************************');
   WriteLn;
   try
     BufSize:= 0;
     ProtocolCount:= WSAEnumProtocols(nil, nil, BufSize);
     if (ProtocolCount SOCKET_ERROR) and (WSAGetLastError WSAENOBUFS) then
       Exit
     else begin
       InstProtocols:= AllocMem(BufSize);
       try
         ProtocolCount:= WSAEnumProtocols(nil, InstProtocols, BufSize);
         if ProtocolCount SOCKET_ERROR then begin
           WriteLn('Total network protocols installed : ' + IntToStr(ProtocolCount) + #10#13);
           WriteLn('**************************************************');
           Protocol:= InstProtocols;
           for i:= 0 to ProtocolCount - 1 do begin
             WriteLn('Protocol name     : ' + Protocol.szProtocol);
             case Protocol.iAddressFamily of
               AF_UNSPEC   : tmpstr:= 'unspecified';
               AF_UNIX     : tmpstr:= 'Local host (pipes or portals)';
               AF_INET     : tmpstr:= 'Internetwork: UDP, TCP, etc.';
               AF_IMPLINK  : tmpstr:= 'ArpaNet imp addresses';
               AF_PUP      : tmpstr:= 'PUP';
               AF_CHAOS    : tmpstr:= 'mit CHAOS';
               AF_IPX      : tmpstr:= 'IPX/SPX or XEROX NS';
               AF_OSI      : tmpstr:= 'OSI';
               AF_ECMA     : tmpstr:= 'European computer manufacturers (ECMA)';
               AF_DATAKIT  : tmpstr:= 'Datakit protocols';
               AF_CCITT    : tmpstr:= 'CCITT protocols, X.25 etc';
               AF_SNA      : tmpstr:= 'IBM SNA';
               AF_DECnet   : tmpstr:= 'DECnet';
               AF_DLI      : tmpstr:= 'Direct data link interface';
               AF_LAT      : tmpstr:= 'LAT';
               AF_HYLINK   : tmpstr:= 'NSC Hyperchannel';
               AF_APPLETALK: tmpstr:= 'AppleTalk';
               AF_NETBIOS  : tmpstr:= 'NetBios';
               AF_VOICEVIEW: tmpstr:= 'VoiceView';
               AF_FIREFOX  : tmpstr:= 'FireFox';
               AF_BAN      : tmpstr:= 'Banyan';
               AF_ATM      : tmpstr:= 'Native ATM Services';
               AF_INET6    : tmpstr:= 'Internetwork Version 6';
               AF_CLUSTER  : tmpstr:= 'Microsoft Wolfpack';
               AF_12844    : tmpstr:= 'IEEE 1284.4 WG AF';
               AF_IRDA     : tmpstr:= 'IrDA';
               AF_NETDES   : tmpstr:= 'Network Designers OSI & Gateway enabled';
             else
                             tmpstr:= 'unknown';
             end;
             WriteLn('Address family    : ' + tmpstr);
             WriteLn('Protocol version  : ' + IntToStr(Protocol.iVersion));
             case Protocol.iSocketType of
               SOCK_STREAM     : tmpstr:= 'stream socket';
               SOCK_DGRAM      : tmpstr:= 'datagram socket';
               SOCK_RAW        : tmpstr:= 'raw-protocol interface';
               SOCK_RDM        : tmpstr:= 'reliably-delivered message';
               SOCK_SEQPACKET  : tmpstr:= 'sequenced packet stream';
             else
                                 tmpstr:= 'unknown';
             end;
             WriteLn('Socket type       : ' + tmpstr);
             WriteLn('MaxSockAddr       : ' + IntToStr(Protocol.iMaxSockAddr));
             WriteLn('MinSockAddr       : ' + IntToStr(Protocol.iMinSockAddr));


Наверх

Титульная страница Поиск, карта сайта Написать письмо