Routines Provided by RDBSS

The following routines are exported by RDBSS.

Routine Description

RxAcquireExclusiveFcbResourceInMRx

This resource acquisition routine acquires the File Control Block (FCB) resource in exclusive mode. This routine will wait for the FCB resource to be free, so this routine does not return control until the resource has been acquired. This routine acquires the FCB resource even if the RX_CONTEXT associated with this FCB has been canceled.

RxAcquireSharedFcbResourceInMRx

This resource acquisition routine acquires the FCB resource in shared mode. This routine will wait for the FCB resource to be free if it was previously acquired exclusively, so this routine does not return control until the resource has been acquired. This routine acquires the FCB resource even if the RX_CONTEXT associated with this FCB has been canceled.

RxAcquireSharedFcbResourceInMRxEx

This resource acquisition routine acquires the FCB resource in shared mode. This routine will wait for the FCB resource to be freed if it was previously acquired exclusively. This routine does not return control until the resource has been acquired. This routine acquires the FCB resource even if the RX_CONTEXT associated with this FCB has been canceled.

This routine is only available on Windows Server 2003 Service Pack 1 (SP1) and later.

RxAssert

This routine sends an assert string in RDBSS checked builds to a kernel debugger if one is installed.

RxAssociateContextWithMid

This routine associates the supplied opaque context with an available multiplex ID (MID) from a MID_ATLAS data structure.

RxCancelTimerRequest

This routine cancels a timer request. The request to be canceled is identified by the routine and context.

RxCeAllocateIrpWithMDL

This routine allocates an IRP for use by the connection engine and associates an MDL with the IRP.

This routine is only available on Windows XP.

RxCeBuildAddress

This routine associates a transport address with a transport binding.

RxCeBuildConnection

This routine establishes a connection between a local RDBSS connection address and a given remote address. This routine should be called in the context of a system worker thread.

RxCeBuildConnectionOverMultipleTransports

This routine establishes a connection between a local RDBSS connection address and a given remote address and supports multiple transports. A set of local addresses are specified and this routine attempts to connect to the target server using all of the transports associated with the local addresses. One connection is chosen as the winner depending on the connection options. This routine must be called in the context of a system worker thread.

RxCeBuildTransport

This routine binds an RDBSS transport to a specified transport name.

RxCeBuildVC

This routine adds a virtual circuit to a specified connection.

RxCeCancelConnectRequest

This routine cancels a previously issued connection request.

Note that this routine is not currently implemented.

RxCeFreeIrp

This routine frees an IRP used by the connection engine.

This routine is only available on Windows XP.

RxCeInitiateVCDisconnect

This routine initiates a disconnect on the virtual circuit. This routine must be called in the context of a system worker thread.

RxCeQueryAdapterStatus

This routine returns the ADAPTER_STATUS structure for a given transport.

RxCeQueryInformation

This routine queries for information about a given virtual circuit.

RxCeQueryTransportInformation

This routine queries a given transport for information about the connection count and quality of service.

RxCeSend

This routine sends a transport service data unit (TSDU) along the specified connection on a virtual circuit.

RxCeSendDatagram

This routine sends a TSDU to a specified transport address.

RxCeTearDownAddress

This routine removes a transport address from a transport binding.

RxCeTearDownConnection

This routine tears down a given connection.

RxCeTearDownTransport

This routine unbinds from the transport specified.

RxCeTearDownVC

This routine tears down a virtual connection.

RxChangeBufferingState

This routine is called to process a buffering state change request.

RxCompleteRequest

This routine is used to complete an IRP associated with an RX_CONTEXT structure. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxCompleteRequest_Real

This routine is used to complete an IRP associated with an RX_CONTEXT structure. This routine should not be used by network mini-redirectors.

RxCreateMidAtlas

This routine allocates a new instance of a MID_ATLAS data structure and initializes it. RDBSS uses the multiplex ID (MID) defined in this data structure as a way that both the network client (mini-redirector) and the server can distinguish between the concurrently active requests on any connection.

RxCreateNetFcb

This routine allocates, initializes, and inserts a new FCB structure into the in-memory data structures for a NET_ROOT structure on which this FCB is opened. The structure allocated has space for a SRV_OPEN and an FOBX structure. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxCreateNetFobx

This routine allocates, initializes, and inserts a new file object extension (FOBX) structure. Network mini-redirectors should call this routine to create an FOBX at the end of a successful create operation.

RxCreateNetRoot

This routine builds a node representing a NET_ROOT structure and inserts the name into the net name table on the associated device object. This routine is used internally by RDBSS and should not be used by network mini-redirectors.

RxCreateRxContext

This routine allocates a new RX_CONTEXT structure and initializes the data structure.

RxCreateSrvCall

