Управление таблицами префиксов
RDBSS определяет структуры данных, позволяющие использовать префиксные таблицы для каталогизации имен SRV_CALL, NET_ROOT и V_NET_ROOT.
Текущая реализация управления именами в RDBSS использует таблицу со следующими компонентами:
Очередь вставленных имен
Метка версии
Ресурс блокировки таблицы, управляющий доступом к таблице
Значение типа , указывающее, учитывается ли совпадение с именами без учета регистра.
Контейнер записей хэш-значений для этой таблицы префиксов
Ресурс блокировки таблицы используется обычным способом: общий доступ для операций поиска, эксклюзивный для операций изменения.
Метка версии изменяется с каждым изменением. Причина очереди заключается в том, что пакет таблицы префиксов позволяет выполнять перечисление нескольких вызывающих элементов одновременно. Очередь вставленных имен и метки версии позволяет одновременно выполнять перечисление нескольких вызывающих объектов. Очередь можно использовать для более быстрого поиска имен файлов, но таблица префиксов, безусловно, является правильным подходом для NET_ROOT структур.
Эти подпрограммы управления таблицами префиксов используются RDBSS внутренне в ответ на вызов из MUP для утверждения имени или формирования пути создания для структуры NET_ROOT. Эти подпрограммы управления таблицами префиксов RDBSS также могут использоваться сетевыми мини-перенаправлениями, если соответствующая блокировка будет получена перед доступом к таблице и блокировка будет снята после завершения работы. Обычное использование драйвером будет следующим:
Получите общую блокировку, вызвав RxAcquirePrefixTableLockShared.
Найдите имя, вызвав RxPrefixTableLookupName.
Освободите общую блокировку, вызвав RxReleasePrefixTableLock.
Обратите внимание, что некоторые подпрограммы реализуются только в Windows XP и предыдущих версиях Windows. RxPrefixTableLookupName — единственная подпрограмма управления таблицами префиксов, реализованная во всех версиях Windows.
Подпрограммы управления таблицами префикса RDBSS включают следующее:
Подпрограмма | Описание |
---|---|
Эта подпрограмма получает монопольную блокировку таблицы префиксов, используемой для каталогизации SRV_CALL и NET_ROOT имен. Эта подпрограмма доступна только в Windows XP и Windows 2000. Эта подпрограмма используется внутри RDBSS и не должна использоваться сетевыми мини-перенаправлениями. |
|
Эта подпрограмма получает общую блокировку таблицы префиксов, используемой для каталогизации имен SRV_CALL и NET_ROOT. Эта подпрограмма доступна только в Windows XP и Windows 2000. Эта подпрограмма используется внутри RDBSS и не должна использоваться сетевыми мини-перенаправлениями. |
|
Подпрограмма ищет имя в таблице префиксов, используемой для каталогизации SRV_CALL и NET_ROOT имен и преобразует базовый указатель в содержащую структуру. |
|
Эта подпрограмма снимает блокировку таблицы префиксов, используемой для каталогизации имен SRV_CALL и NET_ROOT. Эта подпрограмма доступна только в Windows XP и Windows 2000. Эта подпрограмма используется внутри RDBSS и не должна использоваться сетевыми мини-перенаправлениями. |
Начиная с Windows Server 2003 подпрограммы, упомянутые в предыдущей таблице, за исключением RxPrefixTableLookupName, заменяются макросами. Определены следующие макросы, которые вызывают подпрограммы таблицы префиксов с меньшим количеством параметров.
Макрос | Описание |
---|---|
RxAcquirePrefixTableLockExclusive (TABLE, WAIT) |
Этот макрос получает блокировку таблицы префиксов в монопольном режиме для операций изменения. |
RxAcquirePrefixTableLockShared (TABLE, WAIT) |
Этот макрос получает блокировку таблицы префикса в общем режиме для операций поиска. |
RxIsPrefixTableLockAcquired (TABLE) |
Этот макрос указывает, была ли блокировка таблицы префиксов получена в монопольном или общем режиме. |
RxIsPrefixTableLockExclusive (TABLE) |
Этот макрос указывает, была ли блокировка префиксной таблицы получена в монопольном режиме. |
RxReleasePrefixTableLock (TABLE) |
Этот макрос освобождает префиксную блокировку таблицы. |