package main
// #define WIN32_LEAN_AND_MEAN
// #include <windows.h>
import (
"fmt"
"syscall"
"unsafe"
"C"
)
var (
wlankernal,_ = syscall.LoadLibrary("Wlanapi.dll")
wlanhandle,_ = syscall.GetProcAddress(wlankernal,"WlanOpenHandle")
wlanclosehandle,_ = syscall.GetProcAddress(wlankernal,"WlanCloseHandle")
wlanenumInterfaces,_ = syscall.GetProcAddress(wlankernal,"WlanEnumInterfaces")
wlangetprofile,_ = syscall.GetProcAddress(wlankernal,"WlanGetProfileList")
)
type ulong int32
type WLAN_INTERFACE_INFO struct{
InterfaceGuid syscall.GUID
strInterfaceDescription string
isState uint
}
type WLAN_INTERFACE_INFO_LIST struct {
NumberOfItems uint32
Index uint32
InterfaceInfo WLAN_INTERFACE_INFO
}
type WLAN_PROFILE_INFO struct{
ProfileName C.char
Flags ulong
}
type WLAN_PROFILE_INFO_LIST struct{
NumberOfItems ulong
Index ulong
ProfileInfo WLAN_PROFILE_INFO
}
func abort(funcname string, err error) {
panic(fmt.Sprintf("%s failed: %v", funcname, err))
}
//打开一个WLAN句柄
func WlanOpenHandle() (result uint32) {
negotiated_version := uint32(0)
client_handle := uint32(0)
dwClientVersion := uint32(2)
var nargs uintptr = 4
ret,_,callErr := syscall.Syscall6(uintptr(wlanhandle),
nargs,
uintptr(dwClientVersion),
0,
uintptr(unsafe.Pointer(&negotiated_version)),
uintptr(unsafe.Pointer(&client_handle)),
0,
0,
)
if ret != 0{
abort("StartWLANHandleError", callErr)
return
}
result = uint32(client_handle)
return
}
//关闭WLAN句柄
func WlanCloseHandle() {
var nargs uintptr = 2
handle :=WlanOpenHandle()
ret,_,callErr := syscall.Syscall(uintptr(wlanclosehandle),
nargs,
uintptr(handle),
0,
0,
)
if ret !=0{
abort("CloseHandleError",callErr)
return
}
fmt.Println("WlanCloseHandle Successful")
}
func main() {
defer syscall.FreeLibrary(wlankernal)
var nargs uintptr = 3
handle :=WlanOpenHandle();
var wlan_interface_info WLAN_INTERFACE_INFO_LIST;
ret,_,callErr := syscall.Syscall(uintptr(wlanenumInterfaces),
nargs,
uintptr(handle),
0,
uintptr(unsafe.Pointer(&wlan_interface_info)),
)
if ret !=0{
abort("WlanEnumInterfacesError",callErr)
return
}
WlanCloseHandle()
fmt.Println(ret)
fmt.Println(wlan_interface_info)
}