Поделиться через


Управление таблицами префиксов

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 включают следующее:

Подпрограмма Описание

RxpAcquirePrefixTableLockExclusive

Эта подпрограмма получает монопольную блокировку таблицы префиксов, используемой для каталогизации SRV_CALL и NET_ROOT имен.

Эта подпрограмма доступна только в Windows XP и Windows 2000. Эта подпрограмма используется внутри RDBSS и не должна использоваться сетевыми мини-перенаправлениями.

RxpAcquirePrefixTableLockShared

Эта подпрограмма получает общую блокировку таблицы префиксов, используемой для каталогизации имен SRV_CALL и NET_ROOT.

Эта подпрограмма доступна только в Windows XP и Windows 2000. Эта подпрограмма используется внутри RDBSS и не должна использоваться сетевыми мини-перенаправлениями.

RxPrefixTableLookupName

Подпрограмма ищет имя в таблице префиксов, используемой для каталогизации SRV_CALL и NET_ROOT имен и преобразует базовый указатель в содержащую структуру.

RxpReleasePrefixTableLock

Эта подпрограмма снимает блокировку таблицы префиксов, используемой для каталогизации имен 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)

Этот макрос освобождает префиксную блокировку таблицы.