INFO : les noms de périphériques de présentation et les liens symbolique

Traductions disponibles Traductions disponibles
Numéro d'article: 235128 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Périphériques telles que des disques durs, les ports séries et les ports parallèles ont un nom de périphérique interne Windows NT et peuvent éventuellement ont un nom de périphérique MS-DOS. Ces noms se trouvent dans espace de noms du gestionnaire d'objets Windows NT. Bien que Windows NT lui-même et les pilotes en mode noyau utilisent des noms de périphérique NT, programmes Win32 doivent utiliser les noms de périphérique MS-DOS. Le nom de périphérique MS-DOS est un lien symbolique vers le nom de périphérique NT sous-jacent. Cet article décrit périphérique noms, les liens symboliques et comment les programmes Win32 peuvent créer et supprimer les liens symboliques.

Plus d'informations

Noms de périphérique NT internes

Si un pilote de périphérique en mode noyau est chargé, la routine d'initialisation enregistre un nom de périphérique avec gestionnaire d'objets Windows NT. Ce nom est appelé le nom de périphérique Windows NT. Les composants en mode noyau de Windows NT et les pilotes en mode noyau référencer les périphériques par leurs noms de périphérique Windows NT. Ces noms ont un format, telles que \Device\CDRom0 et \Device\Serial0 et également présents dans le répertoire \device d'espace de noms du gestionnaire d'objets.

Programmes Win32 ne peut pas utiliser internes noms de périphérique Windows NT aux périphériques d'accès car le sous-système Win32 et l'API Win32 requièrent les lettres de lecteur plus familière et les noms de périphériques MS-DOS, tels que A:, C:, COM1: et LPT1:. Bien que programmes Win32 ne peuvent pas utiliser des noms de périphérique Windows NT, ils peuvent toutefois définir et supprimer des noms de périphériques MS-DOS pour accéder aux périphériques. Ils peuvent également extraire le nom de périphérique Windows NT interne associé à un nom de périphérique MS-DOS. L'exemple de code dans la section « liens symbolique » de cet article explique comment procéder.

Pour obtenir mieux comprendre comment le gestionnaire d'objets suit des noms aux périphériques et autres objets système, vous pouvez afficher le gestionnaire d'objets espace de noms avec l'outil WinObj.exe dans le Kit de développement Platform SDK.

Noms de périphériques MS-DOS

Programmes Win32 utiliser périphériques tels que lecteurs, les ports série et les ports parallèles à leurs noms de périphériques MS-DOS. Pour les lecteurs de disque, ce sont les lettres de lecteur comme lecteur A: et C:. Pour les ports séries et parallèles Voici noms comme COM1:, port COM2: et LPT1:. Comme noms de périphériques Windows NT, ces noms résident dans le gestionnaire d'objets espace de noms, mais dans le \?? répertoire, ce qui est visible pour les programmes Win32 en mode utilisateur.

Ce qui rend noms de périphériques MS-DOS différente de noms de périphérique Windows NT est qu'ils ne sont pas utilisés par les pilotes de noyau ou en mode noyau Windows NT. Leur objectif est faire référence à noms de périphérique Windows NT, ce qui programmes Win32 peuvent d'utiliser les lettres de lecteur familier et les noms de périphériques ; par exemple, port COM1:, pour accéder aux périphériques Windows NT. Par conséquent, les noms de périphériques MS-DOS sont appelés « liens symboliques » aux noms de périphérique Windows NT. C'est-à-dire qu'un nom de périphérique MS-DOS existe dans le gestionnaire d'objets de \?? répertoire et pointe vers un nom de périphérique Windows NT dans le gestionnaire d'objets \device répertoire.

Chaque nom de périphérique MS-DOS peut pointer vers au plus un interne Windows NT périphérique. Toutefois, plusieurs noms de périphériques MS-DOS peuvent pointer vers un seul périphérique. Par exemple, tandis que C:peuvent uniquement pointer vers une partition unique, il est possible d'avoir deux ou plusieurs lettres de lecteur, tels que D:, E:et Z:, le point sur la même partition.

Liens symboliques

Les liens symboliques créés par le système conserver sur l'ordinateur redémarre car elles sont stockées dans le Registre. Programmes peuvent également créer des liens symboliques avec l'API DefineDosDevice(). Ces liens sont valides uniquement jusqu'à ce que l'ordinateur soit redémarré ou désactivé à moins que les clés de Registre contenant des informations sur les liens sont mis à jour.

