RxIndicateChangeOfBufferingStateForSrvOpen is called to register a change buffering state request (an oplock break indication, for example) for later processing. If the necessary preconditions are satisfied, the oplock is processed further.
VOID RxIndicateChangeOfBufferingStateForSrvOpen( PMRX_SRV_CALL SrvCall, PMRX_SRV_OPEN SrvOpen, PVOID SrvOpenKey, PVOID MRxContext );
A pointer to the SRV_CALL structure.
A pointer to the SRV_OPEN structure.
A pointer to the key for the SRV_OPEN key structure.
A pointer to the context to be passed back to the network mini-redirector during callbacks for processing the request.
This routine registers the change buffering state request by either inserting it in the registration list (DPC Level processing ) or the appropriate dispatcher/handler list.
This is an instance where in the buffering state change indications from the server use the key generated by the client (the SRV_OPEN address in itself is the best key that can be used). This implies that no further lookup is required.
However if this routine is called at DPC level, the indication is processed as if the lookup needs to be done.
If the resource for the FCB has already been acquired by this thread, the buffering state change indication is processed immediately without further delay. RxIndicateChangeOfBufferingStateForSrvOpen calls RxChangeBufferingState immediately in this case.
The internal routines called by this routine can fail because of a lack of available memory (unable to allocate non-paged pool memory, for example), but since this is a VOID routine no error is returned when this condition occurs.
If a buffering state request can be processed immediately instead of being queued for processing later, then RxChangeBufferingState can be called.