Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Структура RX_CONTEXT является одной из основных структур данных, используемых RDBSS и мини-перенаправлениями сети для управления пакетом запросов ввода-вывода (IRP). Структура RX_CONTEXT описывает IRP во время обработки и содержит сведения о состоянии, которые позволяют освободить глобальные ресурсы по мере завершения IRP. Структура данных RX_CONTEXT инкапсулирует IRP для использования RDBSS, сетевых мини-перенаправлений и файловой системы. Структура RX_CONTEXT включает указатель на один IRP и весь контекст, необходимый для обработки IRP.
Структура RX_CONTEXT иногда называется контекстом IRP или RxContext в файлах заголовков пакета драйверов Windows (WDK) и другими ресурсами, используемыми для разработки драйверов мини-перенаправления сети.
RX_CONTEXT — это структура данных, к которой подключены дополнительные сведения, предоставляемые различными сетевыми мини-перенаправлениями. С точки зрения разработки эти дополнительные сведения можно обрабатывать одним из нескольких способов:
Разрешить определять указатели контекста как часть RX_CONTEXT, которые сетевые мини-перенаправления используют для хранения информации. Это означает, что при каждом выделении и уничтожении структуры RX_CONTEXT драйвер мини-перенаправления сети должен выполнять отдельное выделение или уничтожение блока памяти, содержащего дополнительные сведения о мини-перенаправлении сети. Так как RX_CONTEXT структуры создаются и уничтожаются в больших количествах, это не приемлемое решение с точки зрения производительности.
Другой подход состоит в том, чтобы распределить размер каждой RX_CONTEXT структуры по предварительно заданному количеству для каждого мини-перенаправления сети, который затем зарезервирован для использования мини-перенаправлением. Такой подход позволяет избежать дополнительного выделения и уничтожения, но усложняет RX_CONTEXT код управления в RDBSS.
Третий подход состоит из выделения предварительно указанной области, которая одинакова для всех сетевых мини-перенаправлений в рамках каждой RX_CONTEXT. Это неформатированная область, поверх которой любая требуемая структура может быть введена различными мини-перенаправлениями сети. Такой подход преодолевает недостатки, связанные с предыдущими подходами. В настоящее время это подход, реализованный в RDBSS.
Третий подход — это схема, используемая RDBSS. Следовательно, разработчики мини-перенаправления сети должны попытаться определить связанный частный контекст, чтобы он соответствовал этой предварительно заданной области, определенной в структуре данных RX_CONTEXT. Драйверы мини-перенаправления сети, которые нарушают это правило, будут нести значительный штраф за производительность.
Многие подпрограммы и подпрограммы RDBSS, экспортированные мини-перенаправлением сети, ссылаются на RX_CONTEXT структуры в инициирующем потоке или в другом потоке, используемом подпрограммой. Таким образом, RX_CONTEXT структуры считаются ссылочными для управления их использованием для асинхронных операций. Когда число ссылок переходит к нулю, структура RX_CONTEXT может быть завершена и выпущена в последней операции разыменования.
RDBSS предоставляет ряд подпрограмм, которые используются для управления структурой RX_CONTEXT и соответствующим IRP. Эти подпрограммы используются для выделения, инициализации и удаления структуры RX_CONTEXT. Эти подпрограммы также используются для завершения IRP, связанного с RX_CONTEXT, и настройки подпрограммы отмены для RX_CONTEXT.
Следующие подпрограммы управляют структурами RX_CONTEXT:
| Рутина | Описание |
|---|---|
Эта подпрограмма используется для завершения IRP, связанного с структурой RX_CONTEXT. Эта подпрограмма используется внутри RDBSS и не должна использоваться сетевыми мини-перенаправлениями. |
|
Эта подпрограмма используется для завершения IRP, связанного с структурой RX_CONTEXT. Эта подпрограмма используется внутри RDBSS и не должна использоваться сетевыми мини-перенаправлениями. |
|
Эта подпрограмма выделяет новую RX_CONTEXT структуру и инициализирует структуру данных. |
|
Эта подпрограмма расшифровывает структуру RX_CONTEXT и если число ссылок переходит к нулю, то оно освобождает и удаляет указанную RX_CONTEXT структуру из структур данных RDBSS в памяти. |
|
Эта подпрограмма инициализирует только что выделенную RX_CONTEXT структуру. |
|
Эта подпрограмма подготавливает структуру RX_CONTEXT для повторного использования путем сброса всех выделенных операций и приобретений, сделанных ранее. Параметры, полученные из IRP, не изменяются. Эта подпрограмма используется внутри RDBSS и не должна использоваться сетевыми мини-перенаправлениями. |
|
Эта подпрограмма просыпается в следующем потоке ожидания( при наличии) в сериализованной очереди ввода-вывода. |
|
Подпрограмма настраивает подпрограмму отмены мини-перенаправления сети для структуры RX_CONTEXT. |
|
| __RxSynchronizeBlockingOperations | Эта подпрограмма используется для синхронизации блокировки ввода-вывода в ту же рабочую очередь. Эта подпрограмма используется внутри RDBSS для синхронизации именованных операций канала. Эта подпрограмма может использоваться мини-перенаправлением сети для синхронизации операций с отдельной очередью, поддерживаемой мини-перенаправлением сети. Подпрограмма доступна только в Windows Server 2003. |
| __RxSynchronizeBlockingOperationsMaybeDroppingFcbLock | Эта подпрограмма используется для синхронизации блокировки ввода-вывода в ту же рабочую очередь. Эта подпрограмма используется внутри RDBSS для синхронизации именованных операций канала. Эта подпрограмма может использоваться мини-перенаправлением сети для синхронизации операций с отдельной очередью, поддерживаемой мини-перенаправлением сети. Подпрограмма доступна только в Windows XP и Windows 2000. |
Следующие макросы определены в файле заголовка rxcontx.h , который вызывает подпрограммы, перечисленные в предыдущей таблице. Эти макросы обычно используются вместо прямого вызова этих подпрограмм.
| Макрос | Описание |
|---|---|
RxSynchronizeBlockingOperations(RXCONTEXT,FCB,IOQUEUE) |
Этот макрос синхронизирует блокирующие запросы ввода-вывода в ту же рабочую очередь. В Windows Server 2003 этот макрос вызывает подпрограмму __RxSynchronizeBlockingOperations с параметром DropFcbLock значение FALSE. В Windows XP и Windows 2000 этот макрос вызывает подпрограмму __RxSynchronizeBlockingOperationsMaybeDroppingFcbLock с параметром DropFcbLock значение FALSE. |
RxSynchronizeBlockingOperations(RXCONTEXT,FCB,IOQUEUE) |
Этот макрос синхронизирует блокирующие запросы ввода-вывода в ту же рабочую очередь. В Windows Server 2003 этот макрос вызывает подпрограмму __RxSynchronizeBlockingOperations с параметром DropFcbLock значение TRUE. В Windows XP и Windows 2000 этот макрос вызывает подпрограмму __RxSynchronizeBlockingOperationsMaybeDroppingFcbLock с параметром DropFcbLock значение TRUE. |