Il peut y avoir plusieurs liens symboliques à un nom de périphérique Windows NT. Cependant, seulement le nom du périphérique MS-DOS reste pour le système initialement affectée au périphérique interne de Windows NT tous redémarre. Par conséquent, il est possible de créer des liens symboliques affecter plusieurs lettres de lecteur à un seul lecteur de CD-ROM, mais les lettres de lecteur supplémentaires restent uniquement jusqu'à ce que l'ordinateur est désactivé ou redémarré.

Programmes Win32 peuvent récupérer le nom du périphérique Windows NT est associé à un nom de périphérique MS-DOS spécifique en appelant QueryDosDevice() avec le nom de périphérique MS-DOS. Voici code d'exemple qui montre comment faire :
char szNtDeviceName[MAX_PATH];

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
programmes Win32 peuvent créer et supprimer les liens symboliques en appelant DefineDosDevice(). Pour créer un lien symbolique, appelez DefineDosDevice avec l'indicateur DDD_RAW_TARGET_PATH. Pour supprimer un lien symbolique, appelez il avec les indicateurs DDD_REMOVE_DEFINITION et DDD_RAW_TARGET_PATH. Le programme d'exemple suivant illustre les deux de ces opérations :
/*
   DDD

      This sample shows how to associate an MS-DOS device name with a 
      Windows NT device name. The association is a symbolic link between
      device names stored in the Object Manager's namespace. Applications
      use the MS-DOS device name, but Windows NT and kernel-mode drivers
      use the Windows NT device name.  

   Usage:
      ddd <MS-DOS Device Name> <NT Device Name>
      ddd -r <MS-DOS Device Name>

   NOTE: If the MS-DOS device name is a driver letter, the trailing 
   backlash is not accepted by DefineDosDevice or QueryDosDevice.

   NOTE: The MS-DOS device name is defined only until the computer is 
   restarted.

   To make the drive letter associations permanent on Window NT 4.0, you
   have to update HKEY_LOCAL_MACHINE\SYSTEM\DISK\Information. However, 
   the contents of the value are undocumented. 

   On Windows 2000, you have to use the Volume Mount Point APIs.
*/ 

#define WIN32_LEAN_AND_MEAN /* Reduce number of system headers parsed */ 
                            /* during build. */ 

#include <windows.h>
#include <stdio.h>

void main (int argc, char **argv)
{
   char * pszDosDeviceName,
        * pszNtDeviceName;

   bool  fRemoveDeviceName = false;
   bool  fResult;

   /*
      Command-line parsing.
        1) Make sure correct number of arguments are supplied.
        2) See if you should add or remove the MS-DOS Device Name.
   */ 
   if (argc != 3)
   {
      printf("\nusage: %s <DOS device name> <NT device name>    to add\n",
             argv[0]);
      printf("usage: %s [-r] <DOS device name>                to remove\n",
             argv[0]);
      printf("\n\texample: %s d: \\device\\cdrom0\n", argv[0]);
      return;
   }

   fRemoveDeviceName = !lstrcmpi (argv[1], "-r");


   /* Now, add/remove the DOS device name. */ 
   if (fRemoveDeviceName)
   {
      /*
         Remove the MS-DOS device name. First, get the name of the Windows
         NT device from the symbolic link, then delete the symbolic link.
         
      */ 
      pszDosDeviceName = argv[2];

      pszNtDeviceName = (char *)LocalAlloc (LPTR, MAX_PATH);

      fResult = QueryDosDevice (pszDosDeviceName, pszNtDeviceName,
                                MAX_PATH);
      if (fResult)
      {
         fResult = DefineDosDevice (DDD_RAW_TARGET_PATH|
                                    DDD_REMOVE_DEFINITION|
                                    DDD_EXACT_MATCH_ON_REMOVE,
                                    pszDosDeviceName, pszNtDeviceName);
      }
      if (!fResult)
         printf("error %lu: could not remove %s\n",
                GetLastError(), pszDosDeviceName);

      LocalFree (pszNtDeviceName);
   }
   else
   {
      /* Add the DOS device name */ 

      pszDosDeviceName = argv[1];
      pszNtDeviceName  = argv[2];

      fResult = DefineDosDevice (DDD_RAW_TARGET_PATH, pszDosDeviceName,
                                 pszNtDeviceName);
      if (!fResult)
         printf("error %lu: could not link %s to %s\n",
                GetLastError(), pszDosDeviceName, pszNtDeviceName);
   }

}
				

Propriétés

Numéro d'article: 235128 - Dernière mise à jour: mardi 21 novembre 2006 - Version: 4.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Win32 Application Programming Interface sur le système suivant
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Mots-clés : 
kbmt kbinfo kbkernbase KB235128 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 235128
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com