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) 的 FcbState 结构成员中为此 FCB (FCB_STATE_DISABLE_LOCAL_BUFFERING 禁用本地缓冲,则会禁用独立于 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 当前不使用许多可能的缓冲选项,因此当使用 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缓冲状态更改为 off,则会刷新系统缓存中的任何 FCB。

退出 RxChangeBufferingState 时,资源所有权没有变化。

要求

要求
目标平台 桌面
标头 rxprocs.h (包括 Rxprocs.h、Struchdr.h、Fcb.h)
IRQL <= APC_LEVEL

另请参阅

RxIndicateChangeOfBufferingState

RxIndicateChangeOfBufferingStateForSrvOpen

SRV_OPEN结构