INFORMAZIONI: Nomi di informazioni sulle periferiche e i collegamenti simbolici

Traduzione articoli Traduzione articoli
Identificativo articolo: 235128 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Periferiche come dischi rigidi, le porte seriali e le porte parallele nome periferica interno Windows e possono facoltativamente dispongono di un nome di periferica MS-DOS. Questi nomi si trovano in spazio dei nomi della gestione di oggetti di Windows NT. Sebbene Windows NT se stesso e i driver in modalitÓ kernel consente di utilizzare nomi di periferica NT, Ŕ necessario che programmi Win32 utilizzare i nomi di periferica di MS-DOS. Il nome di periferica MS-DOS Ŕ un collegamento simbolico al nome di periferica NT sottostante. In questo articolo viene descritto i nomi delle periferiche, i collegamenti simbolici e come creare e rimuovere i collegamenti simbolici programmi Win32.

Informazioni

Nomi di periferica NT interni

Quando viene caricato un driver di periferica in modalitÓ kernel, la routine di inizializzazione registra un nome di periferica con Windows NT Object Manager. Questo nome Ŕ detto il nome di periferica di Windows NT. I componenti di modalitÓ kernel di Windows e driver in modalitÓ kernel fare riferimento a periferiche tramite i nomi di periferica di Windows NT. Questi nomi con un formato di file, ad esempio \Device\CDRom0 e \Device\Serial0 e inoltre esistono nella directory \device dello spazio dei nomi del gestore di oggetti.

Programmi Win32 non possono utilizzare interni nomi periferica di Windows NT periferiche di accesso poichÚ il sottosistema Win32 e API Win32 richiedono pi¨ familiare lettere di unitÓ e i nomi di periferica di MS-DOS, ad esempio COM1 A:, C:,: e da LPT1:. Anche se programmi Win32 non possono utilizzare nomi di periferica Windows NT, Ŕ possibile, tuttavia, definire e rimuovere nomi di periferica MS-DOS per accedere ai dispositivi. ╚ inoltre possibile recuperare il nome periferica interno di Windows NT associato con un nome di periferica MS-DOS. Il codice di esempio nella sezione "Collegamenti simbolici" di questo articolo viene descritto come eseguire questa operazione.

Per ottenere una migliore comprensione di come il gestore di oggetti tiene traccia dei nomi alle periferiche e altri oggetti di sistema, Ŕ possibile visualizzare spazio dei nomi del gestore di oggetti con lo strumento WinObj.exe in Platform SDK.

Nomi di periferica MS-DOS

Programmi Win32 utilizzano periferiche quali unitÓ, le porte seriali e le porte parallele tramite i nomi di periferica MS-DOS. Per le unitÓ disco, queste sono le lettere di unitÓ A: e C:. Per le porte parallele e seriali sono nomi come COM1:, COM2: e da LPT1:. Come nomi di periferica Windows NT, questi nomi risiedono in spazio dei nomi del gestore di oggetti, ma nel \?? Directory, che Ŕ visibile a programmi Win32 in modalitÓ utente.

Ci˛ che rende nomi di periferica MS-DOS diversi da nomi di periferica di Windows NT, si Ŕ che non vengano utilizzati dai driver del kernel o modalitÓ kernel di Windows NT. Lo scopo Ŕ fare riferimento ai nomi di periferica di Windows in modo che programmi Win32 possano utilizzare le lettere di unitÓ familiare e i nomi di periferica, ad esempio, COM1:, per le periferiche di Windows NT di accedere. Di conseguenza, nomi di periferica MS-DOS sono denominati "collegamenti simbolici" ai nomi di periferica di Windows NT. Un nome di periferica di MS-DOS esiste nel gestore di oggetti del \?? Directory e punta a un nome di periferica di Windows NT nella directory \device del gestore di oggetti.

Ogni nome di periferica MS-DOS pu˛ puntare al massimo una interna Windows periferica. Tuttavia, pi¨ nomi di periferica MS-DOS possono puntare a una singola periferica. Ad esempio, mentre C: solo pu˛ puntare a una singola partizione, Ŕ possibile avere due o pi¨ lettere di unitÓ, ad esempio D:, E: e Z:, il punto di nella stessa partizione.

Collegamenti simbolici

I collegamenti simbolici creati dal sistema di mantenere riavvio del computer, poichÚ questi vengono memorizzati nel Registro di sistema. Programmi possono inoltre creare collegamenti simbolici con l'API DefineDosDevice(). Questi collegamenti sono validi solo fino a quando il computer viene riavviato o disattivato, a meno che le chiavi di registro contenente informazioni per i collegamenti vengano aggiornate.

Possono essere presenti pi¨ collegamenti simbolici e un nome di periferica di Windows NT. Tuttavia, solo il nome di periferica MS-DOS che viene inizialmente assegnata alla periferica Windows interna rimane su Riavvia. Di conseguenza, se si Ŕ possibile creare ulteriori collegamenti simbolici che assegnano pi¨ lettere di unitÓ a una singola unitÓ CD-ROM, ma la lettere di unitÓ aggiuntive rimangono solo fino a quando il computer viene disattivato o riavviato.

Programmi Win32 Ŕ possono recuperare il nome di periferica di Windows NT Ŕ associato un nome di periferica MS-DOS specifico da QueryDosDevice() chiamata con il nome di periferica MS-DOS. Seguito Ŕ riportato esempio di codice viene illustrato come eseguire questa operazione:
char szNtDeviceName[MAX_PATH];

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
programmi Win32 possono creare e chiamare DefineDosDevice() per eliminare i collegamenti simbolici. Per creare un collegamento simbolico, Ŕ necessario chiamare DefineDosDevice con il flag DDD_RAW_TARGET_PATH. Per rimuovere un collegamento simbolico, Ŕ necessario chiamarlo con i flag DDD_REMOVE_DEFINITION e DDD_RAW_TARGET_PATH. Nel esempio programma riportato di seguito viene illustrato entrambe queste operazioni:
/*
   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);
   }

}
				

ProprietÓ

Identificativo articolo: 235128 - Ultima modifica: martedý 21 novembre 2006 - Revisione: 4.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Win32 Application Programming Interfaceáalle seguenti piattaforme
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Chiavi:á
kbmt kbinfo kbkernbase KB235128 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 235128
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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