Einführung in MS-DOS-Gerätenamen

Ein benanntes Geräteobjekt, das von einem Nicht-WDM-Treiber erstellt wird, weist in der Regel einen MS-DOS-Gerätenamen auf. Ein MS-DOS-Gerätename ist eine symbolische Verknüpfung im Objekt-Manager mit dem Namen \DosDevices\DosDeviceName.

Ein Beispiel für ein Gerät mit einem MS-DOS-Gerätenamen ist der serielle Port COM1. Es hat den MS-DOS-Gerätenamen \DosDevices\COM1. Ebenso hat das Laufwerk C den Namen \DosDevices\C:.

WDM-Treiber stellen normalerweise keine MS-DOS-Gerätenamen für ihre Geräte bereit. Stattdessen verwenden WDM-Treiber die IoRegisterDeviceInterface-Routine , um eine Geräteschnittstelle zu registrieren. Die Geräteschnittstelle gibt Geräte nach ihren Funktionen und nicht nach einer bestimmten Benennungskonvention an. Weitere Informationen finden Sie unter Geräteschnittstellenklassen.

Treiber müssen einen MS-DOS-Gerätenamen nur angeben, wenn das Gerät über einen bestimmten bekannten MS-DOS-Gerätenamen verfügen muss, um mit Programmen im Benutzermodus arbeiten zu können.

Ein Treiber stellt einen MS-DOS-Gerätenamen für ein Geräteobjekt bereit, indem er die IoCreateSymbolicLink-Routine verwendet, um eine symbolische Verknüpfung mit dem Gerät zu erstellen. Im folgenden Codebeispiel wird beispielsweise ein symbolischer Link von \DosDevices\DosDeviceName zu \Device\DeviceName erstellt.

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. */
}

Beachten Sie, dass das System mehrere Versionen des Verzeichnisses \DosDevices unterstützt. Stellen Sie sicher, dass Ihr Treiber seine symbolischen Links in der gewünschten Version erstellt. Weitere Informationen finden Sie unter Lokale und globale MS-DOS-Gerätenamen.

Um über den Benutzermodus auf den DosDevices-Namespace zuzugreifen, geben Sie beim Öffnen eines Dateinamens \\.\ an. Sie können ein entsprechendes Gerät im Benutzermodus öffnen, indem Sie CreateFile()aufrufen.

Im folgenden Codebeispiel wird beispielsweise das Gerät \\DosDevices\\DosDeviceName im Benutzermodus geöffnet.

file = CreateFileW(L"\\\\.\\DosDeviceName",
  GENERIC READ | GENERIC WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);

Mithilfe der DefineDosDevice-Routine im Benutzermodus kann auch ein symbolischer Link aus einer Anwendung im Benutzermodus erstellt werden. Weitere Informationen finden Sie im Microsoft Windows SDK.