Compartir a través de


Nombres de dispositivo MS-DOS locales y globales

Microsoft Windows 2000 y versiones posteriores del sistema operativo basado en Windows NT mantienen varias versiones del directorio DosDevices .

En estos sistemas operativos, hay un directorio \DosDevices global y varios directorios locales \DosDevices. El directorio global \DosDevices contiene los nombres de dispositivo MS-DOS que son visibles en todo el sistema. Un directorio local \DosDevices contiene nombres de dispositivo MS-DOS que solo son visibles en un contexto local determinado de DosDevices.

Los contextos locales de DosDevices son los siguientes.

  • En Windows XP y versiones posteriores, cada sesión de inicio de sesión tiene su propio contexto local de DosDevices . Los subprocesos del sistema y cualquier subproceso que se ejecuta como usuario localSystem, no se ejecutan en un contexto local de DosDevices .

  • En Windows 2000, cada sesión del servidor de terminal tiene su propio contexto local dosDevices . Cualquier subproceso que se ejecuta como parte de la sesión de consola no se ejecuta en un contexto local de DosDevices .

Cada subproceso tiene un contexto de DosDevices actual , que puede cambiar durante la vigencia de un subproceso . Se dice que un subproceso que no se ejecuta en un contexto de DosDevices local se ejecuta en el contexto global de DosDevices. Por lo tanto, la cuenta del sistema se ejecuta en el contexto global de DosDevices .

Si un subproceso se está ejecutando actualmente en un contexto de DosDevices local, los nombres de dispositivo MS-DOS que cree se crean solo en el directorio local DosDevices. Por lo tanto, los subprocesos que se ejecutan en un contexto local de DosDevices no pueden afectar a los nombres de dispositivo MS-DOS que son visibles para los subprocesos que se ejecutan en otro contexto local de DosDevices o en el contexto global de DosDevices . Por ejemplo, si un usuario de Windows XP o posterior monta una unidad de red como X:, esto no afecta al significado de X: para cualquier otro usuario o para el sistema en su conjunto.

En Windows XP y versiones posteriores, cuando el administrador de objetos busca un nombre en \DosDevices, primero busca en el directorio local \DosDevices y, a continuación, el directorio global \DosDevices . Si el nombre existe en ambos lugares, el nombre local sombrea el nombre global.

En Windows 2000, cada vez que se inicia una nueva sesión del servidor de terminal, el sistema compila el directorio local \DosDevices copiando el directorio global \DosDevices . Los cambios posteriores en el directorio global no se propagan al directorio local.

Un controlador que debe crear sus nombres de dispositivo MS-DOS en el directorio global \DosDevices puede hacerlo creando sus vínculos simbólicos en una rutina de controlador estándar que se garantiza que se ejecute en un contexto de subproceso del sistema, como DriverEntry. Como alternativa, el directorio global \DosDevices está disponible como \DosDevices\Global; los controladores pueden usar un nombre de \DosDevices\Global\DosDeviceName para especificar un nombre en el directorio global.

Tenga en cuenta que \DosDevices\Global no existe en plataformas que no admiten versiones locales y globales de \DosDevices, como Windows 98/Me. En el ejemplo de código siguiente se crea un vínculo simbólico global que funciona en Windows 98/Me, así como en los sistemas operativos Windows 2000 y versiones posteriores:

UNICODE_STRING deviceName; // Already initialized.
UNICODE_STRING symbolicLinkName; // Initializing below.
NTSTATUS status;

if (IoIsWdmVersionAvailable(1, 0x10)) {
    // We're on Windows 2000 or later, so we use \DosDevices\Global.
 
    RtlInitUnicodeString(&symbolicLinkName, L"\\DosDevices\\Global\\SymbolicLinkName");

} else {
    // Windows 98/Me.  We just use DosDevices.
 
    RtlInitUnicodeString(&symbolicLinkName, L"\\DosDevices\\SymbolicLinkName");
}

status = IoCreateSymbolicLink(&symbolicLinkName, &deviceName);
if (!NT_SUCCESS(status)) {
  /* Symbolic link creation failed.  Handle error appropriately. */
}

Un controlador puede crear nombres de dispositivo MS-DOS en directorios \DosDevices locales mediante la creación del vínculo simbólico en respuesta a un IOCTL. Cuando un subproceso de un contexto dosDevices local determinado envía el IOCTL, se llama a DispatchDeviceControl del controlador desde el contexto del subproceso actual.

Para obtener más información sobre el contexto en el que se ejecuta una rutina de controlador estándar, consulte Rutinas de distribución e IRQLs.

El sistema distingue los directorios locales \DosDevices de la siguiente manera:

  • En Windows XP y versiones posteriores, los directorios \DosDevices locales se identifican mediante authenticationID para el token de acceso de la sesión de inicio de sesión. Para obtener más información sobre AuthenticationID, consulte la descripción de la estructura de TOKEN_STATISTICS en la documentación del SDK de Microsoft Windows.

  • En Windows 2000, los directorios \DosDevices locales se identifican mediante sessionId para la sesión del servidor de terminal. Para obtener más información sobre SessionId, consulte la descripción de la estructura de WTS_SESSION_INFO en la documentación de Windows SDK.

Windows NT 4.0 Terminal Server Edition admite directorios \DosDevices locales de la misma manera que Windows 2000.