INFO: Nomes de Noções básicas sobre dispositivos e links simbólicos

Traduções deste artigo Traduções deste artigo
ID do artigo: 235128 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Dispositivos como discos rígidos, portas seriais e portas paralelas tem um nome interno de dispositivo de Windows NT e opcionalmente podem ter um nome de dispositivo MS-DOS. Esses nomes são localizados no namespace do Gerenciador de objeto do Windows NT. Enquanto o Windows NT próprio e drivers no modo kernel usam nomes de dispositivo NT, programas Win32 devem usar os nomes de dispositivo do MS-DOS. O nome de dispositivo do MS-DOS é um link simbólico para o nome de dispositivo NT subjacente. Este artigo descreve nomes de dispositivos, links simbólicos e como os programas Win32 podem criar e remover links simbólicos.

Mais Informações

Nomes de dispositivo NT internos

Quando um driver de dispositivo de modo kernel é carregado, sua rotina de inicialização registra um nome de dispositivo com o Gerenciador de objetos do Windows NT. Este nome é conhecido como o nome do dispositivo do Windows NT. Os componentes do modo de kernel do Windows NT e drivers no modo kernel fazer referência a dispositivos através de seus nomes de dispositivo do Windows NT. Esses nomes tem um formato, como \Device\CDRom0 e \Device\Serial0 e também existem no diretório \device do espaço para nome do Gerenciador de objeto.

Programas Win32 não é possível usar nomes internos de dispositivo do Windows NT para dispositivos de acesso porque o subsistema Win32 e o Win32 API exigem a letras de unidade mais familiares e nomes de dispositivo do MS-DOS, como COM1 A:, C:,: e LPT1:. Embora programas Win32 não podem usar nomes de dispositivo do Windows NT, no entanto, podem definir e remover nomes de dispositivo MS-DOS para acessar dispositivos. Eles também podem recuperar o nome de dispositivo interno do Windows NT associado com um nome de dispositivo do MS-DOS. O código de exemplo na seção "Links simbólicos" deste artigo descreve como fazer isso.

Para obter uma melhor compreensão de como o Gerenciador de objetos controla nomes de dispositivos e outros objetos do sistema, você pode exibir espaço para nome do Gerenciador de objeto com a ferramenta WinObj.exe no SDK da plataforma.

Nomes de dispositivo do MS-DOS

Programas Win32 usam dispositivos como unidades, portas seriais e paralelas portas por meio de seus nomes de dispositivo do MS-DOS. Para unidades de disco, são letras de unidade como A: e C:. Para portas seriais e paralelas são nomes como COM1:, COM2: e LPT1:. Como nomes de dispositivo do Windows NT, esses nomes residem no espaço para nome do Gerenciador de objeto, mas no \?? diretório, que fica visível para programas do Win32 de modo de usuário.

O que torna nomes de dispositivo MS-DOS diferente de nomes de dispositivo do Windows NT é que não são usadas pelos drivers de kernel ou modo de kernel do Windows NT. Sua finalidade é fazer referência a nomes de dispositivo do Windows NT para que programas Win32 podem usar as letras de unidade familiar e nomes de dispositivo; por exemplo, COM1:, para acessar os dispositivos do Windows NT. Portanto, nomes de dispositivo MS-DOS são chamados de "links simbólicos" para nomes de dispositivo do Windows NT. Ou seja, um nome de dispositivo MS-DOS existe no objeto do Gerenciador de \?? diretório e aponta para um nome de dispositivo do Windows NT no diretório de \device do Gerenciador de objeto.

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

Links simbólicos

Links simbólicos criados pelo sistema persistem entre o computador é reiniciado como elas são armazenadas no registro. Programas também podem criar links simbólicos com a API DefineDosDevice(). Esses links são válidos somente até que o computador seja reiniciado ou desativado a menos que as chaves do registro que contém informações sobre os links são atualizadas.

Pode haver vários links simbólicos para um nome de dispositivo do Windows NT. No entanto, somente o nome de dispositivo MS-DOS sistema inicialmente atribuído ao dispositivo Windows NT interno permanece em for reinicializado. Portanto, é possível criar links simbólicos adicionais que atribuir várias letras de unidade a uma única unidade de CD-ROM, mas as letras de unidade adicionais somente permanecem até que o computador é desligado ou reiniciado.

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

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
programas Win32 podem criar e excluir links simbólicos chamando DefineDosDevice(). Para criar um vínculo simbólico, chame DefineDosDevice com o sinalizador DDD_RAW_TARGET_PATH. Para remover um vínculo simbólico, chamá-lo com os sinalizadores DDD_REMOVE_DEFINITION e DDD_RAW_TARGET_PATH. O programa de exemplo a seguir demonstra ambas essas 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

ID do artigo: 235128 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 4.1
A informação contida neste artigo aplica-se a:
  • Interface de Programação de Aplicativos do Microsoft Win32 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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