This routine builds a node that represents a server call context and inserts the name into the net name table maintained by RDBSS. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxCreateSrvOpen

This routine allocates, initializes, and inserts a new SRV_OPEN structure into the in-memory data structures used by RDBSS. If a new structure has to be allocated, it has space for an FOBX structure. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxCreateVNetRoot

This routine builds a node that represents a V_NET_ROOT structure and inserts the name into the net name table. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxDbgBreakPoint

This routine raises an exception that is handled by the kernel debugger if one is installed; otherwise, it is handled by the debug system.

RxDereference

This routine decrements the reference count on an instance of several of the reference-counted data structures used by RDBSS.

RxDereferenceAndDeleteRxContext_Real

This routine dereferences an RX_CONTEXT structure and if the reference count goes to zero, then it deallocates and removes the specified RX_CONTEXT structure from the RDBSS in-memory data structures.

RxDestroyMidAtlas

This routine destroys an existing instance of a MID_ATLAS data structure and frees the memory allocated.

RxDispatchToWorkerThread

This routine invokes a routine in the context of a worker thread.

RxDriverEntry

This routine is called by a monolithic network mini-redirector driver from its DriverEntry to initialize RDBSS.

For non-monolithic drivers, this initialization routine is equivalent to the DriverEntry routine of the rdbss.sys device driver.

RxFinalizeConnection

This routine deletes a connection to a share. Any files open on the connection are closed depending on the level of force specified. The network mini-redirector might choose to keep the transport connection open for performance reasons, unless some option is specified to force a close of connection.

RxFinalizeNetFcb

This routine finalizes the given FCB structure. The caller must have an exclusive lock on the NET_ROOT structure associated with FCB. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxFinalizeNetFobx

This routine finalizes the given FOBX structure. The caller must have an exclusive lock on the FCB associated with this FOBX. This routine is used internally by RDBSS and should not be used by network mini-redirectors.

RxFinalizeNetRoot

This routine finalizes the given NET_ROOT structure. The caller should have exclusive access to the lock on the NetName table of the device object associated with this NET_ROOT structure (through the SRV_CALL structure). This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxFinalizeSrvCall

This routine finalizes the given SRV_CALL structure. The caller should have exclusive access to the lock on the NetName table of the device object associated with this SRV_CALL structure. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxFinalizeSrvOpen

This routine finalizes the given SRV_OPEN structure. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxFinalizeVNetRoot

This routine finalizes the given V_NET_ROOT structure. The caller must have exclusive access to the lock on the NetName table of the device object associated with this V_NET_ROOT structure. This routine is used internally by RDBSS and should not be used by network mini-redirectors.

RxFinishFcbInitialization

This routine is used to finish initializing an FCB after the successful completion of a create operation by the network mini-redirector.

RxForceFinalizeAllVNetRoots

This routine force finalizes all of the V_NET_ROOT structures associated with a given NET_ROOT structure. The caller must have exclusive access to the lock on the NetName table of the device object associated with this V_NET_ROOT structure. This routine is used internally by RDBSS and should not be used by network mini-redirectors.

RxFsdDispatch

This routine implements the file system driver (FSD) dispatch for RDBSS to process an I/O request packet (IRP). This routine is called by a network mini-redirector in the driver dispatch routines to initiate RDBSS processing of a request.

RxFsdPostRequest

This routine queues the I/O request packet (IRP) specified by an RX_CONTEXT structure to the worker queue for processing by the file system process (FSP).

RxGetFileSizeWithLock

This routine gets the file size from the FCB structure using a lock to ensure that the 64-bit value is read consistently.

RxGetRDBSSProcess

This routine returns a pointer to the process of the main thread used by the RDBSS kernel process.

RxIndicateChangeOfBufferingState

This routine is called to register a buffering state change request (an oplock break indication, for example) for later processing.

RxIndicateChangeOfBufferingStateForSrvOpen

This routine is called to register a buffering state change request (an oplock break indication, for example) for later processing.

RxInferFileType

This routine tries to infer the file type (directory or non-directory) from the CreateOptions ( Create.NtCreateParameters.CreateOptions) field in the RX_CONTEXT structure.

RxInitializeContext

This routine initializes a newly allocated RX_CONTEXT structure.

RxIsThisACscAgentOpen

This routine determines if a file open was made by a user-mode client-side caching agent.

This routine is only available on Windows Server 2003.

RxLockEnumerator

This routine is called from a network mini-redirector to enumerate the file locks on an FCB.

RxLogEventDirect

This routine is called to log an error to the I/O error log. It is recommended that the RxLogEvent or RxLogFailure macro be used instead of calling this routine directly.

RxLogEventWithAnnotation

This routine allocates an I/O error log structure, fills in the log structure, and writes this structure to the I/O error log.

