RX_CONTEXT和 IRP 管理
RX_CONTEXT 結構是 RDBSS 和網路迷你重新導向器用來管理 I/O 要求封包的其中一個基本資料結構, (IRP) 。 RX_CONTEXT 結構會在處理 IRP 時描述 IRP,並包含可讓全域資源在 IRP 完成時釋出的狀態資訊。 RX_CONTEXT資料結構會封裝 IRP 以供 RDBSS、網路迷你重新導向器和檔案系統使用。 RX_CONTEXT 結構包含單一 IRP 的指標,以及處理 IRP 所需的所有內容。
RX_CONTEXT 結構有時稱為 Windows 驅動程式套件中的 IRP 內容或 RxCoNtext (WDK) 標頭檔和其他資源,用於開發網路迷你重新導向器驅動程式。
RX_CONTEXT是一種資料結構,附加各種網路迷你重新導向器所提供的其他資訊。 從設計的觀點來看,此額外資訊可以透過數種方式之一來處理:
允許將內容指標定義為RX_CONTEXT的一部分,讓網路迷你重新導向器用來儲存其資訊。 這表示每次配置和終結RX_CONTEXT結構時,網路迷你重新導向器驅動程式都必須對包含其他網路迷你重新導向器資訊的記憶體區塊執行個別相關聯的配置或解構。 由於RX_CONTEXT結構會以大量方式建立和終結,因此從效能的觀點來看,這不是可接受的解決方案。
另一種方法是由每個網路迷你重新導向器預先指定的數量來配置每個RX_CONTEXT結構的大小,然後保留供迷你重新導向器使用。 這種方法可避免額外的配置和解構,但會使 RDBSS 中的管理程式碼RX_CONTEXT複雜。
第三種方法包含配置預先指定的區域,這適用于所有網路迷你重新導向器,作為每個RX_CONTEXT的一部分。 這是一個未格式化的區域,其中任何所需的結構都可以由各種網路迷你重新導向器加諸。 這類方法可克服與先前方法相關聯的缺點。 這是目前在 RDBSS 中實作的方法。
第三種方法是 RDBSS 所使用的配置。 因此,網路迷你重新導向器驅動程式的開發人員應該嘗試並定義相關聯的私人內容,以符合RX_CONTEXT資料結構中所定義的這個預先指定區域。 違反此規則的網路迷你重新導向器驅動程式將會產生顯著的效能負面影響。
網路迷你重新導向器所匯出的許多 RDBSS 常式和常式都會參考起始執行緒或常式所使用的某些其他執行緒中的RX_CONTEXT結構。 因此,系統會計算RX_CONTEXT結構,以管理其用於非同步作業的用途。 當參考計數變成零時,可以在最後一個取值作業上完成並釋放RX_CONTEXT結構。
RDBSS 提供一些常式,可用來操作RX_CONTEXT結構和相關聯的 IRP。 這些常式可用來配置、初始化和刪除RX_CONTEXT結構。 這些常式也可用來完成與RX_CONTEXT相關聯的 IRP,並設定RX_CONTEXT的取消常式。
下列常式會操作RX_CONTEXT結構:
常式傳回的值 | 描述 |
---|---|
此常式可用來完成與RX_CONTEXT結構相關聯的 IRP。 此常式是由 RDBSS 內部使用,不應由網路迷你重新導向器使用。 |
|
此常式可用來完成與RX_CONTEXT結構相關聯的 IRP。 此常式是由 RDBSS 內部使用,不應由網路迷你重新導向器使用。 |
|
這個常式會配置新的RX_CONTEXT結構,並初始化資料結構。 |
|
這個常式會取值RX_CONTEXT結構,如果參考計數變成零,則會解除配置,並從 RDBSS 記憶體內部資料結構中移除指定的RX_CONTEXT結構。 |
|
這個常式會初始化新配置的 RX_CONTEXT 結構。 |
|
此常式會重設先前所做的所有作業特定配置和取得,以準備RX_CONTEXT結構以供重複使用。 不會修改從 IRP 取得的參數。 此常式是由 RDBSS 內部使用,不應由網路迷你重新導向器使用。 |
|
此常式會在序列化的封鎖 I/O 佇列上喚醒下一個等候執行緒。 |
|
常式會為RX_CONTEXT結構設定網路迷你重新導向器取消常式。 |
|
__RxSynchronizeBlockingOperations | 此常式用來將封鎖 I/O 同步處理至相同的工作佇列。 RDBSS 會在內部使用此常式來同步具名管道作業。 此常式可由網路迷你重新導向器用來同步處理網路迷你重新導向器所維護之個別佇列上的作業。 常式僅適用于 Windows Server 2003。 |
__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock | 此常式用來將封鎖 I/O 同步處理至相同的工作佇列。 RDBSS 會在內部使用此常式來同步具名管道作業。 此常式可由網路迷你重新導向器用來同步處理網路迷你重新導向器所維護之個別佇列上的作業。 常式僅適用于 Windows XP 和 Windows 2000。 |
下列巨集定義于呼叫上表所列常式的 rxcontx.h 標頭檔中。 這些宏通常會使用,而不是直接呼叫這些常式。
巨集 | 描述 |
---|---|
RxSynchronizeBlockingOperations (RXCONTEXT,FCB,IOQUEUE) |
此宏會將封鎖 I/O 要求同步處理至相同的工作佇列。 在 Windows Server 2003 上,此宏會呼叫 __RxSynchronizeBlockingOperations 常式,並將 DropFcbLock 參數設定為 FALSE。 在 Windows XP 和 Windows 2000 上,此宏會呼叫 __RxSynchronizeBlockingOperationsMaybeDroppingFcbLock 常式,並將 DropFcbLock 參數設定為 FALSE。 |
RxSynchronizeBlockingOperations (RXCONTEXT,FCB,IOQUEUE) |
此宏會將封鎖 I/O 要求同步處理至相同的工作佇列。 在 Windows Server 2003 上,此宏會呼叫 __RxSynchronizeBlockingOperations 常式,並將 DropFcbLock 參數設定為 TRUE。 在 Windows XP 和 Windows 2000 上,此宏會呼叫 __RxSynchronizeBlockingOperationsMaybeDroppingFcbLock 常式,並將 DropFcbLock 參數設定為 TRUE。 |