В этом документе
http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx#paths
Чтобы сделать эти объекты устройств доступными для приложений Windows, драйверы устройств создают символическую ссылку (символическую ссылку) в пространстве имен Win32, «Global ??», на соответствующие им объекты устройства. Например, COM0 и COM1 под «Глобальным ??» подкаталог - это просто символические ссылки на Serial0 и Serial1, «C:» - символическая ссылка на HarddiskVolume1, «Physicaldrive0» - символическая ссылка на DR0 и т. д. Без символической ссылки указанное устройство «Xxx» не будет доступно ни одному приложению Windows, использующему соглашения о пространстве имен Win32, как описано ранее. Однако для этого устройства можно открыть дескриптор, используя любые API, которые поддерживают абсолютный путь к пространству имен NT в формате «\ Device \ Xxx».
Что такое API? Дайте мне знать некоторые такие функции, пожалуйста.
Например, у нас может быть устройство, находящееся в пространстве имен GLOBAL??
:
GLOBAL??\
COM227
Это устройство мы можем успешно открыть, используя CreateFile
:
//Note: we have to prefix it with \\.\ in order to tell CreateFile that
//we want to open something from the Global device namespace.
//Otherwise it will try to open a file
HANDLE hdev = CreateFile("\\.\COM227", GENERIC_READ, 0, null, OPEN_EXISTING, 0, 0);
if (hdev == INVALID_HANDLE_VALUE)
raise new EWin32Exception(GetLastError);
Это устройство (вместе со всеми другими устройствами в пространстве имен Win32 Global ?? ), фактически символическая ссылка на "настоящее" устройство:
GLOBAL??\
COM227 (SymbolicLink) ==> \Device\VCP0
Device\
VCP0 (Device)
Итак, мы пытаемся открыть это реальное устройство:
HANDLE hdev = CreateFile("\\.\Device\VCP0", GENERIC_READ, 0, null, OPEN_EXISTING, 0, 0);
if (hdev == INVALID_HANDLE_VALUE)
raise new EWin32Exception(GetLastError);
Но происходит ошибка с кодом ошибки 3 (система не может найти указанный файл).
Short:
- Работает :
COM227
(псевдоним \Device\VCP0
)
- Сбой :
\Device\VCP0
Проблема в том, что
Это означает, что CreateFile
является , а не одним из "API, которые поддерживают формат абсолютного пути пространства имен NT \ Device \ Xxx" .
Однако для этого устройства можно открыть дескриптор, используя любые API, которые поддерживают абсолютный путь к пространству имен NT в формате «\ Device \ Xxx».
Какие являются API?