RxLogEventWithBufferDirect

This routine is called to log an error to an I/O error log. This routine encodes the line number and status into the data buffer stored in the I/O error log structure.

RxLowIoCompletion

This routine must be called by the low I/O routines of a network mini-redirector driver when processing is complete, if the routine initially returned pending.

RxLowIoGetBufferAddress

This routine returns the buffer that corresponds to the MDL from the LowIoContext structure of an RX_CONTEXT structure.

RxMakeLateDeviceAvailable

This routine modifies the device object to make a "late device" available. A late device is one that is not created in the driver's load routine.

RxMapAndDissociateMidFromContext

This routine maps a MID to its associated context in a MID_ATLAS data structure and then disassociates the MID from the context.

RxMapMidToContext

This routine maps a MID to its associated context in a MID_ATLAS data structure.

RxMapSystemBuffer

This routine returns the system buffer address from the I/O request packet (IRP).

RxNameCacheActivateEntry

This routine takes a name cache entry and updates the expiration time and the network mini-redirector context. It then puts the entry on the active list.

RxNameCacheCheckEntry

This routine checks a NAME_CACHE entry for validity.

RxNameCacheCreateEntry

This routine allocates and initializes a NAME_CACHE structure with the given name string. It is expected that the caller will then initialize any additional network mini-redirector elements of the name cache context and then put the entry on the name cache active list.

RxNameCacheExpireEntry

This routine puts a NAME_CACHE entry on the free list.

RxNameCacheExpireEntryWithShortName

This routine expires all of the NAME_CACHE entries whose name prefix matches the given short file name.

RxNameCacheFetchEntry

This routine looks for a match with a specified name string for a NAME_CACHE entry.

RxNameCacheFinalize

This routine releases the storage for all of the NAME_CACHE entries associated with a NAME_CACHE_CONTROL structure.

RxNameCacheFreeEntry

This routine releases the storage for a NAME_CACHE entry and decrements the count of NAME_CACHE cache entries associated with a NAME_CACHE_CONTROL structure.

RxNameCacheInitialize

This routine initializes a NAME_CACHE structure and associates it with a NAME_CACHE_CONTROL structure.

RxNewMapUserBuffer

This routine returns the address of the user buffer used for low I/O.

This routine is only available on Windows XP and Windows 2000.

RxpAcquirePrefixTableLockExclusive

This routine acquires an exclusive lock on a prefix table used to catalog SRV_CALL and NET_ROOT names.

This routine is only available on Windows XP and Windows 2000. This routine is used internally by RDBSS and should not be used by network mini-redirectors.

RxpAcquirePrefixTableLockShared

This routine acquires a shared lock on a prefix table used to catalog SRV_CALL and NET_ROOT names.

This routine is only available on Windows XP and Windows 2000. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxpDereferenceAndFinalizeNetFcb

This routine dereferences the reference count and finalizes an FCB.

This routine is only available on Windows Server 2003 Service Pack 1 (SP1) and later.

RxpDereferenceNetFcb

This routine decrements the reference count on an FCB.

RxPostOneShotTimerRequest

This routine is used by drivers to initialize a one-shot timer request. The worker thread routine passed to this routine is called once when the timer expires.

RxPostRecurrentTimerRequest

This routine is used to initialize a recurrent timer request. The worker thread routine passed to this routine is called at regular intervals when the recurrent timer fires based on the input parameters to this routine.

RxPostToWorkerThread

This routine invokes the routine in the context of a worker thread.

RxpReferenceNetFcb

This routine increments the reference count on an FCB.

RxPrefixTableLookupName

The routine looks up a name in a prefix table used to catalog SRV_CALL and NET_ROOT names and converts from the underlying pointer to the containing structure.

This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxpReleasePrefixTableLock

This routine releases a lock on a prefix table used to catalog SRV_CALL and NET_ROOT names.

This routine is only available on Windows XP and Windows 2000. This routine is used internally by RDBSS and should not be used by network mini-redirector drivers.

RxPrepareContextForReuse

This routine prepares an RX_CONTEXT structure for reuse by resetting all operation-specific allocations and acquisitions that have been made. The parameters obtained from the IRP are not modified. This routine is used internally by RDBSS and should not be used by network mini-redirectors.

RxPrepareToReparseSymbolicLink

This routine sets up the file object name to facilitate a reparse. This routine is used by the network mini-redirectors to traverse symbolic links. This routine is used internally by RDBSS and should not be used by network mini-redirectors.

RxpTrackDereference

This routine is used to track requests to dereference SRV_CALL, NET_ROOT, V_NET_ROOT, FOBX, FCB, and SRV_OPEN structures in checked builds. A log of these dereference requests can be accessed by the logging system and WMI.

For retail builds, this routine does nothing.

RxpTrackReference

