WNetUseConnection ローカルデバイスの自動割り当てが可能な、ネットワークリソースの接続

NTの場合のCの宣言:

DWORD WNetUseConnection(
	HWND hWnd,
	LPNETRESOURCE NetResource,
	LPTSTR Password,
	LPTSTR UserName,
	DWORD Flags,
	LPTSTR  AccessName,
	LPDWORD AccessNameSize,
	LPDWORD Result);

説明:

ネットワークリソースに接続する。また、ローカルデバイスに割り当てる際に、システムに自動的に割り当て先を選択させることが可能である。

95の場合、PasswordとUserNameを入れ替えて指定する。

引数の意味は以下の通り。
NetResource (IN) 接続するリソースを指定するNETRESOURCE構造体のデータ。
PassWord (IN) 接続の際に使用するパスワード。NULLを指定可能。
UserName (IN) 接続の際に使用するユーザ名。NULLを指定可能。
Flags (IN) 接続の種類を表すビットマスク。後述の表を参照。
AccessName (OUT) 割り当て先のローカルデバイス名。
AccessNameSize (IN/OUT) AccessNameのサイズ。AccessNameのサイズが小さすぎる場合、必要な文字数が設定される。
Result (OUT) 接続結果の状態を示すビットマスク。後述の表を参照。

Flagsに指定可能な値は、以下のフラグの組み合わせである。
CONNECT_INTERACTIVE ユーザ認証用にユーザと対話を行う。
CONNECT_PROMPT デフォルトのユーザ名やパスワードを使用する場合にユーザに確認する。CONNECT_INTERACTIVEが指定されない場合、無視される。
CONNECT_REDIRECT ローカルデバイスに接続したネットワークリソースを割り当てる。lpAccessNameはNULLであってはならず、また、NetResourceのdwTypeはRESOURCETYPE_ANYであってはならない。
CONNECT_UPDATE_PROFILE 接続の状態を記憶しておき、次回ログオン時に接続を回復する。

Resultに返却される値は、以下のフラグの組み合わせである。
CONNECT_LOCALDRIVE ローカルデバイスに割り当てられた。

戻り値は、発生したエラーを示すエラー値である。

Cのサンプル:

“\\foo\bar”というネットワークドライブを割り当てる。割り当ての際のユーザ名は“hogehoge”、パスワードは“herohero”である。割り当ての際には、空いているローカルドライブを自動的に探し出して割り当てる。 なお、以下の例はNTの場合である。
void AutoConnect()
{
	NETRESOURCE nr;
	char AccessName[1000];
	DWORD AccessNameSize = 1000;
	DWORD Flags;
	DWORD ConInfo;
	DWORD lResult;

	nr.dwType = RESOURCETYPE_DISK;
	nr.lpLocalName = NULL;
	nr.lpRemoteName = "\\\\foo\\bar";
	nr.lpProvider = NULL;

	Flags = 0
		| CONNECT_INTERACTIVE /* パスワードが誤っていた場合などにパスワード再入力用ダイアログボックスを表示するなど、ユーザとの対話を行う */
		| CONNECT_PROMPT /* デユーザ名やパスワードなどをパスワード入力用ダイアログボックスを使用して入力する */
		| CONNECT_REDIRECT /* ネットワークドライブを自動で選択し、確立した接続をドライブに割り当てる */
		| CONNECT_UPDATE_PROFILE; /* 次回ログオン時に再接続する */

	/* 以下はNTの例 */
	lResult = WNetUseConnection(
		NULL,
		&nr,
		"herohero",
		"hogehoge",
		Flags,
		AccessName,
		&AccessNameSize,
		&ConInfo);

	if(lResult == NO_ERROR) {
		printf("正常終了.\n");
		if(ConInfo & CONNECT_LOCALDRIVE) printf("ローカルドライブ'%s'に割り当てられた.\n", AccessName);
	} else {
		printf("エラー(%d).\n", lResult);
	}
}

(original text:1999/03/04 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。