MS-DOS デバイス名の概要
WDM 以外のドライバーによって作成される名前付きデバイス オブジェクトには、通常、MS-DOS デバイス名があります。 MS-DOS デバイス名は、\DosDevices\DosDeviceName という形式の名前を持つオブジェクト マネージャーのシンボリック リンクです。
MS-DOS デバイス名を持つデバイスの例として、シリアル ポート COM1 があります。 この MS-DOS デバイス名は、\DosDevices\COM1 です。 同様に、C ドライブの場合は、名前が \DosDevices\C: です。
WDM ドライバーは、通常、デバイスの MS-DOS デバイス名を指定しません。 代わりに、WDM ドライバーは IoRegisterDeviceInterface ルーチンを使用してデバイス インターフェイスを登録します。 デバイス インターフェイスは、特定の命名規則ではなく、デバイスをその機能によって指定します。 詳細については「デバイス インターフェイス クラスの概要」を参照してください。
ドライバーが MS-DOS デバイス名を指定する必要があるのは、そのデバイスが ユーザー モード プログラムで動作するために、特定の既知の MS-DOS デバイス名を持つ必要がある場合だけです。
ドライバーは、IoCreateSymbolicLink ルーチンを使用してデバイスへのシンボリック リンクを作成することで、デバイス オブジェクトの MS-DOS デバイス名を指定します。 例として、次のコード例では、\DosDevices\DosDeviceName から \Device\DeviceName へのシンボリック リンクを作成しています。
UNICODE_STRING DeviceName;
UNICODE_STRING DosDeviceName;
NTSTATUS status;
RtlInitUnicodeString(&DeviceName, L"\\Device\\DeviceName");
RtlInitUnicodeString(&DosDeviceName, L"\\DosDevices\\DosDeviceName");
status = IoCreateSymbolicLink(&DosDeviceName, &DeviceName);
if (!NT_SUCCESS(status)) {
/* Symbolic link creation failed. Handle error appropriately. */
}
システムでは、複数のバージョンの \DosDevices ディレクトリがサポートされていることに注意してください。 ドライバーが目的のバージョンでシンボリック リンクを作成していることを確認します。 詳細については、「ローカルおよびグローバル MS-DOS デバイス名」を参照してください。
ユーザー モードから DosDevices 名前空間にアクセスするには、ファイル名を開くときに \\.\ を指定します。 CreateFile() を呼び出すと、対応するデバイスをユーザー モードで開くことができます。
例として、次のコード例では、\\DosDevices\\DosDeviceName デバイスをユーザー モードで開いています。
file = CreateFileW(L"\\\\.\\DosDeviceName",
GENERIC READ | GENERIC WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
シンボリック リンクは、ユーザー モードの DefineDosDevice ルーチンを使用して、ユーザー モード アプリケーションから作成することもできます。 詳細については Microsoft Windows SDKを参照してください。