DefineDosDevice DOSデバイス名の追加・削除(C言語)

Cの宣言:

BOOL DefineDosDevice(
	DWORD Flags,
	LPCTSTR DosDeviceName,
	LPTSTR SrcDevice);

説明:

DefineDosDeviceは、SrcDeviceで指定されたデバイスに対して、DosDeviceNameで指定されたDOSデバイス名を新規定義または再定義する。または、DosDeviceNameで指定されたDOSデバイス名をシステムから削除する。

この関数はNTで使用可能。

SrcDeviceで指定されたデバイスに対して、DosDeviceNameで指定されたDOSデバイス名を新たに定義する。DosDeviceNameで指定されたDOSデバイス名が既に存在する場合、SrcDeviceを指すDOSデバイス名に再定義される。

FlagsにDDD_REMOVE_DEFINITIONを指定した場合、DefineDosDeviceはDosDeviceNameで指定したDOSデバイス名をシステムから削除する。

ただし、以前に複数回DefineDosDeviceでDOSデバイス名を再定義していた場合で、SrcDeviceをNULLとしていた場合、削除ではなく、最後にDefineDosDeviceによって定義したシンボリックリンクの状態への復帰となる。これ以上復帰ができない場合のみ、削除される。 DefineDosDeviceによる定義は、システムの再起動までの間有効である。

システム起動時に定義されたデバイス名を再定義するには、管理者の権限が必要である。

引数の意味は以下の通り。
Flags DefineDosDeviceの動作を指定するビットマスク。設定可能な値については後述の表を参照。
DosDeviceName 定義または削除するDOSデバイス名。
SrcDevice 定義または削除の対象となるデバイス。FlagsにDDD_RAW_TARGET_PATHが指定されていない場合、DOSデバイス名を表し、指定されている場合はデバイスパス名を表す。FlagsにDDD_EXACT_MATCH_ON_REMOVEが指定されていない場合、SrcDeviceはデバイス名のプリフィックスを指定しているものとみなされる。

Flagsに指定可能な値は、以下のフラグの組み合わせである。
DDD_RAW_TARGET_PATH SrcDeviceに指定されている文字列は、ドライブパスである。このフラグを指定していない場合、SrcDriveに指定した文字列はDOSデバイス名であるとみなされる。
DDD_REMOVE_DIFINITION DosDeviceNameで指定されたDOSデバイス名をシステムから削除する。このフラグを指定していない場合、DefineDosDeviceは、DosDeviceNameで指定されたDOSデバイス名をシステムに追加する。
DDD_EXACT_MATCH_ON_REMOVE DDD_REMOVE_DIFINITIONが指定されている場合のみ意味を持つ。このフラグを指定した場合、DefineDosDeviceはSrcDeviceで指定したデバイスに完全に一致するデバイス名に対して削除を行う。このフラグを指定していない場合、プリフィックスがSrcDeviceと一致するデバイス名に対して削除を行う。

戻り値は、関数の実行に成功したか否かを表す真偽値である。

Cのサンプル:

下記サンプルのMapPhysicalDrive関数は、プライマリハードディスクの二番目のパーティションを、ドライブ'S:'に割り当て、その後30秒間待機する。待機中にエクスプローラなどを利用することにより、ドライブ'S:'が割り当てられていることを確認できる。待機時間が過ぎたら、ドライブS:の割当てを解除し、再び元の状態へ戻す。 同様に、下記サンプルのMapPath関数は、'c:\test'というディレクトリを、ドライブ'S:'に割り当てる。
void MapPhysicalDrive()
{
	/* プライマリハードディスクの二番目のパーティションを、ドライブ'S:'に割り当てる */
	DefineDosDevice(
		DDD_RAW_TARGET_PATH,
		"s:", 
		"\\Device\\Harddisk0\\Partition2");

	/* 30秒間待機 */
	printf("待機...\n");
	Sleep(30000);

	/* ドライブ'S:'を削除する */
	DefineDosDevice(
		DDD_REMOVE_DEFINITION, 
		"s:", 
		NULL);
}

void MapPath()
{
	/* 'c:\test'というディレクトリを'S:'というドライブにマップする */
	DefineDosDevice(
		0,
		"s:", 
		"c:\\test");

	/* 30秒間待機 */
	printf("待機...\n");
	Sleep(30000);

	/* ドライブ'S:'を削除する */
	DefineDosDevice(
		DDD_REMOVE_DEFINITION, 
		"s:", 
		NULL);
}

(original text:1999/02/10 更新)

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