Introdução aos nomes de dispositivo MS-DOS

Um objeto de dispositivo nomeado criado por um driver não WDM normalmente tem um nome de dispositivo MS-DOS. Um nome de dispositivo MS-DOS é um link simbólico no gerenciador de objetos com um nome do formato \DosDevices\DosDeviceName.

Um exemplo de um dispositivo com um nome de dispositivo MS-DOS é a porta serial, COM1. Ele tem o nome do dispositivo MS-DOS \DosDevices\COM1. Da mesma forma, a unidade C tem o nome \DosDevices\C:.

Os drivers WDM geralmente não fornecem nomes de dispositivo MS-DOS para seus dispositivos. Em vez disso, os drivers WDM usam a rotina IoRegisterDeviceInterface para registrar uma interface do dispositivo. A interface do dispositivo especifica os dispositivos por seus recursos, em vez de por uma convenção de nomenclatura específica. Para obter mais informações, consulte Classes de interface do dispositivo.

Os drivers serão obrigados a fornecer um nome de dispositivo MS-DOS somente se o dispositivo precisar ter um nome de dispositivo MS-DOS conhecido específico para trabalhar com programas de modo de usuário.

Um driver fornece um nome de dispositivo MS-DOS para um objeto de dispositivo usando a rotina IoCreateSymbolicLink para criar um link simbólico para o dispositivo. Por exemplo, o exemplo de código a seguir cria um link simbólico de \DosDevices\DosDeviceName para \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. */
}

Observe que o sistema dá suporte a várias versões do diretório \DosDevices . Verifique se o driver cria seus links simbólicos na versão que você pretende. Para obter mais informações, consulte Nomes de dispositivo MS-DOS locais e globais.

Para acessar o namespace DosDevices do modo de usuário, especifique \\.\ ao abrir um nome de arquivo. Você pode abrir um dispositivo correspondente no modo de usuário chamando CreateFile().

Por exemplo, o exemplo de código a seguir abre o dispositivo \\DosDevices\\DosDeviceName no modo de usuário.

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

Um link simbólico também pode ser criado a partir de um aplicativo de modo de usuário usando a rotina DefineDosDevice do modo de usuário. Para obter mais informações, consulte o SDK do Microsoft Windows.