Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
RxRegisterMinirdr вызывается драйвером мини-перенаправления сети для регистрации драйвера в RDBSS, который добавляет сведения о регистрации во внутреннюю таблицу регистрации. RDBSS также создает объект устройства для мини-перенаправления сети.
Синтаксис
NTSTATUS RxRegisterMinirdr(
[out] OUT PRDBSS_DEVICE_OBJECT *DeviceObject,
[in, out] IN OUT PDRIVER_OBJECT DriverObject,
[in] IN PMINIRDR_DISPATCH MrdrDispatch,
[in] IN ULONG Controls,
[in] IN PUNICODE_STRING DeviceName,
[in] IN ULONG DeviceExtensionSize,
[in] IN DEVICE_TYPE DeviceType,
[in] IN ULONG DeviceCharacteristics
);
Параметры
[out] DeviceObject
Указатель на место хранения созданного объекта устройства.
[in, out] DriverObject
Указатель на объект драйвера сетевого мини-перенаправления. Каждый драйвер получает указатель на объект драйвера в параметре в подпрограмме DriverEntry . Этот объект драйвера будет использоваться для создания объекта устройства для драйвера мини-перенаправления сети.
[in] MrdrDispatch
Указатель на таблицу диспетчера для мини-перенаправления сети. Эта таблица диспетчера включает сведения о конфигурации для мини-перенаправления сети и таблицу указателей на подпрограммы обратного вызова, реализованные драйвером ядра мини-перенаправления сети. RDBSS выполняет вызовы драйвера мини-перенаправления сети через этот список подпрограмм обратного вызова.
[in] Controls
Набор параметров, определяющих возможности драйвера мини-перенаправления сети и способ обработки инициализации и кэширования таблицы имен для драйвера мини-перенаправления сети. Эти параметры могут включать любое сочетание следующих битов:
RX_REGISTERMINI_FLAG_DONT_PROVIDE_UNCS
Если этот флаг задан, он указывает, что мини-перенаправление сети не поддерживает имена UNC.
RX_REGISTERMINI_FLAG_DONT_PROVIDE_MAILSLOTS
Если этот флаг задан, он указывает, что мини-перенаправление сети не поддерживает почтовые ящики.
RX_REGISTERMINI_FLAG_DONT_INIT_DRIVER_DISPATCH
Если этот флаг задан, он указывает, что мини-перенаправление сети не требует RDBSS для инициализации точек входа драйвера диспетчера мини-перенаправления для указания на внутренние подпрограммы RDBSS. Этот вариант будет использоваться только в необычных обстоятельствах. Как правило, RDBSS устанавливает точки входа драйвера и быструю отправку ввода-вывода в объекте драйвера мини-перенаправления сети, чтобы указать на подпрограммы внутренние в RDBSS.
RX_REGISTERMINI_FLAG_DONT_INIT_PREFIX_N_SCAVENGER
Если этот флаг задан, он указывает, что мини-перенаправление сети не требует RDBSS для инициализации внутренней таблицы имен сети и структур данных scavenger для очистки этой таблицы имен. Этот параметр будет установлен для мини-перенаправления сети, который хочет обрабатывать кэширование для имен общих сетей, а не использовать средства RDBSS для кэширования имен и очистки.
[in] DeviceName
Указатель на буфер, содержащий строку Юникода без нуля, которая называет объект устройства. Строка должна быть полным именем пути. Этот параметр передается как DeviceName в подпрограмму IoCreateDevice rDBSS.
[in] DeviceExtensionSize
Размер, указанный драйвером мини-перенаправления для количества байтов, выделяемых для расширения устройства объекта устройства. Внутренняя структура расширения устройства определяется драйвером. Этот параметр добавляется к размеру расширения устройства, используемого RDBSS и передается в качестве параметра DeviceExtensionSize в подпрограмму IoCreateDevice rDBSS.
[in] DeviceType
Тип устройства, используемый при создании объекта устройства. Это указывает одну из системных констант FILE_DEVICE_XXX, указывающих тип устройства или определенное поставщиком значение для нового типа устройства. Обычно это значение будет FILE_DEVICE_NETWORK_FILE_SYSTEM для драйверов мини-перенаправления сети. Этот параметр передается как DeviceType в подпрограмму IoCreateDevice rDBSS.
[in] DeviceCharacteristics
Характеристики устройства, используемые при создании объекта устройства. Это указывает одну или несколько системных констант, объединенных вместе, которые предоставляют дополнительные сведения об устройстве драйвера. Это значение должно содержать FILE_REMOTE_DEVICE для драйверов мини-перенаправления сети, но это может быть объединено с другими характеристиками, такими как FILE_DEVICE_SECURE_OPEN. Этот параметр передается как DeviceCharacteristics в подпрограмму IoCreateDevice rDBSS.
Возвращаемое значение
RxRegisterMinirdr возвращает STATUS_SUCCESS при успешном выполнении или одно из следующих значений ошибок при сбое:
| Код возврата | Description |
|---|---|
|
Для создания объекта устройства недостаточно ресурсов. |
|
Недопустимый параметр был передан в подпрограмму. Эта ошибка будет возвращена, если параметр DeviceObject является указателем NULL . |
|
При попытке создать объект устройства произошло столкновение имен. |
|
Объект устройства с таким именем уже существует. |
|
Вызов для создания объекта устройства вернул объект устройства NULL . |
Замечания
Сетевой мини-перенаправление регистрируется в RDBSSS всякий раз, когда драйвер загружается ядром и отменяет регистрацию с помощью RDBSS при выгрузке драйвера. Не монолитный драйвер (мини-перенаправление сети SMB) взаимодействует с Rdbss.sys, другим драйвером ядра. Для драйвера мини-перенаправления сети монолитной сети, который статически связывается с Rdbsslib.lib, это просто вызов подпрограммы библиотеки Rdbsslib.lib .
Сетевой мини-перенаправление сообщает RDBSS, что он был загружен путем вызова RxRegisterMinirdr, подпрограммы регистрации, экспортированной из RDBSS. При первом запуске драйвера мини-перенаправления сети (в подпрограмме DriverEntry ) драйвер вызывает подпрограмму RDBSS RxRegisterMinirdr , чтобы зарегистрировать драйвер мини-перенаправления сети в RDBSS. На основе параметров, переданных в RxRegisterMinirdr, RDBSS вызывает IoCreateDevice для создания объекта устройства для драйвера мини-перенаправления сети.
В рамках этого процесса регистрации мини-перенаправление сети передает параметр rxRegisterMinirdr , который является указателем на большую структуру, MINIRDR_DISPATCH, которая содержит сведения о конфигурации для мини-перенаправления сети и таблицу диспетчеров указателей на подпрограммы обратного вызова, реализованные драйвером мини-перенаправления сети. Эти данные конфигурации используются для настройки внутренних таблиц RDBSSS для использования с этим мини-перенаправлением сети. RDBSS использует подпрограммы обратного вызова, передаваемые в этой структуре, для взаимодействия с мини-перенаправлением сети. Мини-перенаправление сети может реализовать только некоторые из этих подпрограмм обратного вызова. Любые подпрограммы обратного вызова, которые не реализованы, должны иметь указатель NULL в таблице отправки, переданной RDBSS. Только подпрограммы обратного вызова, реализованные мини-перенаправлением сети, будут вызываться RDBSS.
Обратите внимание, что подпрограмма RxRegisterMinirdr задает все подпрограммы отправки драйверов драйвера мини-перенаправления сети, чтобы указать на подпрограмму отправки RDBSS верхнего уровня RxFsdDispatch. Сетевой мини-перенаправление может переопределить это поведение, сохранив копию своих точек входа диспетчера драйвера, вызвав RxRegisterMinirdr, и перезаписи диспетчера драйвера с собственными точками входа после вызова RxRegisterMinirdr возвращается. Мини-перенаправление сети также может предотвратить копирование подпрограмм диспетчера драйвера подпрограммой RxRegisterMinirdr , если RX_REGISTERMINI_FLAG_DONT_INIT_DRIVER_DISPATCH бит задан в параметре Controls .
Если вызов RxRegisterMinirdr выполнен успешно, число членов в RDBSS_DEVICE_OBJECT, на которые указывает параметр DeviceObject , инициализируется, включая следующее:
- Для элемента dispatch задан параметр MrdrDispatch .
- Для элемента RegistrationControls задан параметр Controls .
- Для элемента DeviceName задан параметр DeviceName .
- Элемент RegisterUncProvider имеет значение TRUE , если RX_REGISTERMINI_FLAG_DONT_PROVIDE_UNCS бит в параметре Controls не задан.
- Элемент RegisterMailSlotProvider имеет значение TRUE , если RX_REGISTERMINI_FLAG_DONT_PROVIDE_MAILSLOTS бит в параметре Controls не задан.
- Для члена NetworkProviderPriority задан приоритет поставщика сети, который будет использоваться MUP.
- Структура элементов pRxNetNameTable инициализируется.
- Для элемента RxNetNameTableInDeviceObject.IsNetNameTable задано значение TRUE.
- Структура элементов pRdbssScavenger инициализируется.
Мини-перенаправление сети фактически не запускает операцию, пока она не получит вызов своей подпрограммы MRxStart , одной из подпрограмм обратного вызова, переданных в структуре MINIRDR_DISPATCH. Подпрограмма обратного вызова MrxStart должна быть реализована драйвером мини-перенаправления сети, если он хочет получать обратные вызовы для операций, если сетевой мини-перенаправление не сохраняет собственные точки входа диспетчера драйверов. В противном случае RDBSS будет разрешать только следующие пакеты запросов ввода-вывода через драйвер, пока mrxStart не будет успешно возвращен:
- Запросы IRP для операций создания устройства и операций устройства, в которых параметр FileObject->FileName.Length в IRPSP равен нулю, а параметр FileObject->RelatedFileObject имеет значение NULL.
Подпрограмма отправки RDBSS также завершится сбоем запросов для следующих пакетов запросов ввода-вывода:
- IRP_MJ_CREATE_MAILSLOT
- IRP_MJ_CREATE_NAMED_PIPE
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | Рабочий стол |
| Header | mrx.h (include Mrx.h) |
| IRQL | <= APC_LEVEL |