Доступ к элементам структуры

Тема в разделе "WASM.BEGINNERS", создана пользователем c00p3r, 12 янв 2007.

  1. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Всем привет!
    У меня есть такая структура:
    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.
     
  2. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    inf.DnsServerList.имя_поля
     
  3. LazzY

    LazzY New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2006
    Сообщения:
    123
    inf.DnsServerList.IpAddress

    /// епт) килми
     
  4. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Большое спасибо! Все работает =)
     
  5. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Еще вопросик..
    А как мне проверить, есть ли еще компы?? В 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:
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    :)
     
  7. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Гениально.
     
  8. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Еще небольшая проблемка...
    После вызова

    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
     
  9. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Код (Text):
    1. .elseif iai.Typed==MIB_IF_TYPE_OTHER
    попробуй заменить на
    Код (Text):
    1. .else
     
  10. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Это да, так все время выдает MIB_IF_TYPE_OTHER. Но оно же само должно оперделяться?? В смысле MIB_IF_TYPE_OTHER. А вся проблема в том, что ни один IFELSE не проходит =(
    Какие еще будут варианты??
     
  11. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Ребят, неужто всем лень помочь?)
     
  12. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    забей на дебильные макросы :) используй cmp+jxx
     
  13. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    сначала
    mov eax,iai.Typed
    а уж потом
    .If eax==MIB_IF_TYPE_LOOPBACK
    ...

    т.к. хз как там у тя iai объявлена
     
  14. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    опять же, ничего не происходит....
    вот мой код... может подскажете???
    Код (Text):
    1. WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    2.  
    3. ;----LOCALS---------------
    4. LOCAL inf   : FIXED_INFO
    5. LOCAL sizes : DWORD
    6. LOCAL sizei : DWORD
    7. ;LOCAL ipStr    : IP_ADDR_STRING
    8. LOCAL iai   : IP_ADAPTER_INFO
    9. ;---END-OF-LOCALS--------- 
    10. ...
    11. .elseif eax==IDM_ADAPTER_TYPE
    12.             ;get adapter type
    13.             invoke GetAdaptersInfo,addr iai,addr sizei
    14.             mov eax,iai.Typed
    15.             .if iai.Typed==MIB_IF_TYPE_LOOPBACK
    16.                 invoke MessageBox,NULL,addr type_loopback,NULL,MB_OK
    17.             .elseif iai.Typed==MIB_IF_TYPE_ETHERNET
    18.                 invoke MessageBox,NULL,addr type_ethernet,NULL,MB_OK
    19.             .elseif iai.Typed==MIB_IF_TYPE_TOKENRING
    20.                 invoke MessageBox,NULL,addr type_tokenring,NULL,MB_OK
    21.             .elseif iai.Typed==MIB_IF_TYPE_FDDI
    22.                 invoke MessageBox,NULL,addr type_fddi,NULL,MB_OK
    23.             .elseif iai.Typed==MIB_IF_TYPE_PPP
    24.                 invoke MessageBox,NULL,addr type_ppp,NULL,MB_OK
    25.             .elseif iai.Typed==MIB_IF_TYPE_OTHER
    26.                 invoke MessageBox,NULL,addr type_other,NULL,MB_OK
    27.             .endif
    А вот и структура:
    Код (Text):
    1. IP_ADAPTER_INFO STRUCT
    2.   Next                  DWORD   ?
    3.   ComboIndex                    DWORD   ?
    4.   AdapterName                   DWORD   MAX_ADAPTER_NAME_LENGTH + 4 dup(?) 
    5.   Description                   DWORD   MAX_ADAPTER_DESCRIPTION_LENGTH + 4 dup(?)
    6.   AddressLength             DWORD   ?
    7.   Address                   DWORD   MAX_ADAPTER_ADDRESS_LENGTH dup (?)
    8.   Index                 DWORD   ?
    9.   Typed                 DWORD   ?
    10.   DhcpEnabled                   DWORD   ?
    11.   CurrentIpAddress              IP_ADDR_STRING <?>
    12.   IpAddressList             IP_ADDR_STRING <?>
    13.   GatewayList                   IP_ADDR_STRING <?>
    14.   DhcpServer                    IP_ADDR_STRING <?>
    15.   HaveWins                  DWORD   ?
    16.   PrimaryWinsServer             IP_ADDR_STRING <?>
    17.   SecondaryWinsServer           IP_ADDR_STRING <?>
    18.   LeaseObtained             DWORD   ?
    19.   LeaseExpires              DWORD   ?
    20. IP_ADAPTER_INFO ENDS
     
  15. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Посмотрите плиз.. Очень надо узнать в чем дело.
     
  16. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Да, сейчас попробовал на С - все работает....
    Код на Си:
    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

    В чем проблема?? =\
     
  17. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    Код (Text):
    1. mov eax,iai.Typed
    2. .if iai.Typed==MIB_IF_TYPE_LOOPBACK
    ...Видимо c00p3r невнимательно посмотрел пост Jupiter'a :)
    Надо бы:
    Код (Text):
    1. mov eax,iai.Typed
    2. .if eax==MIB_IF_TYPE_LOOPBACK
    А ещё лучше, как сказал FreeManCPM:
    Код (Text):
    1. mov eax,iai.Typed
    2.     cmp eax,MIB_IF_TYPE_LOOPBACK
    3.     je mib_if_type_loopback
    4.     ...
    И в конце-концов можно было бы заглянуть в отладчик :))
     
  18. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Все переделал... Ничего не пашет все равно =(((
    Код (Text):
    1. invoke GetAdaptersInfo,addr iai,addr sizei
    2.             mov eax, iai.Typed
    3.             cmp eax,MIB_IF_TYPE_LOOPBACK
    4.             je loopback
    5.             cmp eax, MIB_IF_TYPE_ETHERNET
    6.             je ethernet
    7.             cmp eax, MIB_IF_TYPE_TOKENRING
    8.             je tokenring
    9.             cmp eax, MIB_IF_TYPE_FDDI
    10.             je fddi
    11.             cmp eax, MIB_IF_TYPE_PPP
    12.             je ppp
    13.             cmp eax, MIB_IF_TYPE_OTHER
    14.             je other
    15.  
    16.            
    17.             jmp exit
    18.             loopback:
    19.             invoke MessageBox,NULL,addr type_loopback,NULL,MB_OK
    20.             jmp exit
    21.             ethernet:
    22.             invoke MessageBox,NULL,addr type_ethernet,NULL,MB_OK
    23.             jmp exit
    24.             tokenring:
    25.             invoke MessageBox,NULL,addr type_tokenring,NULL,MB_OK
    26.             jmp exit
    27.             fddi:
    28.             invoke MessageBox,NULL,addr type_fddi,NULL,MB_OK
    29.             jmp exit
    30.             ppp:
    31.             invoke MessageBox,NULL,addr type_ppp,NULL,MB_OK
    32.             jmp exit
    33.             other:
    34.             invoke MessageBox,NULL,addr type_other,NULL,MB_OK
    35.             jmp exit
    36.  
    37.             exit:
    Почему-то iai.Typed все время принимает значение НОЛЬ.
    В чем может быть проблема??

    Да, я объявляю так...
    Код (Text):
    1. mov eax,  sizeof  IP_ADAPTER_INFO
    2. mov sizei, eax
    и
    Код (Text):
    1. .data
    2. iai                 IP_ADAPTER_INFO <>
     
  19. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Уже даже так попробовал:
    Код (Text):
    1. push DWORD ptr sizei
    2.             push DWORD ptr iai
    3.             call GetAdaptersInfo
    4.            
    5.             ;invoke GetAdaptersInfo,addr iai,addr sizei
    6.             mov esi,dword ptr iai.Typed
    7.             invoke MessageBox,NULL,esi,NULL,MB_OK
    8.             cmp esi,MIB_IF_TYPE_LOOPBACK
    9.             je loopback
    10. ...
    В ответ - ноль реакции =((
     
  20. c00p3r

    c00p3r New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2007
    Сообщения:
    14
    Гляньте кому не лень, плз...