次の方法で共有


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を参照してください。