INFO: Understanding Gerätenamen und symbolische Verknüpfungen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 235128 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Geräte wie Festplatten, seriellen Anschlüsse und parallele Anschlüsse eine interne Windows NT-Gerätename besitzen und optional können verfügen über ein MS-DOS-Gerätename. Diese Namen befinden sich in der Windows NT-Objekt-Manager-Namespace. Während Windows NT selbst und Treiber im Kernelmodus NT Gerätenamen verwenden, müssen die Win32-Programme die MS-DOS-Gerätenamen verwenden. Der MS-DOS-Gerätename ist eine symbolische Verknüpfung zu der zugrunde liegenden NT-Gerätename. Dieser Artikel beschreibt Gerätenamen, symbolische Verknüpfungen und wie Win32-Programme erstellen und Entfernen von symbolische Verknüpfungen.

Weitere Informationen

Interner NT-Gerätenamen

Wenn ein Kernelmodus-Gerätetreiber geladen wird, registriert seinen Initialisierungsroutine ein Gerät mit Windows NT-Objekt-Manager. Dieser Name wird der Windows NT-Gerätename bezeichnet. Kernelmodus-Komponenten von Windows NT und Kernelmodus-Treiber verweisen Geräte, indem Sie Ihre Windows NT-Gerätenamen. Diese Namen haben ein Format, wie z. B. \Device\CDRom0 und \Device\Serial0 und auch in das Verzeichnis \device der Objekt-Manager-Namespace vorhanden sind.

Win32-Programme können nicht interne Windows NT-Gerätenamen zu Zugriff-Geräten verwenden, da die Win32-Subsystem und Win32-API die vertrauter Laufwerkbuchstaben und MS-DOS-Gerätenamen, z. B. A:, C:, COM1 erfordern:, und LPT1:. Obwohl Win32-Programme Windows NT-Gerätenamen nicht verwenden können, können Sie jedoch, definieren und MS-DOS-Gerätenamen auf Geräte zu entfernen. Sie können auch interne Windows NT Gerät zugeordnete Name ein MS-DOS-Gerätename abrufen. Der Beispielcode im Abschnitt "Symbolischen Links" in diesem Artikel beschreibt, wie dazu.

Um ein besseres Verständnis der wie der Objekt-Manager Namen für Geräte und andere Systemobjekte überwacht zu erhalten, können Sie den Objekt-Manager-Namespace mit dem Tool WinObj.exe im Platform SDK anzeigen.

MS-DOS-Gerätenamen

Win32-Programme werden Geräte wie Laufwerke, seriellen Anschlüsse und parallele Ports über die MS-DOS-Gerätenamen verwenden. Für Laufwerke sind diese Laufwerkbuchstaben wie A: und c. Für serielle und parallele Anschlüsse sind diese Namen wie COM1:, COM2:, und LPT1:. Wie Windows NT-Gerätenamen, diese Namen in befinden der Objekt-Manager-Namespace, aber in der \?? Verzeichnis für Win32-Programmen im Benutzermodus sichtbar ist.

Was MS-DOS-Gerätenamen aus Windows NT-Gerätenamen Unterschied besteht darin, dass Sie nicht durch die Windows NT-Kernel oder Kernelmodus-Treiber verwendet werden. Deren Zweck ist, auf Windows NT-Gerätenamen damit Win32-Programme, die vertraute Laufwerkbuchstaben und Gerätenamen verwenden können; z. B. COM1:, um die Windows NT-Geräte zugreifen. MS-DOS-Gerätenamen sind deshalb "symbolische Verknüpfungen", um Windows NT-Gerätenamen aufgerufen. D. h., ein MS-DOS-Gerätename ist in der Objekt-Manager des vorhanden \?? Verzeichnis und verweist auf ein Windows NT-Gerätename in der Objekt-Manager \device Verzeichnis.

Jedes MS-DOS-Gerätename kann auf höchstens eine interne Windows NT Geräte zeigen. Allerdings können mehrere MS-DOS-Gerätenamen auf ein einzelnes Gerät zeigen. Beispielsweise, während c nur auf eine einzelne Partition zeigen können, ist es möglich, zwei oder mehr Laufwerkbuchstaben wie D:, E: und Z:, zeigen Sie auf der gleichen Partition.

Symbolic links (Symbolische Verknüpfungen)

Symbolische Verknüpfungen vom System erstellten beibehalten über Computer wird neu gestartet, da Sie in der Registrierung gespeichert werden. Programme können ebenfalls symbolische Verknüpfungen mit der DefineDosDevice()-API erstellen. Diese Verknüpfungen sind gültig, nur, bis der Computer neu gestartet oder deaktiviert, bis die Registrierungsschlüssel mit Informationen über die Verknüpfungen aktualisiert werden.

Es sind mehrere symbolische Verknüpfungen zu einer Windows NT-Gerätename. Nur der MS-DOS-Gerätename, die das System, das interne Windows NT-Gerät ursprünglich zugewiesen wurde über bleibt jedoch Neustarts. Daher, es ist möglich, zusätzliche symbolische Verknüpfungen zu erstellen, die einzelnen CD-ROM-Laufwerk mehrere Laufwerkbuchstaben zuweisen, aber die zusätzliche Laufwerkbuchstaben nur bleiben, bis der Computer ausgeschaltet oder neu gestartet.

Win32-Programme können der Windows NT-Gerätename abrufen, die einen bestimmten MS-DOS-Gerätenamen durch Aufrufen von QueryDosDevice() mit MS-DOS-Gerätenamen zugeordnet ist. Folgenden ist Beispielcode, der dazu, wie werden:
char szNtDeviceName[MAX_PATH];

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
können Win32-Programme erstellen und symbolische Verknüpfungen durch Aufrufen von DefineDosDevice() löschen. Rufen Sie DefineDosDevice mit DDD_RAW_TARGET_PATH-Flag, um eine symbolische Verknüpfung zu erstellen. Um eine symbolische Verknüpfung zu entfernen, rufen Sie es mit den Flags DDD_REMOVE_DEFINITION und DDD_RAW_TARGET_PATH. Das folgende Beispielprogramm veranschaulicht beide dieser Operationen:
/*
   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);
   }

}
				

Eigenschaften

Artikel-ID: 235128 - Geändert am: Dienstag, 21. November 2006 - Version: 4.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Win32 Application Programming Interface, wenn verwendet mit:
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Keywords: 
kbmt kbinfo kbkernbase KB235128 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 235128
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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