This routine is used to track requests to reference SRV_CALL, NET_ROOT, V_NET_ROOT, FOBX, FCB, and SRV_OPEN structures in checked builds. A log of these reference requests can be accessed by the logging system and WMI.

For retail builds, this routine does nothing.

RxpUnregisterMinirdr

The routine is called by a network mini-redirector driver to unregister the driver with RDBSS and remove the registration information from the internal RDBSS registration table.

RxPurgeAllFobxs

This routine purges all the FOBX structures associated with a network mini-redirector.

RxPurgeRelatedFobxs

This routine purges all of the FOBX structures associated with a NET_ROOT structure.

RxReassociateMid

This routine reassociates a MID with an alternate context.

RxReference

This routine increments the reference count on an instance of several of the reference-counted data structures used by RDBSS.

RxRegisterMinirdr

This routine is called by a network mini-redirector driver to register the driver with RDBSS, which adds the registration information to an internal registration table. RDBSS also builds a device object for the network mini-redirector.

RxReleaseFcbResourceInMRx

This routine frees the FCB resource acquired using RxAcquireExclusiveFcbResourceInMRx or RxAcquireSharedFcbResourceInMRx.

RxReleaseFcbResourceForThreadInMRx

This routine frees the FCB resource acquired using RxAcquireSharedFcbResourceInMRxEx

This routine is only available on Windows Server 2003 Service Pack 1 (SP1) and later.

RxResumeBlockedOperations_Serially

This routine wakes up the next waiting thread, if any, on the serialized blocking I/O queue.

RxScavengeAllFobxs

This routine scavenges all of the FOBX structures associated with a given network mini-redirector device object.

RxScavengeFobxsForNetRoot

This routine scavenges all of the FOBX structures that pertain to the given NET_ROOT structure.

RxSetDomainForMailslotBroadcast

This routine is called by a network mini-redirector driver to set the domain used for mailslot broadcasts if mailslots are supported by the driver.

RxSetMinirdrCancelRoutine

This routine sets up a network mini-redirector cancel routine for an RX_CONTEXT structure.

RxSetSrvCallDomainName

This routine sets the domain name associated with any given server (SRV_CALL structure).

RxSpinDownMRxDispatcher

This routine tears down the dispatcher context for a network mini-redirector.

This routine is only available on Windows XP and later.

RxStartMinirdr

This routine starts up a network mini-redirector that called to register itself. RDBSS will also register the network mini-redirector driver as a Universal Naming Convention (UNC) provider with the Multiple UNC Provider (MUP) if the driver indicates support for UNC names.

RxStopMinirdr

This routine stops a network mini-redirector driver. A driver that is stopped will no longer accept new commands.

RxUnregisterMinirdr

This routine is an inline function defined in rxstruc.h that is called by a network mini-redirector driver to unregister the driver with RDBSS and remove the registration information from the internal RDBSS registration table. The RxUnregisterMinirdr inline function internally calls RxpUnregisterMinirdr.

_RxAllocatePoolWithTag

This routine allocates memory from a pool with a four-byte tag at the beginning of the block that can be used to help catch instances of memory problems.

It is recommended that the RxAllocatePoolWithTag macro be used instead of calling this routine directly.

_RxCheckMemoryBlock

This routine checks a memory block for a special RX_POOL_HEADER header signature. Note that a network mini-redirector driver would need to add this special signature block to memory allocated in order to use the routine.

This routine should not be used since this special header block has not been implemented.

_RxFreePool

This routine frees a memory pool.

It is recommended that the RxFreePool macro be used instead of calling this routine directly.

_RxLog

This routine takes a format string and variable number of parameters and formats an output string for structureing as an I/O error log entry if logging is enabled.

It is recommended that the RxLog macro be used instead of calling this routine directly.

This routine is only available on checked builds of RDBSS on Windows Server 2003, Windows XP, and Windows 2000.

__RxFillAndInstallFastIoDispatch

This routine fills out a fast I/O dispatch vector to be identical with the normal dispatch I/O vector and installs it into the driver object that is associated with the device object passed.

This routine is implemented only for non-monolithic drivers and does nothing on monolithic drivers.

__RxSynchronizeBlockingOperations

This routine is used to synchronize blocking I/O to the same work queue. This routine is used internally by RDBSS to synchronize named pipe operations. This routine may be used by a network mini-redirector to synchronize operations on a separate queue that is maintained by the network mini-redirector.

This routine is only available on Windows Server 2003.

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock

This routine is used to synchronize blocking I/O to the same work queue. This routine is used internally by RDBSS to synchronize named pipe operations. This routine may be used by a network mini-redirector to synchronize operations on a separate queue that is maintained by the network mini-redirector.

This routine is only available on Windows XP and Windows 2000.