ИНФОРМАЦИЯ: Имена устройств понимание и символические ссылки

Переводы статьи Переводы статьи
Код статьи: 235128 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Устройства, такие как жесткие диски, последовательных портов и параллельные порты имеют внутреннее имя устройства Windows NT и при необходимости может иметь имя устройства MS-DOS. Эти имена, находятся в пространстве имен диспетчера объектов Windows NT. А в Windows NT, сам и в режиме ядра драйверы NT имена устройств, программы Win32 необходимо использовать имена устройств MS-DOS. Имя устройства MS-DOS является символической ссылкой на базовом имя устройства NT. Статья описывает имена устройств, символические ссылки, и как создание и удаление символических ссылок программ Win32.

Дополнительная информация

Внутренние имена устройства NT

После загрузки драйвера устройства режима ядра программа его инициализации Регистрирует имя устройства с помощью диспетчера объектов Windows NT. Это имя называется имя устройства Windows NT. Компоненты ядра Windows NT и в режиме ядра драйверы ссылаться устройств по их именам устройств Windows NT. Эти имена имеют формат, например \Device\CDRom0 и \Device\Serial0, а также существуют в каталоге \device пространства имен диспетчера объектов.

Win32 программ нельзя использовать внутренние имена устройств Windows NT для устройства доступа, так как подсистема Win32 и Win32 API требуют более знакомую буквы дисков и имена устройств MS-DOS, например COM1 A:, C:,: и порт LPT1:. Несмотря на то, что программы Win32 не может использовать имена устройств Windows NT, они тем не менее, можно определить и удалить имена устройств MS-DOS для доступа к устройствам. Они также может получить внутреннее имя устройства Windows NT, связанный с именем устройства MS-DOS. Пример кода в разделе «Символические ссылки» данной статьи описывается, как это сделать.

Для получения лучшего понимания как отслеживает имен диспетчера объектов устройства и других системных объектов, пространства имен диспетчера объектов с помощью инструмента WinObj.exe можно просмотреть в пакете Platform SDK.

Имена устройств MS-DOS

Программы Win32 с помощью устройств, таких как диски, последовательных портов и параллельные порты по их именам устройств MS-DOS. Для дисков они буквы а: и C:. Для последовательных и параллельных портов это имена, такие как COM1:, COM2: и порт LPT1:. Как имена устройств Windows NT, эти имена находятся в пространстве имен диспетчера объектов, но в \ ГК каталог, который является видимым для программ пользовательского режима Win32.

Делает имена устройств MS-DOS отличаются от имен устройств Windows NT, что они не используются драйверы ядра и режима ядра Windows NT. Они используются, чтобы ссылаться на имена устройств Windows NT, таким образом, чтобы Win32 программы могут использовать знакомую буквы и имена устройств; Например, COM1:, для доступа к устройствам Windows NT. Таким образом имена устройств MS-DOS, называются «символические ссылки» для имен устройств Windows NT. То есть, имя устройства MS-DOS существует в объекте руководителя \ ГК каталог и указывает на имя устройства Windows NT в каталоге \device диспетчера объектов.

Каждое имя устройства MS-DOS можно указать более одного внутреннего устройства Windows NT. Однако несколько имен устройств MS-DOS могут указывать на одно устройство. Например хотя C: можно указывать только один раздел, его можно иметь несколько буквы дисков, такие как точка D:, E: и Z:, к тому же раздел.

Символические ссылки

Символические ссылки, созданные системой сохраняться перезагрузки компьютера так как они хранятся в реестре. Программы также могут создавать символические ссылки с помощью интерфейса API DefineDosDevice(). Эти ссылки действуют только до перезапуска или отключенным обновляются разделы реестра, содержащий сведения о ссылках на компьютер.

Может существовать несколько символьных ссылок на имя устройства Windows NT. Тем не менее только имя устройства MS-DOS, изначально присваивается внутреннее устройство Windows NT система остается через перезагружается. Таким образом можно создать дополнительные символьные ссылки, назначить несколько букв дисков для одного компакт-диска, но дополнительные буквы остаются только до перезапуска компьютера или отключить.

Win32 программы можно получить имя устройства Windows NT, связанный с определенным именем устройства MS-DOS путем вызова QueryDosDevice() с именем устройства MS-DOS. Ниже приведен пример кода, который показывает, как это сделать.
char szNtDeviceName[MAX_PATH];

if (QueryDosDevice ("C:", szNtDeviceName, MAX_PATH))
{
   printf ("C: is linked to %s\n", szNtDeviceName);
}
				
Можно создавать и удаление символических ссылок путем вызова программы Win32 DefineDosDevice(). Чтобы создать символическую ссылку, вызов DefineDosDevice с Флаг DDD_RAW_TARGET_PATH. Для удаления символической ссылки, вызвать его с Флаги DDD_REMOVE_DEFINITION и DDD_RAW_TARGET_PATH. Следующий пример Программа демонстрирует обе эти операции:
/*
   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);
   }

}
				

Свойства

Код статьи: 235128 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Win32 Application Programming Interface
Ключевые слова: 
kbinfo kbkernbase kbmt KB235128 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:235128

Отправить отзыв

 

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