2007-10-23

アドホックモードに切り替え...できない

インフラストラクチャモードとアドホックモードを手動で切り替えるのが面倒なのでプログラムから切り替える方法を探していました。
 
OID_802_11_INFRASTRUCTURE_MODEで変更できそうだったのですが、残念なが動作しませんでした。
切り替えどころか、現在値を取得しようとしても常に Ndis802_11IBSS(アドホックモード)が返ってきます。
 
BOOL                                bRet            = FALSE;
DWORD                               dwBytesReturned = 0,
                                    dwError;
UCHAR                               ucQueryBuffer[sizeof(NDISUIO_QUERY_OID) + sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE)];
PNDISUIO_QUERY_OID                  pNdisQueryOid   = (PNDISUIO_QUERY_OID)&ucQueryBuffer[0];
NDIS_802_11_POWER_MODE              ndisPowerMode;
NDIS_802_11_NETWORK_INFRASTRUCTURE  ndisNetworkInfrastructure


pNdisQueryOid->Oid              = OID_802_11_INFRASTRUCTURE_MODE;
pNdisQueryOid->ptcDeviceName    = WLAN_DEVICE_NAME;

if (DeviceIoControl(
        g_hNdis                         ,
        IOCTL_NDISUIO_QUERY_OID_VALUE   ,
        (LPVOID)&ucQueryBuffer[0]       ,
        sizeof(ucQueryBuffer)           ,
        (LPVOID)&ucQueryBuffer[0]       ,
        sizeof(ucQueryBuffer)           ,
        &dwBytesReturned                ,
        NULL
)) {
    memcpy_s(&ndisNetworkInfrastructure, sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE), &pNdisQueryOid->Data[0], sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE));
    bRet = TRUE;
} else {
    dwError = GetLastError();
}
 
NDIS系の操作は未サポートのものが多いですね。
 

2 件のコメント:

yamame さんのコメント...

インフラとアドホックの切り替えは面倒ですよね。
WM標準のWifi管理は使い勝手がなぁ。
接続はあれど切断は無いし、アドホックは相手側から起動しないと接続できないし(コンピュータからコンピュータへを選ぶとできる謎仕様)、アドホックに繋ぎたいのにインフラで繋がったり・・・
WifiInfoで長タップかセンターキー長押しでAP一覧のリストみたいなのが出てそれから選べれば良いんですけど、アドエスの仕様上、そういうのって可能なんでしょうか?

kazuaki さんのコメント...

yamameさん こんにちは。

AP一覧は OID_802_11_BSSID_LISTで取得できそうですね。

複数のAPから接続先を選べるような環境では無いので試してなかったのですが、アドホックで待ち受けているPC等があればそちらに切り替えることができるかもしれません。

後で試してみます。