RxChangeBufferingState 函式 (rxprocs.h)

系統會呼叫 RxChangeBufferingState 來處理緩衝狀態變更要求。

語法

NTSTATUS RxChangeBufferingState(
  PSRV_OPEN SrvOpen,
  PVOID     Context,
  BOOLEAN   ComputeNewState
);

參數

SrvOpen

要變更之SRV_OPEN數據結構的指標。

Context

要供網路迷你重新導向器回呼使用的內容參數指標。

ComputeNewState

值,指出是否要計算新的緩衝狀態。 當此值設定為 TRUE時,新的緩衝狀態會藉由呼叫網路迷你重新導向器來計算新的緩衝狀態來決定。 當這個值為 FALSE 時,新的緩衝狀態是由傳入 SrvOpen 結構之 的 BufferingFlags 成員所決定。

傳回值

RxChangeBufferingState 一律會傳回STATUS_SUCCESS此例程是否成功或發生錯誤。 如果發生錯誤,緩衝狀態會變更,因此不會啟用緩衝處理。

備註

如果此FCB (FCB_STATE_DISABLE_LOCAL_BUFFERING 的本機緩衝功能已設定於FCB) 的FcbState結構成員中,這會停用與FCB和任何默認緩衝選項上開啟模式無關的本機緩衝。 設定FCB_STATE_DISABLE_LOCAL_BUFFERING時, RxChangeBufferingState 所設定的新緩衝狀態將會停用所有緩衝處理。

如果 ComputeNewStateTRUE,則會呼叫網路迷你重新導向器導出的 MRxComputeNewBufferingState 例程,以計算要使用的新緩衝狀態。

如果以獨佔方式取得FCB, 且 ComputeNewStateFALSE。 然後 RxChangeBufferingState 會設定下列緩衝狀態選項:

  • FCB_STATE_WRITECACHING_ENABLED
  • FCB_STATE_FILESIZECACHEING_ENABLED
  • FCB_STATE_FILETIMECACHEING_ENABLED
  • FCB_STATE_WRITEBUFFERING_ENABLED
  • FCB_STATE_LOCK_BUFFERING_ENABLED
  • FCB_STATE_READBUFFERING_ENABLED
  • FCB_STATE_READCACHING_ENABLED
若要獨佔取得FCB,必須以下列任何值開啟FCB:
  • ShareAccess.SharedRead
  • ShareAccess.SharedWrite
  • ShareAccess.SharedDelete
RDBSS 目前不會使用數個可能的緩衝選項,因此當 RDBSS 使用 RxChangeBufferingState 設定這些選項時,RDBSS 會在內部忽略這些選項。 這些忽略的緩衝選項包括下列專案:
  • FCB_STATE_WRITEBUFFERING_ENABLED
  • FCB_STATE_READBUFFERING_ENABLED
  • FCB_STATE_OPENSHARING_ENABLED
  • FCB_STATE_COLLAPSING_ENABLED
  • FCB_STATE_FILESIZECACHEING_ENABLED
  • FCB_STATE_FILETIMECACHEING_ENABLED
如果FCB_STATE_WRITECACHING_ENABLED緩衝狀態變更為關閉,則會排清系統快取中的任何FCB。

RxChangeBufferingState 結束時,資源擁有權沒有任何變更。

規格需求

需求
目標平台 桌面
標頭 rxprocs.h (包括 Rxprocs.h、Struchdr.h、Fcb.h)
IRQL <= APC_LEVEL

另請參閱

RxIndicateChangeOfBufferingState

RxIndicateChangeOfBufferingStateForSrvOpen

SRV_OPEN結構