Présentation des noms d’appareils MS-DOS

Un objet d’appareil nommé créé par un pilote non WDM a généralement un nom d’appareil MS-DOS. Un nom d’appareil MS-DOS est un lien symbolique dans le gestionnaire d’objets avec un nom de la forme \DosDevices\DosDeviceName.

Un exemple d’appareil avec un nom d’appareil MS-DOS est le port série, COM1. Il a le nom d’appareil MS-DOS \DosDevices\COM1. De même, le lecteur C porte le nom \DosDevices\C:.

Les pilotes WDM ne fournissent généralement pas de noms de périphériques MS-DOS pour leurs appareils. Au lieu de cela, les pilotes WDM utilisent la routine IoRegisterDeviceInterface pour inscrire une interface d’appareil. L’interface de l’appareil spécifie les appareils en fonction de leurs fonctionnalités, plutôt que par une convention d’affectation de noms particulière. Pour plus d’informations, consultez Classes d’interface d’appareil.

Les pilotes doivent fournir un nom de périphérique MS-DOS uniquement si l’appareil doit avoir un nom d’appareil MS-DOS connu spécifique pour fonctionner avec des programmes en mode utilisateur.

Un pilote fournit un nom d’appareil MS-DOS pour un objet d’appareil à l’aide de la routine IoCreateSymbolicLink pour créer un lien symbolique vers l’appareil. Par exemple, l’exemple de code suivant crée un lien symbolique de \DosDevices\DosDeviceName vers \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. */
}

Notez que le système prend en charge plusieurs versions du répertoire \DosDevices . Assurez-vous que votre pilote crée ses liens symboliques dans la version que vous souhaitez. Pour plus d’informations, consultez Noms d’appareils MS-DOS locaux et globaux.

Pour accéder à l’espace de noms DosDevices à partir du mode utilisateur, spécifiez \\.\ lorsque vous ouvrez un nom de fichier. Vous pouvez ouvrir un appareil correspondant en mode utilisateur en appelant CreateFile().

Par exemple, l’exemple de code suivant ouvre l’appareil \\DosDevices\\DosDeviceName en mode utilisateur.

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

Un lien symbolique peut également être créé à partir d’une application en mode utilisateur à l’aide de la routine DefineDosDevice en mode utilisateur. Pour plus d’informations, consultez la Microsoft Windows SDK.