Types of FSDs

There are three types of FSDs that may exist in the system: local, remote and character FSDs.

Local FSDs

A local FSD uses a block device driver to do I/O to a disk device. The FSD maintains a specific format on the disk device and supports the IFS interface by manipulating this disk format. When the first request is made for accessing a logical disk drive, a linkage between the FSD and the disk device driver is established through a mount operation initiated by the IFS. The mount operation allows the FSD to verify that it recognizes the disk format. The FSD can then create its own structures required to manage the specific disk volume in the drive. Local FSDs register with the IFS manager using the IFSMgr_RegisterMount service and get called on the FS_MountVolume entrypoint to be mounted on a volume. Once mounted, all requests are routed through the interface established as a result of the mount operation.

Remote FSDs

A remote FSD accesses a remote file server through a network connection. The FSD translates the IFS requests into a network specific protocol and transfers them across a network to a file server. A remote FSD is often refered to as a network redirector. The linkage between a logical drive and a network resource is established through a connection operation. The connection operation provides the redirector with a network resource name that the connection is being made to. If the name is valid for the redirector it may create its own structures required to manage the nework connection. Network redirectors register with the IFS manager using the IFSMgr_RegisterNet service and get called on the FS_ConnectResource entrypoint to establish a connection with a resource. Once connected, all requests are routed through the interface established as a result of the connect operation.

Character FSDs

A character FSD accesses character devices. It registers a set of device names with the IFS manager. Anytime there is a filesystem request on these device names, the IFS routes it to the character FSD to handle. On its first access, a character FSD can choose to mount a device or reject it. Once a device is mounted, the FSD will be called on all requests to that device name. The FSD can communicate with the actual device either directly or through a stack of character device drivers provided as part of the IO subsystem. This provides a very elegant and efficient way to access character devices. Character FSDs register with the IFS manager using the IFSMgr_RegisterCFSD service and get called on the FS_MountVolume entrypoint to be mounted on a character device. Once mounted, all requests are routed through the interface established as a result of the mount operation.

Both the mount and connection operations return a resource handle which is used by the IFS manager to identify the disk volume, character device or network resource for file operations. This resource handle may simply be a pointer to the FSD specific data structures used to manage the specific resource.