INFORMACIÓN: Nombres de dispositivo de descripción y vínculos simbólicos

Seleccione idioma Seleccione idioma
Id. de artículo: 235128 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Dispositivos como los discos duros, puertos serie y puertos paralelos tienen un nombre de dispositivo interno de Windows y, opcionalmente, pueden tener un nombre de dispositivo de MS-DOS. Estos nombres se encuentran en espacio de nombres del Administrador de objetos de Windows NT. Mientras Windows propio y controladores en modo de núcleo utilizan los nombres de dispositivo NT, los programas de Win32 deben utilizar los nombres de dispositivo de MS-DOS. El nombre de dispositivo de MS-DOS es un vínculo simbólico al nombre de dispositivo NT subyacente. En este artículo describe los nombres de dispositivo, vínculos simbólicos y cómo los programas Win32 pueden crear y quitar vínculos simbólicos.

Más información

Nombres de dispositivo NT internos

Cuando se carga un controlador de dispositivo de modo de núcleo, su rutina de inicialización registra un nombre de dispositivo con el Administrador de objetos de Windows NT. Este nombre se conoce como el nombre de dispositivo de Windows NT. Los componentes de modo de núcleo de Windows y controladores en modo de núcleo referencia dispositivos por sus nombres de dispositivo de Windows NT. Estos nombres tienen un formato, como \Device\CdRom0 \Device\Serial0 y existen también en el directorio de \dispositivo de espacio de nombres del Administrador de objetos.

Programas de Win32 no pueden utilizar nombres internos de dispositivo de Windows a dispositivos de acceso porque el subsistema Win32 y la API Win32 requieren las letras de unidad más familiares y nombres de dispositivo de MS-DOS, como A:, C:, COM1: y LPT1:. Aunque los programas de Win32 no pueden utilizar los nombres de dispositivo de Windows NT, sin embargo, se pueden definir y quitar nombres de dispositivo de MS-DOS para tener acceso a dispositivos. También puede recuperar el nombre de dispositivo de Windows NT interno asociado con un nombre de dispositivo de MS-DOS. El código de ejemplo en la sección "Vínculos simbólicos" de este artículo describe cómo hacerlo.

Para obtener un mejor conocimiento de cómo el Administrador de objetos realiza un seguimiento nombres en dispositivos y otros objetos del sistema, puede ver el espacio de nombres del Administrador de objetos con la herramienta WinObj.exe en Platform SDK.

Nombres de dispositivo de MS-DOS

Programas de Win32 utilizan dispositivos como unidades, puertos serie y paralelos puertos a través de sus nombres de dispositivo de MS-DOS. Para unidades de disco, éstos son letras de unidad como A: y C:. Para los puertos serie y paralelos son nombres como COM1:, COM2: y LPT1:. Como los nombres de dispositivo de Windows NT, estos nombres residen en el espacio de nombres del Administrador de objetos, pero en el \?? directorio, que es visible para programas Win32 de modo de usuario.

Lo que hace diferente de los nombres de dispositivo de Windows NT a los nombres de dispositivo de MS-DOS es que no se utilizan los controladores de núcleo o modo de núcleo de Windows NT. Su propósito es hacer referencia a los nombres de dispositivo de Windows NT para que pueden utilizar programas Win32 las letras de unidad familiarizado y nombres de dispositivo; por ejemplo, COM1:, para tener acceso a los dispositivos de Windows NT. Por lo tanto, los nombres de dispositivo de MS-DOS se denominan "vínculos simbólicos" a los nombres de dispositivo de Windows NT. Es decir, un nombre de dispositivo MS-DOS existe en el Administrador de objetos de \?? directorio y apunta a un nombre de dispositivo de Windows NT en el objeto de directorio del administrador \dispositivo.

Cada nombre de dispositivo de MS-DOS puede señalar a lo sumo una Windows dispositivo interno. Sin embargo, varios nombres de dispositivo de MS-DOS pueden señalar a un único dispositivo. Por ejemplo, C: sólo pueden apuntar a una sola partición, es posible tener dos o más letras de unidad, como D:, E: y Z:, punto a la misma partición.

Vínculos simbólicos

Vínculos simbólicos creados por el sistema se conservan entre reinicios del equipo ya que se almacenan en el registro. Programas también pueden crear vínculos simbólicos con la API DefineDosDevice(). Estos vínculos son válidos sólo hasta que el equipo se reinicia o desactivado a menos que se actualizan las claves del registro que contiene información sobre los vínculos.

Puede haber varios vínculos simbólicos para un nombre de dispositivo de Windows NT. Sin embargo, sólo el nombre de dispositivo de MS-DOS que el sistema inicialmente asignado al dispositivo Windows interno permanece entre reinicios. Por lo tanto, es posible crear vínculos simbólicos adicionales que asignan múltiples letras de unidad a una única unidad de CD-ROM, pero las letras de unidad adicionales sólo permanecen hasta que se desactiva o se reinicia el equipo.

Programas de Win32 para recuperar el nombre de dispositivo de Windows está asociado con un nombre de dispositivo de MS-DOS específico mediante QueryDosDevice() llamada con el nombre de dispositivo de MS-DOS. Siguiente es el código de ejemplo que muestra cómo hacerlo:
char szNtDeviceName[MAX_PATH];

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
programas Win32 pueden crear y eliminar vínculos simbólicos llamando DefineDosDevice(). Para crear un vínculo simbólico, llamar la al DefineDosDevice con el indicador DDD_RAW_TARGET_PATH. Para quitar un vínculo simbólico, llame a con los indicadores DDD_REMOVE_DEFINITION y DDD_RAW_TARGET_PATH. El programa de ejemplo siguiente muestra dos de estas operaciones:
/*
   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);
   }

}
				

Propiedades

Id. de artículo: 235128 - Última revisión: martes, 21 de noviembre de 2006 - Versión: 4.1
La información de este artículo se refiere a:
  • Microsoft Win32 Application Programming Interface sobre las siguientes plataformas
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Palabras clave: 
kbmt kbinfo kbkernbase KB235128 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 235128

Enviar comentarios

 

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