What's New in CBFS Connect 2020
CBFS Connect 2020 is the latest version of Callback Technologies' popular virtual filesystem integration product, and represents a major upgrade from CBFS Connect 2017. The CBFS Connect 2020 toolkit includes a redesigned component API, extensively revised and expanded documentation, and numerous internal changes and upgrades.
This article is intended to provide both a high level overview of new features and functionality, as well as in-depth details about how to upgrade existing code from CBFS Connect 2017 to CBFS Connect 2020. Please refer to the CBFS Connect 2020 product page and documentation for more information.
- What's New
Updated Development Experience
A primary goal for Callback Technologies' 2020 product line was to revisit and refine the developer experience. Our efforts in this area have resulted in a number of changes across the board for each product, a few of which are worth noting here.
The CBFS Connect user mode API has been redesigned. The new API is designed to be easier to understand and to use; it is more streamlined and consistent than in previous versions, but just as flexible and performant. Additional details about how the API has changed can be found in the Upgrading section, below.
The product's documentation has also been extensively revised and expanded, making it easier to read and more helpful overall; and the included demo projects have been improved so as to better illustrate the usage of the components.
New Features & Changes
CBFS Connect 2020 includes numerous new features and changes. Here are some of the highlights:
- File data can now be cached using the built-in Windows file cache. This is enabled by default, but can be changed using the FileCacheType property.
- Additional information about open resources can now be obtained using the OpenHandlesCount and OpenObjectsCount properties.
The following events (previously known as "callbacks") have been added, for additional flexibility:
The following properties have been added so that applications can explicitly control whether certain functionality (and corresponding events) are enabled:
- Additional logging can now be enabled using the LoggingEnabled configuration setting.
- The internal libraries used to facilitate communication between the CBFS Connect system driver and CBFS component have been rewritten to improve performance.
- The various shell helper DLLs have been merged into one Helper DLL.
This section contains information helpful for upgrading existing code from CBFS Connect 2017 to CBFS Connect 2020. Please note that a number of finer details and edition-specific differences are omitted due to the general-purpose nature of this content; such information can be found in the CBFS Connect 2020 documentation applicable to your edition.
When upgrading to CBFS Connect 2020, there are a number of general changes to keep in mind:
- The CBFSConnect component has been renamed to CBFS.
- A number of infrequently-used properties have been converted to configuration settings (which are get/set using the Config method).
- The manner in which events (previously known as "callbacks") are used has changed in some editions.
- The parameter list for a number of events has changed; and the types of parameters passed to events have been simplified in general.
- Many constants have been renamed; and all constants have moved to a dedicated, product-wide "Constants" class.
- The manner in which errors are reported during events has changed for some editions.
- The end-user driver deployment procedure has changed.
- The licensing scheme for the product has changed.
- The assembly and namespace names have changed in the .NET edition.
The following table describes how to upgrade from the old CBFSConnect component API to the new CBFS component API:
|CBFSConnect Component (2017)||CBFS Component (2020)|
|AllowReadBeyondEof property||This property is now the AllowReadOutsideEof configuration setting.|
|CachePolicyPurgeOnClose and CachePolicyWriteThrough properties||These properties are now the FileCachePolicyPurgeOnClose and FileCachePolicyWriteThrough configuration settings.|
|CacheSize property||This property is now the UserModeFileCacheSize.|
|CallAllOpenCloseCallbacks property||Renamed to FireAllOpenCloseEvents.|
|CallSetEndOfFileOnWrite property||This property is now the FireSetFileSizeOnWrite configuration setting.|
|CaseSensitiveFileNames property||Renamed to UseCaseSensitiveFileNames.|
|ChangeTimeAttributeSupported and LastAccessTimeAttributeSupported properties||Renamed to SupportChangeTimeAttribute and SupportLastAccessTimeAttribute.|
|ClusterSize and SectorSize properties||These properties are now configuration settings.|
|CorrectAllocationSize property||This property is now the CorrectAllocationSizes configuration setting.|
|FastRenameMove property||This property is now a configuration setting.|
|FileCacheType property||Possible values have been renamed; and an additional option has been added for the system file cache.|
|HandleDiskQuotas property||Renamed to UseDiskQuotas.|
|HandleUSNJournalPolicy property||This property is now the USNJournalPolicy configuration setting.|
|MaxReadBlockSize and MaxWriteBlockSize properties||These properties are now configuration settings.|
|MetaDataCacheEnabled and MetaDataCacheSize properties||Renamed to MetadataCacheEnabled and MetadataCacheSize.|
|MinWorkerThreadCount and MaxWorkerThreadCount properties||These properties are now configuration settings.|
|NonexistentFilesCacheEnabled and NonexistentFilesCacheSize properties||Renamed to NonExistentFilesCacheEnabled and NonExistentFilesCacheSize.|
|ParallelProcessingAllowed property||Renamed to SerializeAccess (and its default value inverted accordingly).|
|SerializeCallbacks property||Renamed to SerializeEvents.|
|ShortFileNameSupport property||Renamed to UseShortFileNames.|
|UseProtectiveFSFilter property||This property is now a configuration setting.|
|AddMountingPoint method||Overloads have been merged into a single method.|
|DeleteDeniedProcess and DeleteGrantedProcess methods||Renamed to RemoveDeniedProcess and RemovedGrantedProcess.|
|DeleteMountingPoint method||Renamed to RemoveMountingPoint.|
|GetAccessDeniedProcess and GetAccessDeniedProcessCount methods.||Removed. This information is available via the AccessDeniedProcesses collection property (.NET/Java editions) or the various AccessDeniedProcess* properties (other editions).|
|GetAccessGrantedProcess and GetAccessGrantedProcessCount methods.||Removed. This information is available via the AccessGrantedProcesses collection property (.NET/Java editions) or the various AccessGrantedProcess* properties (other editions).|
|GetHandleInfo method||Removed. Use the various GetHandleCreatorInfo* methods instead.|
|GetModuleStatus method||Split into the GetDriverStatus and GetModuleVersion methods.|
|GetMountingPoint method||Removed. This information is available via the MountingPoints collection property (.NET/Java editions) or the various MountingPoint* properties (other editions).|
|GetOpenedFilesSnapshot method||Renamed to CreateOpenedFilesSnapshot which, when called, populates the OpenFiles collection property (.NET/Java editions) or the various OpenFile* properties (other editions).|
|Install and Uninstall methods||Usage has changed; refer to the documentation for more information.|
|InstallIcon, IconInstalled, and UninstallIcon methods||Renamed to RegisterIcon, IsIconRegistered, and UnregisterIcon.|
|SetRegistrationKey method||Removed. Refer to the "Licensing Instructions" topic in the documentation for information about how to license the component for use in each edition.|
|GetReparseData event||Merged into the GetReparsePoint event.|
|QueryQuotasControlInformation event||Merged into the QueryQuotas event.|
|SetEndOfFile event||Renamed to SetFileSize.|
|SetQuotasControlInformation event||Merged into the SetQuotas event.|
|StorageEjected event||Renamed to Ejected.|
We appreciate your feedback. If you have any questions, comments, or suggestions about this article please contact our support team at firstname.lastname@example.org.