2008-08-28 42 views
-1

Vista上的Wifi支持很好,但Native Wifi on XP已經完成了一半。 NDIS 802.11 Wireless LAN Miniport Drivers只會讓你在那裏的一部分(例如網絡掃描)。從我讀過的(並嘗試過),在XP上的802.11 NDIS驅動程序將而不是允許您配置無線連接。您必須使用Native Wifi API才能執行此操作。 (請糾正我,如果我在這裏錯了。)應用程序,如InSSIDer已幫助我瞭解API,但InSSIDer只是一個掃描儀,並不旨在配置Wifi網絡。XP上的無線管理(SP2/SP3)

所以,問題是:我在哪裏可以找到一些處理XP上的Wifi網絡配置的代碼示例(C#或C++) - 例如配置文件創建和連接管理?

我應該注意到,這是一個封閉系統上的XP Embedded應用程序,我們無法使用內置的無線零配置(WZC)。我們必須在我們的.NET應用程序中構建所有Wifi管理功能。

是的,我把自己變成了藍色。似乎有人應該解決這個問題,但我找不到它。這就是我在這裏問的原因。

謝謝。

回答

1

我們在XP上使用WZC和Vista上的本地WiFi,但是這裏是我們在Vista上使用的代碼,FWIW。

配置文件創建:

// open a handle to the service 
if ((dwError = WlanOpenHandle(
     WLAN_API_VERSION, 
     NULL,    // reserved 
     &dwServiceVersion, 
     &hClient 
     )) != ERROR_SUCCESS) 
{ 
hClient = NULL; 
} 
return dwError; 
dwError=WlanSetProfile(hClient, &guid, 0, profile, NULL, TRUE, NULL, &reason_code); 

建立連接:

WLAN_CONNECTION_PARAMETERS conn; 

    conn.wlanConnectionMode=wlan_connection_mode_profile; 
    conn.strProfile=name; 
    conn.pDot11Ssid=NULL; 
    conn.pDesiredBssidList=NULL; 
    conn.dot11BssType=dot11_BSS_type_independent; 
    conn.dwFlags=NULL; 

    dwError = WlanConnect(hClient, &guid, &conn, NULL); 

檢查連接:

BOOL ret=FALSE; 
    DWORD dwError; 
    DWORD size; 
    void *p=NULL; 
    WLAN_INTERFACE_STATE *ps; 

    dwError = WlanQueryInterface(hClient, &guid, wlan_intf_opcode_interface_state, NULL, &size, &p, NULL); 
    ps=(WLAN_INTERFACE_STATE *)p; 
    if(dwError!=0) 
     ret=FALSE; 
    else 
     if(*ps==wlan_interface_state_connected) 
      ret=TRUE; 
    if(p!=NULL) WlanFreeMemory(p); 
    return ret; 

爲了保持連接到網絡,就產生一個線程,然後繼續檢查進行連接,然後根據需要重新連接。

編輯:人這個標記的東西是跛腳。讓我喜歡3個編輯來讓事情正確。

1

感謝您的反饋尼克。我幾乎已經獲得了配置文件和連接管理工作。訣竅是搞清楚XP上支持的Native API的哪些部分是而不是。幸運的是,Managed Wifi API已連接/斷開在XP上運行的通知事件(NetworkChange也提供了類似的更改事件)。