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

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)

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