Hej!
Żeby zgarnąć 5 na studiach z programowania niskopoziomowego muszę napisać skomplikowany program a assemblerze. Używam RadAsm, GoAsm i OllyDBG.
Padło, że chce napisać program obsługujący kilka funkcji z WlanApi.
Problem mam z WlanEnumInterfaces na stronie dokładny opis
http://msdn.microsoft.com/en-us/library/windows/desktop/ms706716%28v=vs.85%29.aspx
Mianowicie muszę jako argumenty podać strukturę (to wszystko podane w c++)
typedef struct _WLAN_INTERFACE_INFO_LIST {
DWORD dwNumberOfItems;
DWORD dwIndex;
WLAN_INTERFACE_INFO InterfaceInfo[];
} WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;
U mnie wygląda tak
WLAN_INTERFACE_INFO_LIST struct
NumberOfItem DW ?
Index DW ?
InterfaceInfo WLAN_INTERFACE_INFO ;z ego co mi się wydaję muszę podać zmienna o typie WLAN_INTERFACE_INFO czyli kolejnej struktury
WLAN_INTERFACE_INFO_LIST ENDS
Muszę utworzyć kolejną strukturę
typedef struct _WLAN_INTERFACE_INFO {
GUID InterfaceGuid;
WCHAR strInterfaceDescription[256];
WLAN_INTERFACE_STATE isState;
} WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;
WLAN_INTERFACE_INFO struct
InterfaceGuid DB ? ; tu nie wiem za bardzo jaki rodzaj utworzyć wiem że te guid to bardzo długi ciąg liczb hex
InterfaceDescription DB ?
WlanState WLAN_INTERFACE_STATE ; a tu odwołuje się do zmiennej typu WLAN_INTERFACE_STATE
WLAN_INTERFACE_INFO ENDs
No i teraz zaczynają się schody, bo jak w miarę rozumiem jak się robi struktury, chociaż nie wiem czy dobrze odwołuje się do struktury w sktrukturze to muszę teraz stworzyć typ enum
typedef enum _WLAN_INTERFACE_STATE {
wlan_interface_state_not_ready = 0,
wlan_interface_state_connected = 1,
wlan_interface_state_ad_hoc_network_formed = 2,
wlan_interface_state_disconnecting = 3,
wlan_interface_state_disconnected = 4,
wlan_interface_state_associating = 5,
wlan_interface_state_discovering = 6,
wlan_interface_state_authenticating = 7
} WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;
I za cholerę nie wiem jak to zrobić. Ma ktoś jakieś podpowiedzi co do struktury w strukturze i typu enum?
mój program wygląda tak
DATA
Version DW 2 dup 0
Handle DB 2 dup 0
InterfaceList WLAN_INTERFACE_INFO_LIST <>
NetworkList DQ 100 dup 0
CODE
START:
invoke WlanOpenHandle,2,0,addr Version,addr Handle ;Wywoluje uchwyt do wlan
invoke WlanEnumInterfaces,[Handle],0,addr InterfaceList
ret
Po uruchomieniu bez utworzonego typu enum _WLAN_INTERFACE_STATE i uruchomieniu w ollyDBG coś się niby dzieje ale na pewno nie dostaje guid.
scren z pamięci to co zaznaczone, wskakuje mi w strukturę po wywołaniu WlanEnumInterface