ネットワーク設定の切り替えについて

入社して以来、人月なんぼで売られている身なので、
包丁い〜っぽん♪ならずノートパソコン一冊であちこちを渡り歩かねばなりません。

 

そこで必要になってくるのが、

自宅 ・ 自社1 ・ 自社2 ・ お客様先 ・ AirH" ・ AirH"+VPN ・・・

と必要に応じてネットワークの設定を切り替えることができるツールです。

ネットワーク設定切り替えツールにやってもらいたいこと

ワンクリックで、以下の設定がっと変わってくれたらうれしいな・・・

  1. TCP/IPの変更(IP変更,DNS変更)
  2. NetBIOS設定変更(ドメイン・ワークグループ変更)
  3. IE設定変更(Proxy変更)
  4. 無線LANのOn/Off
  5. AirH"ダイアルアップ接続
  6. VPNクライアントソフト起動

ネットワーク設定切り替えツール比較

私の使っているThink Pad X31には、Access Connectionsというソフトが付属していて 上記の要件の内、大抵のことをやってくれます。
しかし、惜しいことにNetBIOS周りの設定(ドメイン・ワークグループ)は変更してくれません。

変更項目IPDNSDomainProxy無線LANAirH"VPN切替え時に任意のバッチを起動
Access Connectionsooxooooo
ValhelIPConfigooooxxxo
ChangeProxy+Dialxxxoxoxx

で、どうするの?

Access Connectionsは、ネットワーク設定切替え時にバッチファイルを動かすことができます。
そこで、ドメイン名を変えるアプリをさくっと作って、Access Connectionsの ロケーションプロファイルに登録してやれば満足できる環境が手に入れられます。

変更項目IPDNSDomainProxy無線LANAirH"VPN切替え時バッチ
Access ConnectionsooxooooDomain変更アプリ

ぢゃあいっちょ作るか

ぐぐってみたところ、
どうやらWin32APIのNetJoinDomainを叩けばいいらしい。

引数でドメイン名やワークグループ名を与えるとして、

[Usage1] changeDomain.exe WorkGroupName
[Usage2] changeDomain.exe DomainName Account Password

という仕様のコンソールプログラムをざざっと書くと以下のようになりました。

/**
 * changeDomain.cpp
 */

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <lm.h>
#include <lmjoin.h>

#define BUFSIZE 256

#define ARG_DOMAIN  1 // 第一引数はドメイン名 or ワークグループ名
#define ARG_ACCOUNT 2 // 第二引数はユーザ名(ドメイン変更時のみ必要)
#define ARG_PASSWD  3 // 第三引数はパスワード(ドメイン変更時のみ必要)

#define JOIN_WG     NETSETUP_JOIN_UNSECURE
#define JOIN_DOMAIN NETSETUP_JOIN_DOMAIN+NETSETUP_ACCT_CREATE+NETSETUP_DOMAIN_JOIN_IF_JOINED

int main( int argc , char** argv ){
	
	/* 引数の列挙 */
	for( int cnt = 1 ; cnt < argc ; cnt++ ){
		printf( "arg%d : %s\n" , cnt , argv[cnt] );
	}

	/* ワークグループ名・ドメイン名を変更する */
	NET_API_STATUS ret; // NetJoinDomainの返値を格納する
	
	switch( argc ){
	case 2:
		/* ワークグループを変更する場合 */
		WCHAR workGroup[BUFSIZE];
		
		MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,argv[ARG_DOMAIN],-1,workGroup,sizeof(workGroup));

		ret = NetJoinDomain( NULL , workGroup , NULL , NULL , NULL , JOIN_WG );
		break;
		
	case 4:
		/* ドメインを変更する場合 */
		WCHAR domain[BUFSIZE];
		WCHAR account[BUFSIZE];
		WCHAR passwd[BUFSIZE];
		
		MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,argv[ARG_DOMAIN] ,-1,domain ,sizeof(domain));
		MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,argv[ARG_ACCOUNT],-1,account,sizeof(account));
		MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,argv[ARG_PASSWD] ,-1,passwd ,sizeof(passwd));
		
		ret = NetJoinDomain( NULL , domain , NULL , account , passwd , JOIN_DOMAIN );
		break;
		
	default:
		/* 引数の数がおかしいとき */
		printf( "Error : invalid Argument\n" );
		return -1;
	}
	
	/* エラー処理 */
	switch( ret ){
	case ERROR_INVALID_PARAMETER:
		printf( "Error : Invalid Parameters.\n" );
		return -1;
	case ERROR_NO_SUCH_DOMAIN:
		printf( "Error : No such domain.\n" );
		return -1;
	case NERR_SetupAlreadyJoined:
		printf( "Error : This computer is already joined to the domain.\n" );
		return -1;
	case NERR_InvalidWorkgroupName:
		printf( "Error : Workgroup Name is invalid.\n" );
		return -1;
	}
	
	/* 正常終了 */
	printf( "succeeded\n" );
	
	return 0;
}

コンパイルは、bcc32で行いました。

>bcc32 changeDomain.cpp

>dir
2004/05/11  23:07             2,009 changeDomain.cpp
2004/05/11  23:08            53,248 changeDomain.exe
2004/05/11  23:08             5,370 changeDomain.obj
2004/05/11  23:08           393,216 changeDomain.tds

動くかどうかテストしてみます

>changeDomain.exe WindowSide
arg1 : WindowSide
succeeded
ChgDomain.png

ちゃんとワークグループ名は変わったようです。

 

長いワークグループ名を与えてみてエラーが起きるかどうかを確かめてみます。

>changeDomain.exe WindowSideWorkGroup
arg1 : WindowSideWorkGroup
Error : Workgroup Name is invalid.

どうやらちゃんとエラーを拾えているようです。

 

後日自社で試したところ、ドメインへの参加もできました*1
ただしドメインのセキュリティポリシーをガシガシ適用されちゃうので、特に
 プリンタを使えない、
 共有サーバを使えない
ということがなければ、
素直にWorkGroupワークグループ?に参加した方が良かったかも・・・

Access Connectionsへの登録

ロケーション毎に、

#HOME.bat
.\changeDomain.exe HOMELAN > changeDomain.log

などとバッチファイルを作成して、
Access Connectionsに登録します。

ChgDomainSetting.png

ダウンロード

changeDomain.exe本体とAccess Connectionsから呼ぶためのバッチファイルです。
よろしかったらお使いください。(NortonAntiVirus2004-定義ファイル2004/05/09で検疫済み)

fileChangeDomain.zip

Computer


*1 って本当はやっちゃいけないんだけど・・・

添付ファイル: fileChgDomainSetting.png 1010件 [詳細] fileChgDomain.png 1043件 [詳細] fileChangeDomain.zip 1502件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2006-02-16 (木) 22:38:23 (3949d)
ISBN10
ISBN13
9784061426061