INFO: Hiperligações simbólicas e nomes de Noções sobre dispositivos

Traduções de Artigos Traduções de Artigos
Artigo: 235128 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Dispositivos como discos rígidos, portas série e portas paralelas têm um nome de dispositivo do Windows NT interno e, opcionalmente, podem ter um nome de dispositivo do MS-DOS. Estes nomes estão localizados no espaço de nomes do Gestor de objectos de Windows NT. Apesar de Windows NT próprio e controladores de modo kernel utilizarem nomes de dispositivo do NT, programas Win32 tem de utilizar os nomes de dispositivo do MS-DOS. O nome de dispositivo de MS-DOS é uma ligação simbólica ao nome do dispositivo NT subjacente. Este artigo descreve os nomes de dispositivo, as ligações simbólicas e como os programas Win32 podem criar e remover ligações simbólicas.

Mais Informação

Nomes de dispositivo do NT internos

Quando é carregado um controlador de dispositivo do modo kernel, respectiva rotina de inicialização regista um nome de dispositivo com o Gestor de objectos do Windows NT. Este nome é referido como o nome de dispositivo do Windows NT. Os componentes de modo kernel do Windows NT e controladores de modo kernel referenciam dispositivos pelos respectivos nomes de dispositivo Windows NT. Estes nomes têm um formato, como, por exemplo, \Device\CDRom0 e \Device\Serial0 e também existirem no directório \device do espaço de nomes do Gestor de objectos.

Programas do Win32 não podem utilizar nomes de dispositivos Windows NT internos para dispositivos de acesso porque o subsistema Win32 e API do Win32 requerem as letras de unidade mais familiares e nomes de dispositivo do MS-DOS, tais como COM1 A:, C:,: e LPT1:. Apesar de programas do Win32 não poderão utilizar nomes de dispositivos do Windows NT, no entanto, podem definir e remover nomes de dispositivo do MS-DOS para aceder a dispositivos. Podem também obter o nome de dispositivo do Windows NT interno associado um nome de dispositivo do MS-DOS. O código de exemplo na secção "Ligações simbólicas" deste artigo descreve como efectuar este procedimento.

Para obter uma melhor compreensão dos como o Gestor de objectos faixas nomes de dispositivos e outros objectos de sistema, pode ver o espaço de nomes do Gestor de objectos com a ferramenta WinObj.exe no Platform SDK.

Nomes de dispositivo do MS-DOS

Programas Win32 utilizam dispositivos tais como unidades, portas série e portas paralelas através dos nomes de dispositivo do MS-DOS. Para unidades de disco, estas são letras de unidade como A: e C:. Para portas série e paralelas são nomes como COM1:, COM2: e LPT1:. Como nomes de dispositivo do Windows NT, estes nomes residem no espaço de nomes do Gestor de objectos, mas no \?? directório, que é visível para os programas do modo de utilizador Win32.

O que torna os nomes de dispositivo de MS-DOS diferente de nomes de dispositivos do Windows NT é que não são utilizadas pelos controladores kernel ou modo de kernel Windows NT. Respectiva finalidade é Consulte nomes de dispositivos do Windows NT para que programas Win32 possam utilizar a letras de unidade comuns e os nomes de dispositivos; por exemplo, COM1:, para aceder os dispositivos do Windows NT. Por este motivo, os nomes de dispositivo do MS-DOS são designados por "ligações simbólicas" para nomes de dispositivo do Windows NT. Ou seja, um nome de dispositivo do MS-DOS existe no objecto do Gestor de \?? directório e aponta para um nome de dispositivo do Windows NT no directório de \device do Gestor de objectos.

Cada nome de dispositivo do MS-DOS pode apontar para no máximo um Windows NT dispositivo interno. No entanto, vários nomes de dispositivo do MS-DOS podem apontar para um único dispositivo. Por exemplo, enquanto C: podem apenas apontar para uma única partição, é possível ter duas ou mais letras de unidade, como ponto de Z:, D: e E: na mesma partição.

Ligações simbólicas

Ligações simbólicas criadas pelo sistema persistem em computador é reiniciado uma vez que estas são armazenadas no registo. Programas também podem criar ligações simbólicas com a API DefineDosDevice(). Estas hiperligações são válidas apenas até o computador for reiniciado ou desactivado, a menos que chaves de registo que contém informações sobre as ligações sejam actualizadas.

Podem existir várias ligações simbólicas para um nome de dispositivo do Windows NT. No entanto, apenas o MS-DOS nome de dispositivo que o sistema foi inicialmente atribuído o dispositivo do Windows NT interno permanece em reinicia. Por conseguinte, é possível criar ligações simbólicas adicionais que atribuir várias letras de unidade a uma única unidade de CD-ROM, mas as letras de unidade adicionais permanecem apenas até o computador está desligado ou reiniciado.

Programas Win32 podem obter o nome de dispositivo do Windows NT estiver associado um nome de dispositivo de MS-DOS específico por QueryDosDevice() chamada com o nome de dispositivo do MS-DOS. Seguinte é código de exemplo que mostra como o fazer:
char szNtDeviceName[MAX_PATH];

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
programas Win32 podem criar e eliminar ligações simbólicas chamando DefineDosDevice(). Para criar uma ligação simbólica, ligue DefineDosDevice com o sinalizador DDD_RAW_TARGET_PATH. Para remover uma ligação simbólica, chamá-lo com os sinalizadores DDD_REMOVE_DEFINITION e DDD_RAW_TARGET_PATH. O programa de exemplo seguinte demonstra ambas estas operações:
/*
   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);
   }

}
				

Propriedades

Artigo: 235128 - Última revisão: 21 de novembro de 2006 - Revisão: 4.1
A informação contida neste artigo aplica-se a:
  • Microsoft Win32 Application Programming Interface nas seguintes plataformas
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Palavras-chave: 
kbmt kbinfo kbkernbase KB235128 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 235128

Submeter comentários

 

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