Всем привет! У меня есть такая структура: FIXED_INFO struct ... DnsServerList IP_ADDR_STRING <> ... FIXED_INFO ends и есть такая IP_ADDR_STRING struct Next DWORD ? IpAddress BYTE 16 dup(?) IpMask BYTE 16 dup(?) Context DWORD ? IP_ADDR_STRING ends Я выполняю функцию: invoke GetNetworkParams,addr inf,addr sizes Так вот, как мне получить доступ к элементам структуры IP_ADDR_STRING из структуры inf (FIXED_INFO)?? Для вызова в функции MessageBox.
Еще вопросик.. А как мне проверить, есть ли еще компы?? В DnsList'e... Так правильно будет?? .elseif eax==IDM_DNS_LIST ;get DNS info invoke GetNetworkParams,addr inf,addr sizes invoke MessageBox,NULL,addr inf.DnsServerList.IpAddress,NULL,MB_OK cmp inf.DnsServerList.Next,1 jne no_next invoke MessageBox,NULL,addr some_next,NULL,MB_OK no_next:
Еще небольшая проблемка... После вызова invoke GetAdaptersInfo,addr iai,addr sizei .if iai.Typed==MIB_IF_TYPE_LOOPBACK invoke MessageBox,NULL,addr type_loopback,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_ETHERNET invoke MessageBox,NULL,addr type_ethernet,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_TOKENRING invoke MessageBox,NULL,addr type_tokenring,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_FDDI invoke MessageBox,NULL,addr type_fddi,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_PPP invoke MessageBox,NULL,addr type_ppp,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_OTHER invoke MessageBox,NULL,addr type_other,NULL,MB_OK .endif Ничего не происходит... Ведь хоть что-то выдать он должен?? Да, имеются эквиваленты: MIB_IF_TYPE_OTHER equ 1 MIB_IF_TYPE_ETHERNET equ 6 MIB_IF_TYPE_TOKENRING equ 9 MIB_IF_TYPE_FDDI equ 15 MIB_IF_TYPE_PPP equ 23 MIB_IF_TYPE_LOOPBACK equ 24
Это да, так все время выдает MIB_IF_TYPE_OTHER. Но оно же само должно оперделяться?? В смысле MIB_IF_TYPE_OTHER. А вся проблема в том, что ни один IFELSE не проходит =( Какие еще будут варианты??
сначала mov eax,iai.Typed а уж потом .If eax==MIB_IF_TYPE_LOOPBACK ... т.к. хз как там у тя iai объявлена
опять же, ничего не происходит.... вот мой код... может подскажете??? Код (Text): WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM ;----LOCALS--------------- LOCAL inf : FIXED_INFO LOCAL sizes : DWORD LOCAL sizei : DWORD ;LOCAL ipStr : IP_ADDR_STRING LOCAL iai : IP_ADAPTER_INFO ;---END-OF-LOCALS--------- ... .elseif eax==IDM_ADAPTER_TYPE ;get adapter type invoke GetAdaptersInfo,addr iai,addr sizei mov eax,iai.Typed .if iai.Typed==MIB_IF_TYPE_LOOPBACK invoke MessageBox,NULL,addr type_loopback,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_ETHERNET invoke MessageBox,NULL,addr type_ethernet,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_TOKENRING invoke MessageBox,NULL,addr type_tokenring,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_FDDI invoke MessageBox,NULL,addr type_fddi,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_PPP invoke MessageBox,NULL,addr type_ppp,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_OTHER invoke MessageBox,NULL,addr type_other,NULL,MB_OK .endif А вот и структура: Код (Text): IP_ADAPTER_INFO STRUCT Next DWORD ? ComboIndex DWORD ? AdapterName DWORD MAX_ADAPTER_NAME_LENGTH + 4 dup(?) Description DWORD MAX_ADAPTER_DESCRIPTION_LENGTH + 4 dup(?) AddressLength DWORD ? Address DWORD MAX_ADAPTER_ADDRESS_LENGTH dup (?) Index DWORD ? Typed DWORD ? DhcpEnabled DWORD ? CurrentIpAddress IP_ADDR_STRING <?> IpAddressList IP_ADDR_STRING <?> GatewayList IP_ADDR_STRING <?> DhcpServer IP_ADDR_STRING <?> HaveWins DWORD ? PrimaryWinsServer IP_ADDR_STRING <?> SecondaryWinsServer IP_ADDR_STRING <?> LeaseObtained DWORD ? LeaseExpires DWORD ? IP_ADAPTER_INFO ENDS
Да, сейчас попробовал на С - все работает.... Код на Си: IP_ADAPTER_INFO *pInfo,*pCurrent; GetAdaptersInfo(NULL,&size);pInfo=(IP_ADAPTER_INFO *) new char[size]; GetAdaptersInfo(pInfo,&size); pCurrent=pInfo; cout<<"Adapter name:"<<pCurrent->AdapterName; cout<<"\nIP:"<<pCurrent->IpAddressList.IpAddress.String<<"\n"; cout<<pCurrent->Description<<"\n"; cout<<pCurrent->Type; на АСМе почему-то не работает =(( ;get adapter type invoke GetAdaptersInfo,addr iai,addr sizei mov eax,iai.Typed .if iai.Typed==MIB_IF_TYPE_LOOPBACK invoke MessageBox,NULL,addr type_loopback,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_ETHERNET invoke MessageBox,NULL,addr type_ethernet,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_TOKENRING invoke MessageBox,NULL,addr type_tokenring,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_FDDI invoke MessageBox,NULL,addr type_fddi,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_PPP invoke MessageBox,NULL,addr type_ppp,NULL,MB_OK .elseif iai.Typed==MIB_IF_TYPE_OTHER invoke MessageBox,NULL,addr type_other,NULL,MB_OK .endif В чем проблема?? =\
Код (Text): mov eax,iai.Typed .if iai.Typed==MIB_IF_TYPE_LOOPBACK ...Видимо c00p3r невнимательно посмотрел пост Jupiter'a Надо бы: Код (Text): mov eax,iai.Typed .if eax==MIB_IF_TYPE_LOOPBACK А ещё лучше, как сказал FreeManCPM: Код (Text): mov eax,iai.Typed cmp eax,MIB_IF_TYPE_LOOPBACK je mib_if_type_loopback ... И в конце-концов можно было бы заглянуть в отладчик )
Все переделал... Ничего не пашет все равно =((( Код (Text): invoke GetAdaptersInfo,addr iai,addr sizei mov eax, iai.Typed cmp eax,MIB_IF_TYPE_LOOPBACK je loopback cmp eax, MIB_IF_TYPE_ETHERNET je ethernet cmp eax, MIB_IF_TYPE_TOKENRING je tokenring cmp eax, MIB_IF_TYPE_FDDI je fddi cmp eax, MIB_IF_TYPE_PPP je ppp cmp eax, MIB_IF_TYPE_OTHER je other jmp exit loopback: invoke MessageBox,NULL,addr type_loopback,NULL,MB_OK jmp exit ethernet: invoke MessageBox,NULL,addr type_ethernet,NULL,MB_OK jmp exit tokenring: invoke MessageBox,NULL,addr type_tokenring,NULL,MB_OK jmp exit fddi: invoke MessageBox,NULL,addr type_fddi,NULL,MB_OK jmp exit ppp: invoke MessageBox,NULL,addr type_ppp,NULL,MB_OK jmp exit other: invoke MessageBox,NULL,addr type_other,NULL,MB_OK jmp exit exit: Почему-то iai.Typed все время принимает значение НОЛЬ. В чем может быть проблема?? Да, я объявляю так... Код (Text): mov eax, sizeof IP_ADAPTER_INFO mov sizei, eax и Код (Text): .data iai IP_ADAPTER_INFO <>
Уже даже так попробовал: Код (Text): push DWORD ptr sizei push DWORD ptr iai call GetAdaptersInfo ;invoke GetAdaptersInfo,addr iai,addr sizei mov esi,dword ptr iai.Typed invoke MessageBox,NULL,esi,NULL,MB_OK cmp esi,MIB_IF_TYPE_LOOPBACK je loopback ... В ответ - ноль реакции =((