IPアドレスを変更するプログラム

/*
** IPアドレスを変更するプログラム in C++言語 Ver0.01α
** Written by Straus Ashley
** 2010 / 10 / 23
** ☆ゴリ押しだが、シンプルなIP変更方法だぉ☆
**
** 根本的な機能はWindowsのコマンドプロンプトの機能。
** 「netsh」というコマンドを利用している。
** 「netsh interface ip」というコマンドでipの設定をする。
** 効果としては、手動でIPアドレスを設定したのと同じ効果を得る。
**
** XPの場合
** netsh interface ip set address 対象アダプタ static IPアドレス サブネット・マスク デフォルト・ゲートウエイ none
** netsh interface ip set dns 対象アダプタ static IPアドレス PrimaryかSecondary
** という引数であり、管理者であれば実行に制限は特にないため(管理者権限は要る UACはない)、
** #include <stdlib.h>でインクルードし、system関数を使いコマンドを実行する。
**
** 例) 無線LANのIPアドレス等を次のように設定したい場合
** IPAddress : 192.168.1.21
** Subnet Mask : 255.255.255.0
** Default Gateway : 192.168.1.1
** 
** system("netsh interface ip set address \"ワイヤレス ネットワーク接続\" static 192.168.1.21 255.255.255.0 192.168.1.1 none");
**
** 例) 有線LANのIPアドレス等を次のように設定したい場合
** IPAddress : 192.168.1.21
** Subnet Mask : 255.255.255.0
** Default Gateway : 192.168.1.1
** 
** system("netsh interface ip set address \"ローカル エリア接続\" static 192.168.1.21 255.255.255.0 192.168.1.1 none");
**
** 例) 無線LANのDNSのアドレスを次のように設定したい場合
** Primary : 192.168.1.1
** secondary : NULL
**
** system("netsh interface ip set dns \"ワイヤレス ネットワーク接続\" static 192.168.1.1 primary");
**
** Vistaの場合
** コマンドが少し違うようだ
** IPを設定する場合noneを消す必要がある。
** VistaはUACにより管理者権限を要求されるため、一般ユーザはsystem関数でコマンドを実行しても権限が無いと言われる。
** しかしsystem関数では権限昇格を入力できないため、スルーされる。
** ビルドしたプログラムを右クリックして、「管理者として実行」とすればよいが、ビルドの度にするのは面倒であると思われる。
** 従ってrunasを指定したWin32APIを用いて、その場で管理者権限を昇格できるようにする。
** 一時的に権限昇格するため、まだセキュリティ上よい(?)。
** ShellExecuteExの実行を決める構造体に上述の設定を施し、実行する。
** 余談であるが、コンソールが追加で表示されるのを防ぐために、info.nShow = SW_HIDE;を指定したが、SW_SHOWで表示可能。
** 実行後UACでパスワードを入力し、管理者として実行することができる。
**
** 最後に。。。
** 1.本プログラムではエラーチェックをしていません。
** 2.好きに改造してOK。
** 3.壊れても知りません。
** 4.IP変更するプログラム創るのに、調べ始めてから3時間もかかったアル。
** 5.後は・・・任せた orz
*/
#include <stdlib.h>
#include <windows.h>

int main(void)
{
	//Vista用
	SHELLEXECUTEINFO info;
	ZeroMemory(&info, sizeof(info));
	info.cbSize = sizeof(info);
	info.fMask = SEE_MASK_FLAG_NO_UI;
	info.lpVerb = L"runas";
	info.lpFile = L"netsh";
	info.lpParameters = L"interface ip set address \"ワイヤレス ネットワーク接続\" static 192.168.1.24 255.255.255.0 192.168.1.1";
	info.nShow = SW_HIDE;
	ShellExecuteEx(&info);

	//XP用
	//設定するコマンド
	//IP
	//system("netsh interface ip set address \"ワイヤレス ネットワーク接続\" static 192.168.1.21 255.255.255.0 192.168.1.1 none");
	//DNS
	//system("netsh interface ip set dns \"ワイヤレス ネットワーク接続\" static 192.168.1.1 primary");

	//元に戻すコマンド
	//IP
	//system("netsh interface ip set address \"ワイヤレス ネットワーク接続\" dhcp");
	//DNS
	//system("netsh interface ip set dns \"ワイヤレス ネットワーク接続\" dhcp");
	return 0;
}