Definieren eines MS-DOS-Gerätenamens

Ein MS-DOS-Gerätename ist eine Verbindung, die auf den Pfad eines MS-DOS-Geräts verweist. Diese Verbindungen bilden den MS-DOS-Gerätenamespace. Rufen Sie die Funktionen DefineDosDevice und SetVolumeMountPoint auf, um diese Verbindungen zu erstellen und zu ändern. DeleteVolumeMountPoint löscht eine verbindung, die von SetVolumeMountPoint erstellt wurde, und DefineDosDevice löscht die erstellten Verbindungen.

Nachdem ein MS-DOS-Gerätename definiert wurde, bleibt er für alle Prozesse sichtbar.

  • Alle MS-DOS-Geräte werden von Windows über eine Authentifizierungs-ID identifiziert. Eine Authentifizierungs-ID ist die LUID (lokal eindeutiger Bezeichner), die jeder Anmeldesitzung bei der Erstellung zugeordnet ist.
  • Die Sichtbarkeit eines MS-DOS-Gerätenamens wird entweder als global oder lokal kategorisiert und als solcher definiert, indem er in die Namespaces "Global MS-DOS Device" und "Local MS-DOS Device" aufgenommen wird. Auf den Inhalt von MS-DOS-Geräten im globalen Namespace kann von allen Benutzern zugegriffen werden, und auf den Inhalt von MS-DOS-Geräten im lokalen Namespace kann nur der Benutzer zugreifen, dessen Zugriffstoken die AuthenticationID enthält, die diesem lokalen MS-DOS-Gerätenamespace zugeordnet ist.

Mehrere lokale MS-DOS-Gerätenamespaces und nur ein globaler MS-DOS-Gerätenamespace können gleichzeitig und auf einem Computer vorhanden sein.

Beachten Sie, dass nur im LocalSystem-Kontext ausgeführte Prozesse DefineDosDevice aufrufen können, um ein MS-DOS-Gerät im globalen MS-DOS-Gerätenamespace zu erstellen. Außerdem wird der lokale MS-DOS-Gerätenamespace, der einer bestimmten AuthenticationID entspricht, gelöscht, wenn der letzte Verweis auf diese AuthenticationID entfernt wird.

Wenn Ihr Code einen vorhandenen MS-DOS-Gerätenamen durch Aufruf von QueryDosDevice abfragt, durchsucht er zuerst den Namespace "Lokales MS-DOS-Gerät". Wenn sie dort nicht gefunden wird, durchsucht die Funktion dann den Global MS-DOS Device-Namespace. Wenn Ihr Code alle vorhandenen MS-DOS-Gerätenamen über diese Funktion abfragt, hängt die Liste der zurückgegebenen Namen davon ab, ob sie im LocalSystem-Kontext ausgeführt wird. Wenn ja, werden nur die MS-DOS-Gerätenamen zurückgegeben, die im globalen MS-DOS-Gerätenamespace enthalten sind. Andernfalls wird eine Verkettung der Gerätenamen im globalen und lokalen MS-DOS-Gerätenamespace zurückgegeben. Wenn in beiden Namespaces ein Gerätename vorhanden ist, gibt QueryDosDevice den Eintrag im Namespace Local MS-DOS Device zurück. Dies gilt auch für die Liste aller MS-DOS-Gerätenamen, die von GetLogicalDrives und GetLogicalDriveStrings zurückgegeben werden.

Beachten Sie, dass das folgende Szenario auftreten kann:

  1. Benutzer A, der nicht im LocalSystem-Kontext ausgeführt wird, erstellt einen Gerätenamen im entsprechenden Lokalen MS-DOS-Gerätenamespace, und dieser Gerätename ist im globalen MS-DOS-Gerätenamespace nicht vorhanden.
  2. Benutzer B, der im LocalSystem-Kontext ausgeführt wird, erstellt denselben Gerätenamen im Global MS-DOS Device Namespace.

In diesem Szenario hat Benutzer A keinen Zugriff auf den Gerätenamen im globalen MS-DOS-Gerätenamespace, bis er den Gerätenamen in seinem lokalen MS-DOS-Gerätenamespace entfernt oder umbenennt. Um die Wahrscheinlichkeit dieses Szenarios zu verringern, sollten MS-DOS-Laufwerkbuchstaben im Global MS-DOS Device Namespace zugeordnet werden, beginnend mit C: und enden mit Z:. Diese Sequenz sollte für die Zuordnung von MS-DOS-Laufwerkbuchstaben im Namespace "Lokales MS-DOS-Gerät" umgekehrt werden.

Wenn Sie nicht im LocalSystem-Kontext ausgeführt werden, können Sie mit DefineDosDevice keinen Gerätenamen im Namespace "Lokales MS-DOS-Gerät" definieren, wenn dieser Gerätename bereits in Ihren lokalen oder globalen MS-DOS-Gerätenamespaces vorhanden ist. Rufen Sie QueryDosDevice auf, bevor Sie DefineDosDevice aufrufen, um zu bestimmen, ob der zu definierende Gerätename in Ihren MS-DOS-Gerätenamespaces vorhanden ist.

Benennen von Dateien, Pfaden und Namespaces