Struct cbfsstorage::CBMemoryDrive
Properties Methods Events Config Settings Errors
The CBMemoryDrive struct lets applications create an in-memory vault, accessible to all or some processes as a regular disk.
Syntax
cbfsstorage::CBMemoryDrive
Remarks
The CBMemoryDrive struct allows applications to create an in-memory vault and interact with its contents directly. A vault can contain any number of files, directories, alternate streams, and symbolic links; so long as it has sufficient capacity to store them. For more information about using CBFS Storage's many features, please refer to the extensive General Information topics.
No data is ever stored on disk, all data is stored in memory.
Getting Started
Each CBMemoryDrive struct instance can control a single vault at once. Applications can use multiple instances of the CBMemoryDrive struct if their use-case requires multiple vaults.
Here's how to get up and running:
- Create or open a vault by calling the create_vault method.
- Interact with the vault, and its contents, using the CBMemoryDrive struct's API methods.
- When done, call the close_vault method to close the vault.
Object Lifetime
The new() method returns a mutable reference to a struct instance. The object itself is kept in the global list maintainted by CBFSStorage. Due to this, the CBMemoryDrive struct cannot be disposed of automatically. Please, call the dispose(&mut self) method of CBMemoryDrive when you have finished using the instance.
Property List
The following is the full list of the properties of the struct with short descriptions. Click on the links for further details.
access_denied_process_count | The number of records in the AccessDeniedProcess arrays. |
access_denied_process_desired_access | The kind of access granted or denied. |
access_denied_process_include_children | Whether child processes are affected. |
access_denied_process_id | The Id of the target process. |
access_denied_process_name | The filename of the target process's executable. |
access_granted_process_count | The number of records in the AccessGrantedProcess arrays. |
access_granted_process_desired_access | The kind of access granted or denied. |
access_granted_process_include_children | Whether child processes are affected. |
access_granted_process_id | The Id of the target process. |
access_granted_process_name | The filename of the target process's executable. |
active | Whether a vault has been opened and mounted as a virtual drive. |
auto_compact_at | This property specifies the free space percentage threshold a vault must reach to be eligible for automatic compaction. |
case_sensitive | This property specifies whether the struct should open a vault in case-sensitive mode. |
default_file_access_password | This property specifies the default encryption password to use when opening files and alternate streams. |
default_file_compression | This property specifies the default compression mode to use when creating files and alternate streams. |
default_file_create_password | This property specifies the default encryption password to use when creating new files and alternate streams. |
default_file_encryption | This property specifies the default encryption mode to use when creating files and alternate streams. |
file_system_name | The name of the virtual filesystem. |
is_corrupted | This property specifies whether the vault is corrupted. |
last_write_time | This property specifies the last modification time of the vault. |
logo | This property specifies an application-defined text-based logo stored in the second page of a vault. |
mounting_point_count | The number of records in the MountingPoint arrays. |
mounting_point_authentication_id | The Authentication ID used when creating the mounting point, if applicable. |
mounting_point_flags | The flags used to create the mounting point. |
mounting_point_name | The mounting point name. |
open_files_count | The number of records in the OpenFile arrays. |
open_file_name | The name of the open file. |
open_file_process_id | The Id of the process that opened the file. |
open_file_process_name | The name of the process that opened the file. |
page_size | This property specifies the vault's page size. |
path_separator | This property specifies the path separator character to use when returning vault paths. |
possible_free_space | This property specifies the maximum amount of free space the vault could possibly have available. |
possible_size | This property specifies the maximum size the vault could possibly be. |
process_restrictions_enabled | Whether process access restrictions are enabled. |
read_only | This property specifies whether the struct should open a vault in read-only mode. |
report_possible_size | How the struct should report the virtual drive's size and free space to the OS. |
storage_characteristics | The characteristic flags to create the virtual drive with (Windows only). |
storage_guid | The GUID to create the virtual drive with. |
storage_type | The type of virtual drive to create (Windows only). |
tag | This property stores application-defined data specific to a particular instance of the struct. |
timeout | How long vault events may execute before timing out. |
use_access_time | This property specifies whether the struct should keep track of last access times for vault items. |
vault_encryption | This property specifies the whole-vault encryption mode. |
vault_free_space | This property reflects the actual amount of free space the vault has available. |
vault_password | This property specifies the whole-vault encryption password. |
vault_size | This property specifies the actual size of the vault. |
vault_size_max | This property specifies the maximum size a vault can be. |
vault_size_min | This property specifies the minimum size a vault can be. |
vault_state | This property specifies information about the state of the vault. |
Method List
The following is the full list of the methods of the struct with short descriptions. Click on the links for further details.
add_denied_process | Adds a rule that prevents a process from accessing the virtual drive . |
add_granted_process | Adds a rule that allows a process to access the virtual drive . |
add_mounting_point | Adds a mounting point for the virtual drive. |
cache_file_password | This method caches an encryption password to use the next time a file or alternate stream is accessed or removes the cached password. |
check_and_repair | This method checks a vault's consistency and repairs it as necessary. |
check_file_password | This method verifies whether a particular file password is correct. |
check_vault_password | This method verifies whether a particular vault password is correct. |
close_opened_files_snapshot | Closes the previously-created opened files snapshot. |
close_vault | Closes the vault. |
compact_vault | This method compacts the vault. |
config | Sets or retrieves a configuration setting. |
convert_to_drive_path | Converts a vault-local vault item path to a virtual drive file path (Windows only). |
convert_to_vault_path | Converts a virtual drive file path to a vault-local vault item path (Windows only). |
create_directory | This method creates a new directory in the vault. |
create_link | This method creates a symbolic link to another file in the vault. |
create_opened_files_snapshot | Creates a snapshot of information about files that are currently open. |
create_vault | Creates an in-memory vault. |
delete_file | This method deletes a vault item. |
delete_file_tag | This method deletes a file tag. |
file_exists | This method checks whether a vault item exists. |
file_matches_mask | This method checks whether a particular file or directory name matches the specified mask. |
file_tag_exists | This method checks whether a file tag exists. |
file_time_to_nanoseconds | This method returns the subsecond part of the time expressed in nanoseconds. |
file_time_to_unix_time | This method converts FileTime to Unix time format. |
find_close | This method closes a search operation and releases any associated resources. |
find_first | This method searches for the first vault item that matches the specified name and attributes. |
find_first_by_query | This method searches for the first file or directory whose file tags match the specified query. |
find_next | This method searches for the next vault item that matches an ongoing search operation. |
get_driver_status | Retrieves the status of the system driver. |
get_file_attributes | This method retrieves the attributes of a vault item. |
get_file_compression | This method retrieves the compression mode of a file or alternate stream. |
get_file_creation_time | This method retrieves the creation time of a vault item. |
get_file_encryption | This method retrieves the encryption mode of a file or alternate stream. |
get_file_last_access_time | This method retrieves the last access time of a vault item. |
get_file_modification_time | This method retrieves the modification time of a vault item. |
get_file_size | This method retrieves the size of a file or alternate stream. |
get_file_tag | This method retrieves the binary data held by a raw file tag attached to the specified vault item. |
get_file_tag_as_ansi_string | This method retrieves the value of an AnsiString-typed file tag attached to the specified vault item. |
get_file_tag_as_boolean | This method retrieves the value of a Boolean-typed file tag attached to the specified vault item. |
get_file_tag_as_date_time | This method retrieves the value of a DateTime-typed file tag attached to the specified vault item. |
get_file_tag_as_number | This method retrieves the value of a Number-typed file tag attached to the specified vault item. |
get_file_tag_as_string | This method retrieves the value of a String-typed file tag attached to the specified vault item. |
get_file_tag_data_type | This method retrieves the data type of a typed file tag attached to a specific vault item. |
get_file_tag_size | This method retrieves the size of a raw file tag attached to the specified vault item. |
get_module_version | Retrieves the version of a given product module. |
get_originator_process_id | Retrieves the Id of the process (PID) that initiated the operation (Windows only). |
get_originator_process_name | Retrieves the name of the process that initiated the operation (Windows only). |
get_originator_thread_id | Retrieves the Id of the thread that initiated the operation (Windows only). |
get_originator_token | Retrieves the security token associated with the process that initiated the operation (Windows only). |
get_search_result_attributes | This method retrieves the attributes of a vault item found during a search operation. |
get_search_result_creation_time | This method retrieves the creation time of a vault item found during a search operation. |
get_search_result_full_name | This method retrieves the fully qualified name of a vault item found during a search operation. |
get_search_result_last_access_time | This method retrieves the last access time of a vault item found during a search operation. |
get_search_result_link_destination | This method retrieves the destination of a symbolic link found during a search operation. |
get_search_result_metadata_size | This method retrieves the size of the metadata associated with a vault item found during a search operation. |
get_search_result_modification_time | This method retrieves the modification time of a vault item found during a search operation. |
get_search_result_name | This method retrieves the name of a vault item found during a search operation. |
get_search_result_size | This method retrieves the size of a vault item found during a search operation. |
initialize | This method initializes the struct. |
install | Installs (or upgrades) the product's system drivers and/or the helper DLL (Windows only). |
is_directory_empty | This method checks whether a directory is empty. |
is_icon_registered | Checks whether the specified icon is registered (Windows only). |
load_from_file | Copies contents of a file-based vault into the in-memory vault. |
move_file | This method renames or moves a vault item. |
open_file | This method opens a new or existing file or alternate stream in the vault. |
open_file_ex | This method opens a new or existing file or alternate stream in the vault. |
open_root_data | This method opens the vault's root data stream. |
register_icon | Registers an icon that can be displayed as an overlay on the virtual drive in Windows File Explorer (Windows only). |
remove_denied_process | Removes a rule that prevents a process from accessing the virtual drive . |
remove_granted_process | Removes a rule that allows a process to access the virtual drive . |
remove_mounting_point | Removes a mounting point for the virtual drive. |
reset_icon | Resets the virtual drive's icon back to default by deselecting the active overlay icon (Windows only). |
resolve_link | This method retrieves the destination of a symbolic link. |
save_to_file | Copies contents of the in-memory vault into a file-based vault. |
set_file_attributes | This method sets the attributes of a vault item. |
set_file_compression | This method compresses or decompresses a file or alternate stream. |
set_file_creation_time | This method sets the creation time of a vault item. |
set_file_encryption | This method encrypts, decrypts, or changes the encryption password of a file or alternate stream. |
set_file_last_access_time | This method sets the last access time of a vault item. |
set_file_modification_time | This method sets the modification time of a vault item. |
set_file_size | This method sets the size of a file or alternate stream. |
set_file_tag | This method attaches a raw file tag with binary data to the specified vault item. |
set_file_tag_as_ansi_string | This method attaches an AnsiString-typed file tag to the specified vault item. |
set_file_tag_as_boolean | This method attaches a Boolean-typed file tag to the specified vault item. |
set_file_tag_as_date_time | This method attaches a DateTime-typed file tag to the specified vault item. |
set_file_tag_as_number | This method attaches a Number-typed file tag to the specified vault item. |
set_file_tag_as_string | This method attaches a String-typed file tag to the specified vault item. |
set_icon | Selects a registered overlay icon for display on the virtual drive in Windows File Explorer (Windows only). |
shutdown_system | Shuts down or reboots the operating system. |
uninstall | Uninstalls the product's system drivers and/or helper DLL (Windows only). |
unix_time_to_file_time | This method converts the date/time in Unix format to the Windows FileTime format. |
unregister_icon | Unregisters an existing overlay icon (Windows only). |
update_vault_encryption | This method encrypts, decrypts, or changes the encryption password of the vault. |
Event List
The following is the full list of the events fired by the struct with short descriptions. Click on the links for further details.
on_ejected | Fires when the media and virtual drive have been ejected (Windows only). |
on_error | This event fires if an unhandled error occurs during an event. |
on_file_access | Fires when the OS wants to create or open a file or directory. |
on_file_after_copy | This event fires after the file has been copied during file export/import operations. |
on_file_before_copy | This event fires before the file is copied during file export/import operations. |
on_file_password_needed | This event fires if a password is needed to open an encrypted file. |
on_progress | This event fires to indicate the progress of long-running vault operations. |
Config Settings
The following is a list of config settings for the struct with short descriptions. Click on the links for further details.
AllowMoveStreamsBetweenFiles | Whether alternate streams may be moved from one file to another. |
AsyncDeleteStorageNotifications | Whether system broadcasts for virtual drive deletion are sent asynchronously. |
AutoCompactDelay | How long a vault must remain idle before starting automatic compaction. |
DefaultFileCompressionLevel | The default compression level to use when creating files and alternate streams. |
FireFileAccessEvent | Whether FileAccess event is fired. |
LoggingEnabled | Whether extended logging is enabled. |
MaxNonPagedNameLength | The maximum number of name characters to store directly within a vault item. |
StorageNamePrefix | The fixed prefix to use in device object names. |
SupportSearchIndexer | Specifies whether the driver must take additional measures to support indexing by Windows Search. |
VolumeGuidName | The GUID of the mounted volume. |
access_denied_process_count Property (CBMemoryDrive Struct)
The number of records in the AccessDeniedProcess arrays.
Syntax
fn access_denied_process_count(&self ) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
This property controls the size of the following arrays:
- access_denied_process_desired_access
- access_denied_process_id
- access_denied_process_include_children
- access_denied_process_name
This property is read-only.
Data Type
i32
access_denied_process_desired_access Property (CBMemoryDrive Struct)
The kind of access granted or denied.
Syntax
fn access_denied_process_desired_access(&self , AccessDeniedProcessIndex : i32) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
The kind of access granted or denied.
This property specifies what kind of access is granted or denied by the rule. Possible values are:
STG_DACCESS_READ | 0x00000001 | Grant/deny read access. |
STG_DACCESS_WRITE | 0x00000002 | Grant/deny write access. |
STG_DACCESS_READWRITE | 0x00000003 | Grant/deny read and write access. |
The AccessDeniedProcessIndex parameter specifies the index of the item in the array. The size of the array is controlled by the AccessDeniedProcessCount property.
This property is read-only.
Data Type
i32
access_denied_process_include_children Property (CBMemoryDrive Struct)
Whether child processes are affected.
Syntax
fn access_denied_process_include_children(&self , AccessDeniedProcessIndex : i32) -> Result<bool, CBFSStorageError>
Default Value
false
Remarks
Whether child processes are affected.
This property indicates whether the rule applies to children of the target process.
The AccessDeniedProcessIndex parameter specifies the index of the item in the array. The size of the array is controlled by the AccessDeniedProcessCount property.
This property is read-only.
Data Type
bool
access_denied_process_id Property (CBMemoryDrive Struct)
The Id of the target process.
Syntax
fn access_denied_process_id(&self , AccessDeniedProcessIndex : i32) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
The Id of the target process.
This property reflects the target process's Id (PID). Will be 0 if the target process was specified by access_denied_process_process_name, or -1 if the rule applies to all processes.
The AccessDeniedProcessIndex parameter specifies the index of the item in the array. The size of the array is controlled by the AccessDeniedProcessCount property.
This property is read-only.
Data Type
i32
access_denied_process_name Property (CBMemoryDrive Struct)
The filename of the target process's executable.
Syntax
fn access_denied_process_name(&self , AccessDeniedProcessIndex : i32) -> Result<String, CBFSStorageError>
Default Value
String::default()
Remarks
The filename of the target process's executable.
This property reflects the full file name of the target process's executable. Will be empty if the target process was specified by access_denied_process_process_id (or if the rule applies to all processes, in which case access_denied_process_process_id will be -1).
The AccessDeniedProcessIndex parameter specifies the index of the item in the array. The size of the array is controlled by the AccessDeniedProcessCount property.
This property is read-only.
Data Type
String
access_granted_process_count Property (CBMemoryDrive Struct)
The number of records in the AccessGrantedProcess arrays.
Syntax
fn access_granted_process_count(&self ) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
This property controls the size of the following arrays:
- access_granted_process_desired_access
- access_granted_process_id
- access_granted_process_include_children
- access_granted_process_name
This property is read-only.
Data Type
i32
access_granted_process_desired_access Property (CBMemoryDrive Struct)
The kind of access granted or denied.
Syntax
fn access_granted_process_desired_access(&self , AccessGrantedProcessIndex : i32) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
The kind of access granted or denied.
This property specifies what kind of access is granted or denied by the rule. Possible values are:
STG_DACCESS_READ | 0x00000001 | Grant/deny read access. |
STG_DACCESS_WRITE | 0x00000002 | Grant/deny write access. |
STG_DACCESS_READWRITE | 0x00000003 | Grant/deny read and write access. |
The AccessGrantedProcessIndex parameter specifies the index of the item in the array. The size of the array is controlled by the AccessGrantedProcessCount property.
This property is read-only.
Data Type
i32
access_granted_process_include_children Property (CBMemoryDrive Struct)
Whether child processes are affected.
Syntax
fn access_granted_process_include_children(&self , AccessGrantedProcessIndex : i32) -> Result<bool, CBFSStorageError>
Default Value
false
Remarks
Whether child processes are affected.
This property indicates whether the rule applies to children of the target process.
The AccessGrantedProcessIndex parameter specifies the index of the item in the array. The size of the array is controlled by the AccessGrantedProcessCount property.
This property is read-only.
Data Type
bool
access_granted_process_id Property (CBMemoryDrive Struct)
The Id of the target process.
Syntax
fn access_granted_process_id(&self , AccessGrantedProcessIndex : i32) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
The Id of the target process.
This property reflects the target process's Id (PID). Will be 0 if the target process was specified by access_granted_process_process_name, or -1 if the rule applies to all processes.
The AccessGrantedProcessIndex parameter specifies the index of the item in the array. The size of the array is controlled by the AccessGrantedProcessCount property.
This property is read-only.
Data Type
i32
access_granted_process_name Property (CBMemoryDrive Struct)
The filename of the target process's executable.
Syntax
fn access_granted_process_name(&self , AccessGrantedProcessIndex : i32) -> Result<String, CBFSStorageError>
Default Value
String::default()
Remarks
The filename of the target process's executable.
This property reflects the full file name of the target process's executable. Will be empty if the target process was specified by access_granted_process_process_id (or if the rule applies to all processes, in which case access_granted_process_process_id will be -1).
The AccessGrantedProcessIndex parameter specifies the index of the item in the array. The size of the array is controlled by the AccessGrantedProcessCount property.
This property is read-only.
Data Type
String
active Property (CBMemoryDrive Struct)
Whether a vault has been opened and mounted as a virtual drive.
Syntax
fn active(&self ) -> Result<bool, CBFSStorageError>
Default Value
false
Remarks
This property reflects whether the struct has opened a vault and mounted a virtual drive for it; it will be true once the create_vault load_from_file method has been called successfully.
This property is read-only.
Data Type
bool
auto_compact_at Property (CBMemoryDrive Struct)
This property specifies the free space percentage threshold a vault must reach to be eligible for automatic compaction.
Syntax
fn auto_compact_at(&self ) -> Result<i32, CBFSStorageError>
fn set_auto_compact_at(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies the percentage of free space a vault must have, at minimum, for it to be eligible for automatic vault compaction. An eligible vault may be compacted automatically in the background at any time. Please refer to the compact_vault method for more information about the compacting process.
To guard against excessive automatic compaction operations, applications can set the AutoCompactDelay configuration setting to a nonzero value. Alternatively, this property can be set to 0 to disable automatic compaction completely.
A vault opened in read_only mode will never be compacted, regardless of this property's value.
Note: This property cannot be changed within events.
Data Type
i32
case_sensitive Property (CBMemoryDrive Struct)
This property specifies whether the struct should open a vault in case-sensitive mode.
Syntax
fn case_sensitive(&self ) -> Result<bool, CBFSStorageError>
fn set_case_sensitive(&self, value : bool) -> Option<CBFSStorageError>
Default Value
false
Remarks
This property specifies whether the struct should open a vault in case-sensitive mode. Enabling this property causes all file, directory, symbolic link, alternate stream, and file tag names to be treated as case sensitive.
Note: This property cannot be changed when active is true, and it cannot be changed within events.
Data Type
bool
default_file_access_password Property (CBMemoryDrive Struct)
This property specifies the default encryption password to use when opening files and alternate streams.
Syntax
fn default_file_access_password(&self ) -> Result<String, CBFSStorageError>
fn set_default_file_access_password(&self, value : &str) -> Option<CBFSStorageError> fn set_default_file_access_password_ref(&self, value : &String) -> Option<CBFSStorageError>
Default Value
String::default()
Remarks
This property specifies the default encryption password that the struct should use when opening files and alternate streams.
Please refer to the Encryption topic for more information.
As an alternative to using this property, applications may call the cache_file_password method (before a file is opened) to specify a one-time-use password or may specify file encryption passwords dynamically using the on_file_password_needed event.
Data Type
String
default_file_compression Property (CBMemoryDrive Struct)
This property specifies the default compression mode to use when creating files and alternate streams.
Syntax
fn default_file_compression(&self ) -> Result<i32, CBFSStorageError>
fn set_default_file_compression(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies the default compression mode that the struct should use when creating files and alternate streams. Valid values are as follows:
VAULT_CM_NONE | 0 | Do not use compression. |
VAULT_CM_DEFAULT | 1 | Use default compression (zlib). |
VAULT_CM_CUSTOM | 2 | Use event-based custom compression.
This compression level is not used. |
VAULT_CM_ZLIB | 3 | Use zlib compression.
Valid compression levels are 1-9. |
VAULT_CM_RLE | 4 | Use RLE compression.
This compression level is not used. |
Applications that use custom compression must implement the on_data_compress and on_data_decompress events. Please refer to the Compression topic for more information.
Applications can also specify a default compression level using the DefaultFileCompressionLevel configuration setting, if desired.
Data Type
i32
default_file_create_password Property (CBMemoryDrive Struct)
This property specifies the default encryption password to use when creating new files and alternate streams.
Syntax
fn default_file_create_password(&self ) -> Result<String, CBFSStorageError>
fn set_default_file_create_password(&self, value : &str) -> Option<CBFSStorageError> fn set_default_file_create_password_ref(&self, value : &String) -> Option<CBFSStorageError>
Default Value
String::default()
Remarks
This property specifies the default encryption password that the struct should use when creating new files and alternate streams.
Please refer to the Encryption topic for more information.
Data Type
String
default_file_encryption Property (CBMemoryDrive Struct)
This property specifies the default encryption mode to use when creating files and alternate streams.
Syntax
fn default_file_encryption(&self ) -> Result<i32, CBFSStorageError>
fn set_default_file_encryption(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies the default encryption mode that the struct should use when creating files and alternate streams. Valid values are as follows:
VAULT_EM_NONE | 0x0 | Do not use encryption. |
VAULT_EM_DEFAULT | 0x1 | Use default encryption (VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256). |
VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256 | 0x2 | Use AES256 encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash. |
VAULT_EM_CUSTOM256_PBKDF2_HMAC_SHA256 | 0x3 | Use event-based custom 256-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_PBKDF2_HMAC_SHA256 | 0x4 | Use event-based custom 512-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_PBKDF2_HMAC_SHA256 | 0x5 | Use event-based custom 1024-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_CUSTOM_KEY_DERIVE | 0x23 | Use event-based custom 256-bit encryption with custom key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_CUSTOM_KEY_DERIVE | 0x24 | Use event-based custom 512-bit encryption with custom key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_CUSTOM_KEY_DERIVE | 0x25 | Use event-based custom 1024-bit encryption with custom key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_DIRECT_KEY | 0x43 | Use event-based custom 256-bit encryption with no key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM512_DIRECT_KEY | 0x44 | Use event-based custom 512-bit encryption with no key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM1024_DIRECT_KEY | 0x45 | Use event-based custom 1024-bit encryption with no key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_UNKNOWN | 0xFF | Unidentified or unknown encryption. |
Applications that use custom encryption must implement at least the on_data_encrypt and on_data_decrypt events. Certain custom encryption modes may require that the on_hash_calculate or on_key_derive event be implemented as well. Please refer to the Encryption topic for more information.
Applications that set this property to a value other than VAULT_EM_NONE (the default) should also specify a default encryption password using the default_file_create_password property.
Data Type
i32
file_system_name Property (CBMemoryDrive Struct)
The name of the virtual filesystem.
Syntax
fn file_system_name(&self ) -> Result<String, CBFSStorageError>
fn set_file_system_name(&self, value : &str) -> Option<CBFSStorageError> fn set_file_system_name_ref(&self, value : &String) -> Option<CBFSStorageError>
Default Value
String::default()
Remarks
This property specifies the name of the virtual filesystem. Windows, and some other applications, use this name to identify the filesystem.
In general, the filesystem name can be any reasonable string up to 10 characters in length. However, some versions of Windows and some third-party programs may behave differently when they encounter an unknown filesystem name (i.e., anything other than FAT, FAT32, exFAT, NTFS, etc.). Applications should keep this restriction in mind when choosing a filesystem name.
This property is set to FAT32 by default, which may cause some applications to fail when attempting to copy large (>4GB) files to and from the virtual drive. It is recommended that applications set this property to exFAT if such issues occur.
Note: This property cannot be changed when active is true, and it cannot be changed within events.
Data Type
String
is_corrupted Property (CBMemoryDrive Struct)
This property specifies whether the vault is corrupted.
Syntax
fn is_corrupted(&self ) -> Result<bool, CBFSStorageError>
Default Value
false
Remarks
This property reflects whether the currently open vault is corrupted, as indicated by the presence of the VAULT_ST_CORRUPTED flag in the vault_state property.
The VAULT_ST_CORRUPTED flag is set automatically anytime the struct detects that a vault's integrity has been compromised. Calling the check_and_repair method for a corrupted vault will clear the flag.
This property is read-only.
Data Type
bool
last_write_time Property (CBMemoryDrive Struct)
This property specifies the last modification time of the vault.
Syntax
fn last_write_time(&self ) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Default Value
chrono::DateTime::from_timestamp(0, 0).unwrap()
Remarks
This property reflects the vault's last modification time, specified in UTC.
This property is read-only.
Data Type
chrono::DateTime
logo Property (CBMemoryDrive Struct)
This property specifies an application-defined text-based logo stored in the second page of a vault.
Syntax
fn logo(&self ) -> Result<String, CBFSStorageError>
fn set_logo(&self, value : &str) -> Option<CBFSStorageError> fn set_logo_ref(&self, value : &String) -> Option<CBFSStorageError>
Default Value
String::default()
Remarks
This property is used to control a vault's logo, which is a UTF-16LE string stored in the second page of a vault. A vault's logo is visible to anyone who inspects its raw data and thus can be used to provide information about the vault itself.
Vault logos can be up to 127 characters long (not including the null terminator).
Note: This property cannot be changed within events.
Data Type
String
mounting_point_count Property (CBMemoryDrive Struct)
The number of records in the MountingPoint arrays.
Syntax
fn mounting_point_count(&self ) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
This property controls the size of the following arrays:
The array indices start at 0 and end at mounting_point_count - 1.This property is read-only.
Data Type
i32
mounting_point_authentication_id Property (CBMemoryDrive Struct)
The Authentication ID used when creating the mounting point, if applicable.
Syntax
fn mounting_point_authentication_id(&self , MountingPointIndex : i32) -> Result<i64, CBFSStorageError>
Default Value
0
Remarks
The Authentication ID used when creating the mounting point, if applicable.
If the STGMP_LOCAL flag is included in the mounting_point_flags value, this property reflects the Authentication ID of the user session in which the mounting point was added. Will be 0 if the mounting point was added in the current user session or globally.
The MountingPointIndex parameter specifies the index of the item in the array. The size of the array is controlled by the MountingPointCount property.
This property is read-only.
Data Type
i64
mounting_point_flags Property (CBMemoryDrive Struct)
The flags used to create the mounting point.
Syntax
fn mounting_point_flags(&self , MountingPointIndex : i32) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
The flags used to create the mounting point.
This property reflects the flags used to create the mounting point. It is a combination of zero or more of the following:
STGMP_SIMPLE | 0x00010000 | Create a simple mounting point.
Simple mounting points may be local or global; and when local, can be made visible in either the current user session or another one. This flag cannot be combined with STGMP_MOUNT_MANAGER or STGMP_NETWORK, and is implied if neither of those flags are present. |
STGMP_MOUNT_MANAGER | 0x00020000 | Create a mounting point that appears to the system as a physical device.
When the storage_type property is set to STGT_DISK_PNP, mounting points created using the system mount manager appear as physical devices in the Disk Management snap-in of the Microsoft Management Console (mmc.exe). This flag is a necessary prerequisite for creating a folder mounting point, which makes a drive accessible via an otherwise empty directory on another NTFS volume. This flag cannot be combined with STGMP_SIMPLE, STGMP_NETWORK, or STGMP_LOCAL. Only one mounting point of this type can be added to a virtual drive. |
STGMP_NETWORK | 0x00040000 | Create a network mounting point.
Network mounting points can be further configured using the various STGMP_NETWORK_* flags described below. Applications that plan to make use of network mounting points must be sure to install the Helper DLL before doing so, otherwise Windows File Explorer will not correctly recognize the "network" drive. This flag cannot be combined with STGMP_SIMPLE or STGMP_MOUNT_MANAGER. |
STGMP_LOCAL | 0x10000000 | Specifies that a local mounting point should be created.
This flag specifies that a local mounting point should be created rather than a global one. When this flag is set, applications must also pass an appropriate value for the add_mounting_point method's AuthenticationId parameter. Passing 0 for AuthenticationId will make the mounting point visible in the current user session. To make the mounting point visible in a different user session instead, pass the target session's Authentication ID. This flag is valid when combined with STGMP_SIMPLE or STGMP_NETWORK; it cannot be combined with STGMP_MOUNT_MANAGER. Please note that a mounting point can be made available to other computers as a network share, and network shares are always globally visible on the local machine, even if this flag is set. |
STGMP_NETWORK_ALLOW_MAP_AS_DRIVE | 0x00000001 | Indicates that users may assign a drive letter to the share (e.g., using the 'Map network drive...' context menu item in Windows File Explorer). |
STGMP_NETWORK_HIDDEN_SHARE | 0x00000002 | Indicates that the share should be skipped during enumeration.
Such shares are only accessible when their name is already known to the accessor. |
STGMP_NETWORK_READ_ACCESS | 0x00000004 | Makes a read-only share available for the mounting point.
When this flag is specified, the <Server Name> part of the MountingPoint parameter value must be empty. Please refer to the Mounting Points topic for more information. This flag makes the struct use the Windows API's NetShareAdd function. As per MSDN, "Only members of the Administrators, System Operators, or Power Users local group can add file shares with a call to the NetShareAdd function." |
STGMP_NETWORK_WRITE_ACCESS | 0x00000008 | Makes a read/write share available for the mounting point.
When this flag is specified, the <Server Name> part of the MountingPoint parameter value must be empty. Please refer to the Mounting Points topic for more information. This flag makes the struct use the Windows API's NetShareAdd function. As per MSDN, "Only members of the Administrators, System Operators, or Power Users local group can add file shares with a call to the NetShareAdd function." |
STGMP_NETWORK_CLAIM_SERVER_NAME | 0x00000010 | Specifies that the server name is unique.
When this flag is specified, the driver handles IOCTL_REDIR_QUERY_PATH[_EX] requests by instructing the OS to direct all requests going to the <Server Name> part of the MountingPoint parameter's value to the driver instead. This flag should be used when the <Server Name> is unique within the local system (e.g., when the application's name is used). Using this flag allows the system to avoid delays caused by certain network requests made by various processes. This flag is also required for "net view" command to be able to show the share in the list. |
STGMP_DRIVE_LETTER_NOTIFY_ASYNC | 0x20000000 | Causes the method to return immediately without waiting for mounting notifications to be sent to the system. |
STGMP_AUTOCREATE_DRIVE_LETTER | 0x40000000 | Tells the struct that it should assign the drive letter automatically.
When this flag is specified, the struct will automatically assign a drive letter from the list of available letters. The assigned letter is added to the end of the list of mounting points, and can be retrieved from there. Do not include a drive letter in the MountingPoint parameter's value when specifying this flag. |
The MountingPointIndex parameter specifies the index of the item in the array. The size of the array is controlled by the MountingPointCount property.
This property is read-only.
Data Type
i32
mounting_point_name Property (CBMemoryDrive Struct)
The mounting point name.
Syntax
fn mounting_point_name(&self , MountingPointIndex : i32) -> Result<String, CBFSStorageError>
Default Value
String::default()
Remarks
The mounting point name.
This property reflects the name of the mounting point (i.e., the value passed to the add_mounting_point method's MountingPoint parameter).
The MountingPointIndex parameter specifies the index of the item in the array. The size of the array is controlled by the MountingPointCount property.
This property is read-only.
Data Type
String
open_files_count Property (CBMemoryDrive Struct)
The number of records in the OpenFile arrays.
Syntax
fn open_files_count(&self ) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
This property controls the size of the following arrays:
The array indices start at 0 and end at open_files_count - 1.This property is read-only.
Data Type
i32
open_file_name Property (CBMemoryDrive Struct)
The name of the open file.
Syntax
fn open_file_name(&self , OpenFileIndex : i32) -> Result<String, CBFSStorageError>
Default Value
String::default()
Remarks
The name of the open file.
This property reflects the name of the open file.
The OpenFileIndex parameter specifies the index of the item in the array. The size of the array is controlled by the OpenFilesCount property.
This property is read-only.
Data Type
String
open_file_process_id Property (CBMemoryDrive Struct)
The Id of the process that opened the file.
Syntax
fn open_file_process_id(&self , OpenFileIndex : i32) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
The Id of the process that opened the file.
This property reflects the Id of the process (PID) that opened the file.
The OpenFileIndex parameter specifies the index of the item in the array. The size of the array is controlled by the OpenFilesCount property.
This property is read-only.
Data Type
i32
open_file_process_name Property (CBMemoryDrive Struct)
The name of the process that opened the file.
Syntax
fn open_file_process_name(&self , OpenFileIndex : i32) -> Result<String, CBFSStorageError>
Default Value
String::default()
Remarks
The name of the process that opened the file.
This property reflects the name of the process that opened the file.
The OpenFileIndex parameter specifies the index of the item in the array. The size of the array is controlled by the OpenFilesCount property.
This property is read-only.
Data Type
String
page_size Property (CBMemoryDrive Struct)
This property specifies the vault's page size.
Syntax
fn page_size(&self ) -> Result<i32, CBFSStorageError>
fn set_page_size(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property controls the page size used when creating new vaults and reflects the page size of the currently open vault. Valid values are 256 through 65536 bytes (inclusive).
A vault's page size is permanent, it cannot be changed after the vault is created. Please refer to the Vaults topic for more information.
Note: This property cannot be changed when active is true, and it cannot be changed within events.
Data Type
i32
path_separator Property (CBMemoryDrive Struct)
This property specifies the path separator character to use when returning vault paths.
Syntax
fn path_separator(&self ) -> Result<i32, CBFSStorageError>
fn set_path_separator(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies the path separator character that the struct APIs should use when returning a vault path. Valid values are as follows:
VAULT_PSC_BACKSLASH | 92 | Backslash ('\').
This character is the Windows path separator. |
VAULT_PSC_SLASH | 47 | Forward slash ('/').
This character is the Unix-style path separator. |
Note: This property is just a convenience; applications are free to use either of the above characters as path separators when passing path strings to the struct's APIs.
Note: This property cannot be changed when active is true, and it cannot be changed within events.
Data Type
i32
possible_free_space Property (CBMemoryDrive Struct)
This property specifies the maximum amount of free space the vault could possibly have available.
Syntax
fn possible_free_space(&self ) -> Result<i64, CBFSStorageError>
Default Value
0
Remarks
This property reflects the maximum amount of free space, in bytes, that the vault could possibly have available. That is, it is the amount of free space that would be available if the vault automatically grew to its maximum possible_size right now, without any additional data being written to it. Therefore:
- If vault_size_max is 0 (unlimited): this property is equivalent to vault_free_space + parent_free_space.
- If vault_size_max is not 0: this property is equivalent to vault_free_space + min(parent_free_space, (vault_size_max - vault_size)).
In both cases, parent_free_space is the amount of free space available for the vault to use for automatic growth. For a file-based vault, this is the total amount of free space on the disk where the vault's storage file (i.e., vault_file) resides, as reported by the OS. For a Callback Mode vault, this is whatever value the application provides through the on_vault_get_parent_size event.
Please refer to the Vault Size topic for more information.
This property is read-only.
Data Type
i64
possible_size Property (CBMemoryDrive Struct)
This property specifies the maximum size the vault could possibly be.
Syntax
fn possible_size(&self ) -> Result<i64, CBFSStorageError>
Default Value
0
Remarks
This property reflects the maximum size, in bytes, that the vault could possibly be. That is, it is the size that the vault would be if it automatically grew as much as possible right now, without any additional data being written to it. Therefore:
- If vault_size_max is 0 (unlimited): this property is equivalent to vault_free_space + parent_free_space.
- If vault_size_max is not 0: this property matches vault_size_max.
In the former case, parent_free_space is the amount of free space available for the vault to use for automatic growth. For a file-based vault, this is the total amount of free space on the disk where the vault's storage file (i.e., vault_file) resides, as reported by the OS. For a Callback Mode vault, this is whatever value the application provides through the on_vault_get_parent_size event.
Please refer to the vault_size topic for more information.
This property is read-only.
Data Type
i64
process_restrictions_enabled Property (CBMemoryDrive Struct)
Whether process access restrictions are enabled.
Syntax
fn process_restrictions_enabled(&self ) -> Result<bool, CBFSStorageError>
fn set_process_restrictions_enabled(&self, value : bool) -> Option<CBFSStorageError>
Default Value
false
Remarks
This property controls whether the struct should enforce per-process access restrictions; by default, it is disabled. When enabled, the add_granted_process and add_denied_process methods can be used to add process-specific access rules for the struct to enforce across the entire virtual drive.
When an application enables this propery, it should use the add_granted_process method to add at least one pocess as allowed; otherwise, the data will be inaccessible.
The current process access rules are reflected by the AccessGrantedProcess* and AccessDeniedProcess* properties.
Note: The methods and properties related to process access lists are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that manipulation and enumeration of process access information occurs in a thread-safe manner.
Data Type
bool
read_only Property (CBMemoryDrive Struct)
This property specifies whether the struct should open a vault in read-only mode.
Syntax
fn read_only(&self ) -> Result<bool, CBFSStorageError>
fn set_read_only(&self, value : bool) -> Option<CBFSStorageError>
Default Value
false
Remarks
This property specifies whether the struct should open a vault in read-only mode. When a vault is opened in read-only mode, the following restrictions apply:
- No new vault items (e.g., files, directories, symbolic links, and alternate streams) may be created.
- No existing vault items may be modified, renamed, moved, or deleted. This includes updating access times.
- The vault cannot be resized or compacted (automatically or explicitly).
- Vault corruption cannot be repaired using check_and_repair.
Note: This list may not necessarily be exhaustive.
Note: This property cannot be changed when active is true, and it cannot be changed within events.
Data Type
bool
report_possible_size Property (CBMemoryDrive Struct)
How the struct should report the virtual drive's size and free space to the OS.
Syntax
fn report_possible_size(&self ) -> Result<bool, CBFSStorageError>
fn set_report_possible_size(&self, value : bool) -> Option<CBFSStorageError>
Default Value
false
Remarks
This property controls which pair of values the struct should use when reporting the virtual drive's size and free space to the OS.
When this property is enabled (default), the struct will use the values of the possible_size and possible_free_space properties. When this property is disabled, the struct will use the values of the vault_size and possible_size properties.
To ensure correct operation, it is recommended that applications keep this property enabled, unless a vault's size has been fixed by setting the vault_size_min and vault_size_max properties equal to each other.
Please refer to the documentation of the properties mentioned above, as well as the Vault Size topic, for more information.
Note: This property cannot be changed within events.
Data Type
bool
storage_characteristics Property (CBMemoryDrive Struct)
The characteristic flags to create the virtual drive with (Windows only).
Syntax
fn storage_characteristics(&self ) -> Result<i32, CBFSStorageError>
fn set_storage_characteristics(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
The system, as well as other applications, use these flags to optimize their use of the virtual drive. This property should be set by OR'ing together zero or more of the following flags:
STGC_FLOPPY_DISKETTE | 0x00000001 | The storage is a floppy disk device.
This flag is not supported when storage_type is set to STGT_DISK_PNP. |
STGC_READONLY_DEVICE | 0x00000002 | The storage is a read-only device. |
STGC_WRITE_ONCE_MEDIA | 0x00000008 | The storage device's media can only be written to once.
This flag is not supported when storage_type is set to STGT_DISK_PNP. |
STGC_REMOVABLE_MEDIA | 0x00000010 | The storage device's media is removable.
Users may remove the storage media from the virtual drive at any time. (Note that this flag does not indicate that the virtual drive itself is removable.) |
STGC_AUTOCREATE_DRIVE_LETTER | 0x00002000 | The system should automatically create a drive letter for the storage device.
Deprecated: Include the STGMP_AUTOCREATE_DRIVE_LETTER flag in the value passed for the add_mounting_point method's Flags parameter instead. When this flag is present, the storage_guid property must be set. This flag only works when storage_type is set to STGT_DISK_PNP. |
STGC_SHOW_IN_EJECTION_TRAY | 0x00004000 | The storage device should be shown in the 'Safely Remove Hardware and Eject Media' menu in the system notification area (system tray).
This flag only works when storage_type is set to STGT_DISK_PNP. |
STGC_ALLOW_EJECTION | 0x00008000 | The storage device can be ejected.
Users may eject the virtual drive at any time. When the virtual drive is ejected, it is destroyed. This flag only works when storage_type is set to STGT_DISK_PNP. |
STGC_RESERVED_1 | 0x00010000 | Reserved, do not use. |
STGC_RESERVED_2 | 0x00020000 | Reserved, do not use. |
Note: This property cannot be changed after a virtual drive is created, and it cannot be changed within events.
Data Type
i32
storage_guid Property (CBMemoryDrive Struct)
The GUID to create the virtual drive with.
Syntax
fn storage_guid(&self ) -> Result<String, CBFSStorageError>
fn set_storage_guid(&self, value : &str) -> Option<CBFSStorageError> fn set_storage_guid_ref(&self, value : &String) -> Option<CBFSStorageError>
Default Value
String::default()
Remarks
This property is used to specify a GUID for the virtual drive, and must be set to GUID-formatted string (e.g., {676D0357-A23A-49c3-B433-65AAD72DD282}). Otherwise, this property may be left empty; in the latter case, the driver will generate a unique value when a drive is mounted.
Some software uses a drive's GUID for the purpose of setting and maintaining certain configuration parameters. Therefore, applications are expected to use the same GUID when repeatedly creating a virtual drive that represents the same data.
In multiuser environments (Terminal Server, Citrix and similar software) where the application may be run concurrently by different users, using the same GUID for all users will cause a name conflict. To avoid it, mix the constant GUID value with the user-unique information such as the hash of the username or SID. This way, each user will use a constant but distinct GUID for their virtual drive.
Note: This property cannot be changed after a virtual drive is created, and it cannot be changed within events.
Data Type
String
storage_type Property (CBMemoryDrive Struct)
The type of virtual drive to create (Windows only).
Syntax
fn storage_type(&self ) -> Result<i32, CBFSStorageError>
fn set_storage_type(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies what type of virtual drive should be created. Windows File Explorer uses this information to display the appropriate icon and apply the appropriate security settings for the virtual drive. Other applications may also make use of this information in various ways.
Possible values are:
STGT_DISK | 0x00000000 | Create a regular disk device. |
STGT_CDROM | 0x00000001 | Create a CD-ROM or DVD device. |
STGT_DISK_PNP | 0x00000003 | Create a plug-and-play storage device.
Important: The PNP Bus system driver must be installed in PnP mode for this option to function properly; this is done by specifying the corresponding constant in a call to the install method. |
Note: This property cannot be changed after a virtual drive is created, and it cannot be changed within events.
Plug-and-play Virtual Drives
Virtual drives created as plug-and-play (STGT_DISK_PNP) require that a "physical device" be visible in the Disk Manager snap-in of the Microsoft Management Console (mmc.exe). This can be accomplished by calling the add_mounting_point method and including the STGMP_MOUNT_MANAGER flag in the value passed for its Flags parameter.
In addition to supporting the STGC_REMOVABLE_MEDIA storage_characteristics flag, which specifies whether a virtual drive's media is removable or non-removable, plug-and-play virtual drives also support the STGC_ALLOW_EJECTION flag, which specifies whether a virtual drive itself is removable or non-removable.
Data Type
i32
tag Property (CBMemoryDrive Struct)
This property stores application-defined data specific to a particular instance of the struct.
Syntax
fn tag(&self ) -> Result<i64, CBFSStorageError>
fn set_tag(&self, value : i64) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property can be used to store data specific to a particular instance of the struct.
Data Type
i64
timeout Property (CBMemoryDrive Struct)
How long vault events may execute before timing out.
Syntax
fn timeout(&self ) -> Result<i32, CBFSStorageError>
fn set_timeout(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies how long the events may execute before timing out.
When this property is set to a non-zero value, and an event executes long enough for its timeout to expire, the driver cancels the underlying request by reporting an error to the OS. The tardy event still runs to completion, but any results it returns once finished are ignored since the underlying request has already been handled.
Setting this property to 0 disables event timeouts, which allows events to take as long as necessary to execute.
Note: This property cannot be changed within events.
Data Type
i32
use_access_time Property (CBMemoryDrive Struct)
This property specifies whether the struct should keep track of last access times for vault items.
Syntax
fn use_access_time(&self ) -> Result<bool, CBFSStorageError>
fn set_use_access_time(&self, value : bool) -> Option<CBFSStorageError>
Default Value
false
Remarks
This property specifies whether the struct should update the last access time for vault items (e.g., files, directories, symbolic links, and alternate streams) every time they are accessed.
Note: Keeping track of access times will slow down operations.
Note: This property cannot be changed when active is true, and it cannot be changed within events.
Data Type
bool
vault_encryption Property (CBMemoryDrive Struct)
This property specifies the whole-vault encryption mode.
Syntax
fn vault_encryption(&self ) -> Result<i32, CBFSStorageError>
fn set_vault_encryption(&self, value : i32) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property controls the whole-vault encryption mode used when creating new vaults and reflects the whole-vault encryption mode of the currently open vault. Valid values are as follows:
VAULT_EM_NONE | 0x0 | Do not use encryption. |
VAULT_EM_DEFAULT | 0x1 | Use default encryption (VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256). |
VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256 | 0x2 | Use AES256 encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash. |
VAULT_EM_CUSTOM256_PBKDF2_HMAC_SHA256 | 0x3 | Use event-based custom 256-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_PBKDF2_HMAC_SHA256 | 0x4 | Use event-based custom 512-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_PBKDF2_HMAC_SHA256 | 0x5 | Use event-based custom 1024-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_CUSTOM_KEY_DERIVE | 0x23 | Use event-based custom 256-bit encryption with custom key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_CUSTOM_KEY_DERIVE | 0x24 | Use event-based custom 512-bit encryption with custom key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_CUSTOM_KEY_DERIVE | 0x25 | Use event-based custom 1024-bit encryption with custom key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_DIRECT_KEY | 0x43 | Use event-based custom 256-bit encryption with no key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM512_DIRECT_KEY | 0x44 | Use event-based custom 512-bit encryption with no key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM1024_DIRECT_KEY | 0x45 | Use event-based custom 1024-bit encryption with no key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_UNKNOWN | 0xFF | Unidentified or unknown encryption. |
Applications that use custom encryption must implement at least the on_data_encrypt and on_data_decrypt events. Certain custom encryption modes may require that the on_hash_calculate or on_key_derive event be implemented as well. Please refer to the Encryption topic for more information.
To create a new vault with whole-vault encryption enabled, the vault_password property must be set as well.
When an existing vault is opened, the struct updates vault_encryption automatically based on the detected whole-vault encryption mode. If the vault is encrypted, the struct will attempt to access it using the password specified by vault_password. If vault_password is incorrect, the attempt will fail and the vault will not be opened.
The vault_encryption and vault_password properties cannot be used to change an open vault's whole-vault encryption mode or password; use the update_vault_encryption method.
Please refer to the Encryption topic for more information.
Note: This property cannot be changed when active is true, and it cannot be changed within events.
Data Type
i32
vault_free_space Property (CBMemoryDrive Struct)
This property reflects the actual amount of free space the vault has available.
Syntax
fn vault_free_space(&self ) -> Result<i64, CBFSStorageError>
Default Value
0
Remarks
This property reflects the actual amount of free space, in bytes, that the vault currently has available. A vault's actual free space is based on its actual size, which is reflected by the vault_size property.
Applications can also determine the maximum amount of free space the vault could possibly have by querying the possible_free_space property; please refer to its documentation, as well as the Vault Size topic, for more information.
This property is read-only.
Data Type
i64
vault_password Property (CBMemoryDrive Struct)
This property specifies the whole-vault encryption password.
Syntax
fn vault_password(&self ) -> Result<String, CBFSStorageError>
fn set_vault_password(&self, value : &str) -> Option<CBFSStorageError> fn set_vault_password_ref(&self, value : &String) -> Option<CBFSStorageError>
Default Value
String::default()
Remarks
This property specifies the whole-vault encryption password to use when creating new vaults and opening existing vaults.
To create a new vault with whole-vault encryption enabled, the vault_encryption property must be set as well.
When an existing vault is opened, the struct updates vault_encryption automatically based on the detected whole-vault encryption mode. If the vault is encrypted, the struct will attempt to access it using the password specified by vault_password. If vault_password is incorrect, the attempt will fail and the vault will not be opened.
The vault_encryption and vault_password properties cannot be used to change an open vault's whole-vault encryption mode or password; use the update_vault_encryption method.
Please refer to the Encryption topic for more information.
Note: This property cannot be changed when active is true, and it cannot be changed within events.
Data Type
String
vault_size Property (CBMemoryDrive Struct)
This property specifies the actual size of the vault.
Syntax
fn vault_size(&self ) -> Result<i64, CBFSStorageError>
fn set_vault_size(&self, value : i64) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies the actual size of the vault, in bytes.
Applications may use this property to explicitly resize a vault, keeping in mind the following:
- A vault cannot shrink more than its available free space allows (i.e., not by more than vault_free_space bytes).
- A vault cannot shrink beyond vault_size_min bytes.
- If vault_size_max is not 0 (unlimited), a vault cannot grow beyond vault_size_max bytes.
- If a vault grows enough to reach or exceed its auto_compact_at threshold, it will automatically shrink again when the next automatic compaction occurs.
Applications can determine the maximum size a vault could possibly be by querying the possible_size property. Please refer to the Vault Size topic for more information.
Note: This property can be changed only when active is true, and it cannot be changed within events.
Data Type
i64
vault_size_max Property (CBMemoryDrive Struct)
This property specifies the maximum size a vault can be.
Syntax
fn vault_size_max(&self ) -> Result<i64, CBFSStorageError>
fn set_vault_size_max(&self, value : i64) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies the maximum size, in bytes, that a vault can be. This property must be set to 0 (unlimited), or a number greater than or equal to 8 * page_size or vault_size_min (whichever is greater).
The limit imposed by this property, if any, applies to both explicit growth of a vault via the vault_size property, and implicit growth of a vault due to storage load. Please refer to the Vault Size topic for more information.
Note: This property cannot be changed within events.
Data Type
i64
vault_size_min Property (CBMemoryDrive Struct)
This property specifies the minimum size a vault can be.
Syntax
fn vault_size_min(&self ) -> Result<i64, CBFSStorageError>
fn set_vault_size_min(&self, value : i64) -> Option<CBFSStorageError>
Default Value
0
Remarks
This property specifies the minimum size, in bytes, that a vault can be. This property's value must be less than or equal to vault_size_max, unless vault_size_max is set to 0 (unlimited).
The limit imposed by this property applies to both explicit shrinking of a vault via the vault_size property or the compact_vault method, and implicit shrinking of a vault via automatic compaction. Please refer to the Vault Size topic for more information.
Note: This property cannot be changed within events.
Data Type
i64
vault_state Property (CBMemoryDrive Struct)
This property specifies information about the state of the vault.
Syntax
fn vault_state(&self ) -> Result<i32, CBFSStorageError>
Default Value
0
Remarks
This property reflects the current state of the vault; its value consists of one or more of the following flags, ORed together:
VAULT_ST_FIXED_SIZE | 0x00000001 | The vault is a fixed size. |
VAULT_ST_READ_ONLY | 0x00000002 | The vault was opened in read-only mode.
Please refer to the read_only property for more information. |
VAULT_ST_CORRUPTED | 0x00000004 | The vault is corrupted.
Applications can use the check_and_repair method to try to repair vault corruption. Please refer to the Vault Corruption topic for more information. |
VAULT_ST_TRANSACTIONS_USED | 0x00000008 | The vault was opened in journaling mode.
Please refer to the use_journaling property for more information. |
VAULT_ST_ACCESS_TIME_USED | 0x00000010 | Last access times are being tracked.
Please refer to the use_access_time property for more information. |
VAULT_ST_ENCRYPTED | 0x00000020 | The vault is encrypted with whole-vault encryption.
Please refer to the Encryption topic for more information. |
VAULT_ST_VALID_PASSWORD_SET | 0x00000040 | The correct whole-vault encryption password has been provided.
Please refer to the Encryption topic for more information. |
VAULT_ST_PHYSICAL_VOLUME | 0x00000080 | The vault is backed by a storage volume or partition formatted with the CBFS Storage filesystem.
This flag only applies when using the CBVaultDrive struct. |
VAULT_ST_PARTED | 0x00000100 | The vault's contents are split across multiple files on disk.
Please refer to the Multipart Vaults topic for more information. |
This property is read-only.
Data Type
i32
add_denied_process Method (CBMemoryDrive Struct)
Adds a rule that prevents a process from accessing the virtual drive .
Syntax
fn add_denied_process(&self, process_file_name : &str, process_id : i32, child_processes : bool, desired_access : i32) -> Result<(), CBFSStorageError>
Remarks
When the process_restrictions_enabled property is enabled, this method can be used to add an access rule that denies the process specified by ProcessFileName or ProcessId the access right specified by DesiredAccess.
Processes that are already running can be specified by passing their process Id (PID) for the ProcessId parameter (in which case ProcessFileName should be empty). Processes that have not yet started can be specified by passing the full file name of the process's executable file for ProcessFileName (in which case ProcessId should be set to 0). If ProcessName is empty, and ProcessId is -1, the new rule will apply to all processes. When adding a PID-based rule, you need to be aware of the PID Reuse behavior of Windows.
ChildProcesses controls whether the rule also applies to children of the target process.
DesiredAccess specifies the access right to deny; valid values are:
STG_DACCESS_READ | 0x00000001 | Grant/deny read access. |
STG_DACCESS_WRITE | 0x00000002 | Grant/deny write access. |
STG_DACCESS_READWRITE | 0x00000003 | Grant/deny read and write access. |
To remove the process access rule later, pass the same ProcessFileName and ProcessId values to the remove_denied_process method.
Note: This method can be called only when active is true, and it cannot be called within events.
The methods and properties related to process access lists are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that manipulation and enumeration of process access information occurs in a thread-safe manner.
add_granted_process Method (CBMemoryDrive Struct)
Adds a rule that allows a process to access the virtual drive .
Syntax
fn add_granted_process(&self, process_file_name : &str, process_id : i32, child_processes : bool, desired_access : i32) -> Result<(), CBFSStorageError>
Remarks
When the process_restrictions_enabled property is enabled, this method can be used to add an access rule that grants the process specified by ProcessFileName or ProcessId the access right specified by DesiredAccess.
Processes that are already running can be specified by passing their process Id (PID) for the ProcessId parameter (in which case ProcessFileName should be empty). Processes that have not yet started can be specified by passing the full file name of the process's executable file for ProcessFileName (in which case ProcessId should be set to 0). If ProcessName is empty, and ProcessId is -1, the new rule will apply to all processes. When adding a PID-based rule, you need to be aware of the PID Reuse behavior of Windows.
ChildProcesses controls whether the rule also applies to children of the target process.
DesiredAccess specifies the access right to grant; valid values are:
STG_DACCESS_READ | 0x00000001 | Grant/deny read access. |
STG_DACCESS_WRITE | 0x00000002 | Grant/deny write access. |
STG_DACCESS_READWRITE | 0x00000003 | Grant/deny read and write access. |
To remove the process access rule later, pass the same ProcessFileName and ProcessId values to the remove_granted_process method.
Note: This method can be called only when active is true, and it cannot be called within events.
The methods and properties related to process access lists are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that manipulation and enumeration of process access information occurs in a thread-safe manner.
add_mounting_point Method (CBMemoryDrive Struct)
Adds a mounting point for the virtual drive.
Syntax
fn add_mounting_point(&self, mounting_point : &str, flags : i32, authentication_id : i64) -> Result<(), CBFSStorageError>
Remarks
This method adds a new mounting point for the virtual drive (which must have already been created using open_vault). Virtual drives may have as many mounting points as desired.
MountingPoint should be set to the name/path of the mounting point. The format of this value varies based what type of mounting point the application wishes to create; please refer to the Mounting Points topic for more information.
The Flags parameter is used to specify properties for the mounting point, and should be set by OR'ing together zero or more of the following flags:
Windows:
STGMP_SIMPLE | 0x00010000 | Create a simple mounting point.
Simple mounting points may be local or global; and when local, can be made visible in either the current user session or another one. This flag cannot be combined with STGMP_MOUNT_MANAGER or STGMP_NETWORK, and is implied if neither of those flags are present. |
STGMP_MOUNT_MANAGER | 0x00020000 | Create a mounting point that appears to the system as a physical device.
When the storage_type property is set to STGT_DISK_PNP, mounting points created using the system mount manager appear as physical devices in the Disk Management snap-in of the Microsoft Management Console (mmc.exe). This flag is a necessary prerequisite for creating a folder mounting point, which makes a drive accessible via an otherwise empty directory on another NTFS volume. This flag cannot be combined with STGMP_SIMPLE, STGMP_NETWORK, or STGMP_LOCAL. Only one mounting point of this type can be added to a virtual drive. |
STGMP_NETWORK | 0x00040000 | Create a network mounting point.
Network mounting points can be further configured using the various STGMP_NETWORK_* flags described below. Applications that plan to make use of network mounting points must be sure to install the Helper DLL before doing so, otherwise Windows File Explorer will not correctly recognize the "network" drive. This flag cannot be combined with STGMP_SIMPLE or STGMP_MOUNT_MANAGER. |
STGMP_LOCAL | 0x10000000 | Specifies that a local mounting point should be created.
This flag specifies that a local mounting point should be created rather than a global one. When this flag is set, applications must also pass an appropriate value for the add_mounting_point method's AuthenticationId parameter. Passing 0 for AuthenticationId will make the mounting point visible in the current user session. To make the mounting point visible in a different user session instead, pass the target session's Authentication ID. This flag is valid when combined with STGMP_SIMPLE or STGMP_NETWORK; it cannot be combined with STGMP_MOUNT_MANAGER. Please note that a mounting point can be made available to other computers as a network share, and network shares are always globally visible on the local machine, even if this flag is set. |
STGMP_NETWORK_ALLOW_MAP_AS_DRIVE | 0x00000001 | Indicates that users may assign a drive letter to the share (e.g., using the 'Map network drive...' context menu item in Windows File Explorer). |
STGMP_NETWORK_HIDDEN_SHARE | 0x00000002 | Indicates that the share should be skipped during enumeration.
Such shares are only accessible when their name is already known to the accessor. |
STGMP_NETWORK_READ_ACCESS | 0x00000004 | Makes a read-only share available for the mounting point.
When this flag is specified, the <Server Name> part of the MountingPoint parameter value must be empty. Please refer to the Mounting Points topic for more information. This flag makes the struct use the Windows API's NetShareAdd function. As per MSDN, "Only members of the Administrators, System Operators, or Power Users local group can add file shares with a call to the NetShareAdd function." |
STGMP_NETWORK_WRITE_ACCESS | 0x00000008 | Makes a read/write share available for the mounting point.
When this flag is specified, the <Server Name> part of the MountingPoint parameter value must be empty. Please refer to the Mounting Points topic for more information. This flag makes the struct use the Windows API's NetShareAdd function. As per MSDN, "Only members of the Administrators, System Operators, or Power Users local group can add file shares with a call to the NetShareAdd function." |
STGMP_NETWORK_CLAIM_SERVER_NAME | 0x00000010 | Specifies that the server name is unique.
When this flag is specified, the driver handles IOCTL_REDIR_QUERY_PATH[_EX] requests by instructing the OS to direct all requests going to the <Server Name> part of the MountingPoint parameter's value to the driver instead. This flag should be used when the <Server Name> is unique within the local system (e.g., when the application's name is used). Using this flag allows the system to avoid delays caused by certain network requests made by various processes. This flag is also required for "net view" command to be able to show the share in the list. |
STGMP_DRIVE_LETTER_NOTIFY_ASYNC | 0x20000000 | Causes the method to return immediately without waiting for mounting notifications to be sent to the system. |
STGMP_AUTOCREATE_DRIVE_LETTER | 0x40000000 | Tells the struct that it should assign the drive letter automatically.
When this flag is specified, the struct will automatically assign a drive letter from the list of available letters. The assigned letter is added to the end of the list of mounting points, and can be retrieved from there. Do not include a drive letter in the MountingPoint parameter's value when specifying this flag. |
Linux and macOS:
STGMP_LOCAL_FUSE | 0x10000000 | Creates a mounting point, accessible only for current user.
If this flag is not passed, the "-oallow_other" option of FUSE is used. |
STGMP_SYMLINK_DEBUG | 0x40000000 | Prints debug messages to stderr
The messages generated by the struct are printed. |
STGMP_SYMLINK_SYSTEM_DEBUG | 0x20000000 | Prints debug messages generated by the FUSE library to stderr |
STGMP_NETWORK_MACOS | 0x00040000 | Create a network mounting point (macOS only).
If this flag is not passed, the "-olocal" option of macFUSE is used. |
For more information about the "-olocal" option of macFUSE, please refer to the macFUSE FAQ.
Windows:
If the STGMP_LOCAL flag is set, the AuthenticationId parameter should be set to the Authentication ID of the user session the mounting point should visible in; or to 0 to make the mounting point visible in the current user session. If the aforementioned flag is not set and AuthenticationId is 0, the mounting point will be global (i.e., visible in all user sessions). When AuthenticationId is set to a non-zero value, STGMP_LOCAL is implied. Please refer to the Mounting Points topic for more information.
Linux, macOS: The AuthenticationId parameter is ignored.
Note: This method cannot be called within events.
The methods and properties related to mounting points are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that manipulation and enumeration of mounting points occurs in a thread-safe manner.
Virtual Drives and Mounting Points
When applications call the open_vault (CBVaultDrive) or create_vault method, the specified vault is opened and used to create and mount a virtual drive. This virtual drive is created without a drive letter.
To add a drive letter for the virtual drive, applications have to call the add_mounting_point method. Once a drive letter is assigned, the virtual drive will be visible to the system and other applications, allowing them to start accessing its files and directories.
cache_file_password Method (CBMemoryDrive Struct)
This method caches an encryption password to use the next time a file or alternate stream is accessed or removes the cached password.
Syntax
fn cache_file_password(&self, file_name : &str, password : &str, ttl_in_cache : i32, remove_from_cache : bool) -> Result<(), CBFSStorageError>
Remarks
This method temporarily caches an encryption password so that it can be used the next time the file or alternate stream specified by FileName is accessed.
The value passed for FileName must be a vault-local absolute path.
The Password parameter specifies the password to cache. It must match the one last used to encrypt the specified file or the alternate stream; otherwise, this method .
The specified password is automatically removed from the cache as soon as one of the following things occur:
- The password is used to access the file or alternate stream and the value of the TTLInCache parameter is 0.
- The password for the file or alternate stream is changed.
- The vault is closed.
- The timeout expires.
To remove the previously cached password from the cache, set the RemoveFromCache parameter to true. When it is set so, the value of the Password parameter is ignored.
The TTLInCache parameter specifies time to seconds that the struct keeps the password in the internal cache to reduce the number of requests for a password. The value of 0 tells the struct to discard the password after the first use.
As an alternative to using this method, applications can provide a default file encryption password using the default_file_access_password property or provide such passwords dynamically using the on_file_password_needed event.
Note: This method can be called only when active is true.
check_and_repair Method (CBMemoryDrive Struct)
This method checks a vault's consistency and repairs it as necessary.
Syntax
fn check_and_repair(&self, flags : i32) -> Result<(), CBFSStorageError>
Remarks
This method checks the consistency of a vault and attempts to repair it as necessary.
Applications should call this method if a vault has become corrupted (i.e., if the is_corrupted property is true, or if a vault operation fails with a "Vault Corrupted" error). Be sure to make a vault backup before calling this method, because its repair efforts may cause data loss in cases of severe corruption. Please refer to the Vault Corruption topic for more information.
The Flags parameter is used to specify additional options, and it should be set by ORing together zero or more of the following flags:
VAULT_CR_CHECK_ONLY | 0x00000001 | Check only, do not attempt any repairs. |
VAULT_CR_CHECK_ALL_PAGES | 0x00000002 | Check all vault pages, including empty ones.
When this flag is not present, only the vault pages that are marked as occupied are checked. |
Note: This method cannot be called when active is true, and it cannot be called within events.
check_file_password Method (CBMemoryDrive Struct)
This method verifies whether a particular file password is correct.
Syntax
fn check_file_password(&self, file_name : &str, password : &str) -> Result<bool, CBFSStorageError>
Remarks
This method verifies whether the specified Password matches the one used to encrypt the file or alternate stream specified by FileName. If the password is correct, this method returns true; otherwise, it returns false.
The value passed for FileName must be a vault-local absolute path.
Please refer to the Encryption topic for more information.
Note: This method can be called only when active is true.
check_vault_password Method (CBMemoryDrive Struct)
This method verifies whether a particular vault password is correct.
Syntax
fn check_vault_password(&self, password : &str) -> Result<bool, CBFSStorageError>
Remarks
This method verifies whether the specified Password matches the one used to encrypt the vault. If the password is correct, this method returns true; otherwise, it returns false.
Please refer to the Encryption topic for more information.
Note: This method can be called only when active is true.
close_opened_files_snapshot Method (CBMemoryDrive Struct)
Closes the previously-created opened files snapshot.
Syntax
fn close_opened_files_snapshot(&self) -> Result<(), CBFSStorageError>
Remarks
This method closes the opened files snapshot previously created by create_opened_files_snapshot, releasing the memory associated with it. Please refer to that method's documentation for more information.
Note: This method cannot be called within events.
The methods and properties related to open files snapshots are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that creation, use, and cleanup of open files snapshots occurs in a thread-safe manner.
close_vault Method (CBMemoryDrive Struct)
Closes the vault.
Syntax
fn close_vault(&self, force : bool) -> Result<(), CBFSStorageError>
Remarks
This method closes the currently-open vault.
For CBVaultDrive, the Force parameter specifies whether to forcefully close any file or directory handles open currently. If Force is false, this method will fail if any handles are currently open.
Note: This method can be called only when active is true.
compact_vault Method (CBMemoryDrive Struct)
This method compacts the vault.
Syntax
fn compact_vault(&self) -> Result<bool, CBFSStorageError>
Remarks
This method triggers vault compaction, which is a process that shrinks a vault's overall size by truncating its free space. If the compacting operation completes successfully, this method returns true; otherwise, it returns false.
Compaction involves physically moving a vault's occupied pages to the beginning of the vault, and then truncating the unoccupied pages from the end of the vault. The runtime of a compacting operation depends on a number of factors, and it is possible for it to be interrupted by other vault operations.
Compaction occurs automatically when the vault's free space percentage exceeds the threshold specified by the auto_compact_at property. Applications can also use the AutoCompactDelay configuration setting to add a delay to the automatic compaction trigger.
Note: A vault opened in read_only mode cannot be compacted, either automatically or explicitly.
Note: This method can be called only when active is true, and it cannot be called within events.
config Method (CBMemoryDrive Struct)
Sets or retrieves a configuration setting.
Syntax
fn config(&self, configuration_string : &str) -> Result<String, CBFSStorageError>
Remarks
config is a generic method available in every struct. It is used to set and retrieve configuration settings for the struct.
These settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the struct, access to these internal properties is provided through the config method.
To set a configuration setting named PROPERTY, you must call Config("PROPERTY=VALUE"), where VALUE is the value of the setting expressed as a string. For boolean values, use the strings "True", "False", "0", "1", "Yes", or "No" (case does not matter).
To read (query) the value of a configuration setting, you must call Config("PROPERTY"). The value will be returned as a string.
convert_to_drive_path Method (CBMemoryDrive Struct)
Converts a vault-local vault item path to a virtual drive file path (Windows only).
Syntax
fn convert_to_drive_path(&self, vault_file_path : &str) -> Result<String, CBFSStorageError>
Remarks
This method returns a virtual drive file path that corresponds to the vault item (file, directory, or symbolic link) specified by VaultFilePath.
The value passed for VaultFilePath must be a vault-local absolute path.
The value returned by this method is a fully-qualified file path formatted according to OS conventions, suitable for passing to system file APIs and/or external applications.
Note: This method can be called only when active is true.
convert_to_vault_path Method (CBMemoryDrive Struct)
Converts a virtual drive file path to a vault-local vault item path (Windows only).
Syntax
fn convert_to_vault_path(&self, virtual_file_path : &str) -> Result<String, CBFSStorageError>
Remarks
This method returns the vault-local absolute path of the vault item (file, directory, or symbolic link) that corresponds to the virtual drive file path specified by VirtualFilePath.
The value passed for VirtualFilePath must be a fully-qualified file path formatted according to OS conventions.
The value returned by this method can be used to access the corresponding vault item using the struct APIs.
Note: This method can be called only when active is true.
create_directory Method (CBMemoryDrive Struct)
This method creates a new directory in the vault.
Syntax
fn create_directory(&self, directory : &str, create_parents : bool) -> Result<(), CBFSStorageError>
Remarks
This method creates a new directory in the vault at the path specified by Directory.
The value passed for Directory must be a vault-local absolute path.
The CreateParents parameter specifies whether nonexistent parent directories in the specified path should be created as well. If this parameter is false, and one or more parent directories are missing, this method .
Note: This method can be called only when active is true, and it cannot be called within events.
create_link Method (CBMemoryDrive Struct)
This method creates a symbolic link to another file in the vault.
Syntax
fn create_link(&self, link_name : &str, destination_name : &str) -> Result<(), CBFSStorageError>
Remarks
This method creates a new symbolic link named LinkName that points to the file specified by DestinationName.
The value passed for LinkName must be a vault-local absolute path. The value passed for DestinationName must also be a vault-local path, but it may be absolute or relative to LinkName.
Note: This method can be called only when active is true, and it cannot be called within events.
create_opened_files_snapshot Method (CBMemoryDrive Struct)
Creates a snapshot of information about files that are currently open.
Syntax
fn create_opened_files_snapshot(&self) -> Result<(), CBFSStorageError>
Remarks
This method creates a snapshot of information about all files and directories in the virtual filesystem that are currently open. This information is then used to populate the OpenFile* properties.
Note that there will always be at least one item in the OpenFile* properties since the virtual volume itself is always inherently open.
When the application is finished working with the opened files snapshot, it must close it by calling the close_opened_files_snapshot method in order to release the associated memory. If this method is called again before an existing snapshot is closed, the struct will attempt to close it before creating a new one.
Note: This method can be called only when active is true, and it cannot be called within events.
The methods and properties related to open files snapshots are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that creation, use, and cleanup of open files snapshots occurs in a thread-safe manner.
create_vault Method (CBMemoryDrive Struct)
Creates an in-memory vault.
Syntax
fn create_vault(&self) -> Result<(), CBFSStorageError>
Remarks
This method creates a vault in memory using the properties and configuration settings, listed below. Please refer to each one's documentation for more information, including usage restrictions.
- auto_compact_at property
- AutoCompactDelay configuration setting
- case_sensitive property
- logo property
- MaxNonPagedNameLength configuration setting
- page_size property
- path_separator property
- read_only property
- use_access_time property
Note: This method cannot be called when active is true, and it cannot be called within events.
delete_file Method (CBMemoryDrive Struct)
This method deletes a vault item.
Syntax
fn delete_file(&self, file_name : &str) -> Result<(), CBFSStorageError>
Remarks
This method deletes the vault item (file, directory, symbolic link, or alternate stream) specified by FileName from the vault.
The value passed for FileName must be a vault-local absolute path.
Please note the following:
- When a file is deleted, any alternate streams it contains are deleted as well.
- Directories must be empty to be deleted; otherwise, this method . Use the is_directory_empty method to check whether a directory is empty.
- Deleting a symbolic link only deletes the link itself, not the file it points to.
Note: This method can be called only when active is true, and it cannot be called within events.
delete_file_tag Method (CBMemoryDrive Struct)
This method deletes a file tag.
Syntax
fn delete_file_tag(&self, file_name : &str, tag_id : i32, tag_name : &str) -> Result<(), CBFSStorageError>
Remarks
This method deletes the file tag identified by TagId or TagName from the file, directory, or alternate stream specified by FileName.
The value passed for FileName must be a vault-local absolute path.
To delete a raw file tag, pass its Id for TagId and pass an empty string for TagName. To delete a typed file tag, pass its name for TagName and pass 0 for TagId. If values are provided for both TagId and TagName, this method .
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
file_exists Method (CBMemoryDrive Struct)
This method checks whether a vault item exists.
Syntax
fn file_exists(&self, file_name : &str) -> Result<bool, CBFSStorageError>
Remarks
This method checks whether a vault item (file, directory, symbolic link, or alternate stream) with the specified FileName exists in the vault. If the specified vault item exists, this method returns true; otherwise, it returns false.
The value passed for FileName must be a vault-local absolute path.
Note: This method can be called only when active is true.
file_matches_mask Method (CBMemoryDrive Struct)
This method checks whether a particular file or directory name matches the specified mask.
Syntax
fn file_matches_mask(&self, mask : &str, file_name : &str, case_sensitive : bool) -> Result<bool, CBFSStorageError>
Remarks
This method checks whether the file or directory name specified by FileName matches Mask; if it does, this method returns true. The CaseSensitive parameter controls whether a case-sensitive match should be performed.
Note: This method does not handle so-called DOS_* wildcards (DOS_STAR, DOS_QM, DOS_DOT). The explanation about the characters can be found in the MSDN article. If you have a mask that includes one of those characters on Windows, you can use the RtlIsNameInExpression function of Windows API.
Note: As the explanation states, "When you do a case-insensitive search and do not provide a translation table, the name is converted to uppercase."
file_tag_exists Method (CBMemoryDrive Struct)
This method checks whether a file tag exists.
Syntax
fn file_tag_exists(&self, file_name : &str, tag_id : i32, tag_name : &str) -> Result<bool, CBFSStorageError>
Remarks
This method checks whether a file tag with the specified TagId or TagName is attached to the file, directory, or alternate stream specified by FileName. If the specified file tag exists, this method returns true; otherwise, it returns false.
The value passed for FileName must be a vault-local absolute path.
To check for a raw file tag, pass its Id for TagId and pass an empty string for TagName. To check for a typed file tag, pass its name for TagName and pass 0 for TagId. If values are provided for both TagId and TagName, this method .
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true.
file_time_to_nanoseconds Method (CBMemoryDrive Struct)
This method returns the subsecond part of the time expressed in nanoseconds.
Syntax
fn file_time_to_nanoseconds(&self, file_time : &chrono::DateTime<Utc>) -> Result<i32, CBFSStorageError>
Remarks
Use this method to obtain the subsecond part of the FileTime value, expressed in nanoseconds.
file_time_to_unix_time Method (CBMemoryDrive Struct)
This method converts FileTime to Unix time format.
Syntax
fn file_time_to_unix_time(&self, file_time : &chrono::DateTime<Utc>) -> Result<i64, CBFSStorageError>
Remarks
Use this method to convert the FileTime value to Unix time format. The subsecond part of the value is not preserved; to obtain it, use the file_time_to_nanoseconds method.
find_close Method (CBMemoryDrive Struct)
This method closes a search operation and releases any associated resources.
Syntax
fn find_close(&self, search_id : i64) -> Result<(), CBFSStorageError>
Remarks
This method closes the search operation identified by SearchId, releasing any previously allocated resources associated with it.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
Note: This method can be called only when active is true.
find_first Method (CBMemoryDrive Struct)
This method searches for the first vault item that matches the specified name and attributes.
Syntax
fn find_first(&self, file_mask : &str, attributes : i32, flags : i32) -> Result<i64, CBFSStorageError>
Remarks
This method initiates a search operation based on the specified FileMask, Attributes, and Flags. If there are any matching vault items (files, directories, symbolic links, or alternate streams), then a search operation Id is returned. If there are no matching vault items, then -1 is returned.
To obtain information about a search result, pass the returned search handle to the following methods:
- get_search_result_attributes
- get_search_result_creation_time
- get_search_result_full_name
- get_search_result_last_access_time
- get_search_result_link_destination
- get_search_result_metadata_size
- get_search_result_modification_time
- get_search_result_name
- get_search_result_size
To retrieve the next search result, pass the returned search handle to the find_next method. When an application is finished with (or wants to abandon) a search operation, it must pass the associated search handle to the find_close method to release the resources associated with it.
Because each search operation is identified by the search handle associated with it, applications may initiate additional search operations at any time and may process each operation's search results in any manner it desires (e.g., sequentially, round robin).
The FileMask parameter specifies both the directory path to search within and the file name mask to match against (e.g., \directory\to\search\*.txt). Or, when searching a file's alternate streams, it specifies the file path and stream name mask (e.g., \path\to\file:*). Only the mask may contain wildcards. The path must be specified in vault-local absolute format. Also note that files without an extension will match *, but not *.*.
The Attributes parameter specifies the attributes to match against; items will match only if they have one or more of the specified attributes. The value passed for this parameter should be constructed by ORing together zero or more of the following values. Passing 0 will allow any file in a directory (or, any alternate stream in a file) to match; it is equivalent to VAULT_FATTR_FILE | VAULT_FATTR_DATA_STREAM.
VAULT_FATTR_FILE | 0x00000001 | The entry is a file. |
VAULT_FATTR_DIRECTORY | 0x00000002 | The entry is a directory. |
VAULT_FATTR_DATA_STREAM | 0x00000004 | The entry is an alternate data stream. |
VAULT_FATTR_COMPRESSED | 0x00000008 | The file or stream is compressed. |
VAULT_FATTR_ENCRYPTED | 0x00000010 | The file or stream is encrypted. |
VAULT_FATTR_SYMLINK | 0x00000020 | The entry is a symbolic link. |
VAULT_FATTR_READONLY | 0x00000040 | The file is read-only.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_ARCHIVE | 0x00000080 | The file requires archiving.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_HIDDEN | 0x00000100 | The file is hidden.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_SYSTEM | 0x00000200 | The file is a system file.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_TEMPORARY | 0x00000400 | The file is temporary.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_DELETE_ON_CLOSE | 0x00000800 | The file should be deleted when the last handle to the file is closed.
This attribute is currently not supported by CBFS Storage. |
VAULT_FATTR_RESERVED_0 | 0x00001000 | Reserved. |
VAULT_FATTR_RESERVED_1 | 0x00002000 | Reserved. |
VAULT_FATTR_RESERVED_2 | 0x00004000 | Reserved. |
VAULT_FATTR_RESERVED_3 | 0x00008000 | Reserved. |
VAULT_FATTR_NO_USER_CHANGE | 0x0000F03F | A mask that includes all attributes that cannot be changed.
Applications cannot use the set_file_attributes method to directly change any of the following attributes: FILE, DIRECTORY, DATA_STREAM, COMPRESSED, ENCRYPTED, SYMLINK, RESERVED_0, RESERVED_1, RESERVED_2, or RESERVED_3. |
VAULT_FATTR_USER_DEFINED | 0x7FF00000 | A mask for application-defined attributes.
Applications can use the set_file_attributes method to set custom attributes, as long as their values are covered by this mask. |
VAULT_FATTR_ANY_FILE | 0x7FFFFFFF | A mask that includes any and all attributes. |
The Flags parameter controls search behavior. Among other things, it can be used to request that only specific pieces of information be returned, which can greatly improve performance. The value passed for this parameter should be constructed by ORing together zero or more of the following values:
VAULT_FF_NEED_NAME | 0x00000001 | Include entry names (without paths) when returning search results. |
VAULT_FF_NEED_FULL_NAME | 0x00000002 | Include fully qualified entry names when returning search results. |
VAULT_FF_NEED_ATTRIBUTES | 0x00000004 | Include entry attributes when returning search results. |
VAULT_FF_NEED_SIZE | 0x00000008 | Include entry sizes when returning search results. |
VAULT_FF_NEED_METADATA_SIZE | 0x00000010 | Include entry metadata sizes when returning search results. |
VAULT_FF_NEED_TIMES | 0x00000020 | Include entry times when returning search results. |
VAULT_FF_NEED_LINK_DEST | 0x00000040 | Include symbolic link destinations when returning search results. |
VAULT_FF_EMULATE_FAT | 0x00001000 | Inserts . and .. pseudo-entries into search results for all directories except the root one. |
VAULT_FF_RECURSIVE | 0x00002000 | Search recursively in all subdirectories. |
VAULT_FF_CASE_INSENSITIVE | 0x00004000 | Forces case-insensitive search, even if the vault is case-sensitive. |
Note: This method can be called only when active is true, and it cannot be called within events.
find_first_by_query Method (CBMemoryDrive Struct)
This method searches for the first file or directory whose file tags match the specified query.
Syntax
fn find_first_by_query(&self, directory : &str, query : &str, flags : i32) -> Result<i64, CBFSStorageError>
Remarks
This method initiates a search operation within the specified Directory for files and subdirectories whose typed file tags match the specified Query. If there are any matching files or directories, then a search operation Id is returned. If there are no matching files or directories, then -1 is returned.
To obtain information about a search result, pass the returned search handle to the following methods:
- get_search_result_attributes
- get_search_result_creation_time
- get_search_result_full_name
- get_search_result_last_access_time
- get_search_result_link_destination
- get_search_result_metadata_size
- get_search_result_modification_time
- get_search_result_name
- get_search_result_size
To retrieve the next search result, pass the returned search handle to the find_next method. When an application is finished with (or wants to abandon) a search operation, it must pass the associated search handle to the find_close method to release the resources associated with it.
Because each search operation is identified by the search handle associated with it, applications may initiate additional search operations at any time and may process each operation's search results in any manner it desires (e.g., sequentially, round robin).
The value passed for Directory must be a vault-local absolute path.
The value passed for Query must be a search query constructed using the CBFS Storage Query Language; please refer to that topic for more information.
The Flags parameter controls search behavior. Among other things, it can be used to request that only specific pieces of information be returned, which can greatly improve performance. The value passed for this parameter should be constructed by ORing together zero or more of the following values:
VAULT_FF_NEED_NAME | 0x00000001 | Include entry names (without paths) when returning search results. |
VAULT_FF_NEED_FULL_NAME | 0x00000002 | Include fully qualified entry names when returning search results. |
VAULT_FF_NEED_ATTRIBUTES | 0x00000004 | Include entry attributes when returning search results. |
VAULT_FF_NEED_SIZE | 0x00000008 | Include entry sizes when returning search results. |
VAULT_FF_NEED_METADATA_SIZE | 0x00000010 | Include entry metadata sizes when returning search results. |
VAULT_FF_NEED_TIMES | 0x00000020 | Include entry times when returning search results. |
VAULT_FF_NEED_LINK_DEST | 0x00000040 | Include symbolic link destinations when returning search results. |
VAULT_FF_EMULATE_FAT | 0x00001000 | Inserts . and .. pseudo-entries into search results for all directories except the root one. |
VAULT_FF_RECURSIVE | 0x00002000 | Search recursively in all subdirectories. |
VAULT_FF_CASE_INSENSITIVE | 0x00004000 | Forces case-insensitive search, even if the vault is case-sensitive. |
Note: This method can be called only when active is true, and it cannot be called within events.
find_next Method (CBMemoryDrive Struct)
This method searches for the next vault item that matches an ongoing search operation.
Syntax
fn find_next(&self, search_id : i64) -> Result<bool, CBFSStorageError>
Remarks
This method searches for the next vault item (file, directory, symbolic link, or alternate stream) that matches the ongoing search operation identified by SearchId. If a matching vault item is found, this method returns true; otherwise, it returns false.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query. Please refer to the methods' documentation for more information about search operations.
Note: This method can be called only when active is true, and it cannot be called within events.
get_driver_status Method (CBMemoryDrive Struct)
Retrieves the status of the system driver.
Syntax
fn get_driver_status(&self, product_guid : &str, module : i32) -> Result<i32, CBFSStorageError>
Remarks
This method retrieves the status of the system driver module specified by Module. This status can then be used to verify whether it has been properly installed and is ready for use.
The value returned by the method corresponds to the dwCurrentState field of the SERVICE_STATUS structure from the Windows API. It will be one of the following:
MODULE_STATUS_NOT_PRESENT | 0x00000000 | The specified module is not present on the system.
Note: This functionality is only available in Windows. |
MODULE_STATUS_STOPPED | 0x00000001 | The specified module is in the Stopped state.
Note: This functionality is only available in Windows. |
MODULE_STATUS_RUNNING | 0x00000004 | The specified module is loaded and running.
Note: This functionality is only available in Windows. |
ProductGUID is used to distinguish between driver installations performed by different applications. Such information is necessary to guard against unexpected situations such as, e.g., the driver being uninstalled by one application despite other applications still needing it.
The GUID must be specified in so-called "Registry Format" (e.g., "{1FAD0EF2-9A03-4B87-B4BC-645B7035ED90}") with curly braces included.
To ensure proper operation, it is critical that each individual application have its own unique ProductGUID value, and that applications (and their installation scripts) use that value when calling any of the following methods:
The Module parameter specifies which driver module to query the status of. Possible values are:
MODULE_DRIVER_PNP_BUS | 0x00000001 | PnP Bus Driver (.sys file).
This module must be installed if the application wishes to make use of Plug-and-Play (PnP) storage features struct in Windows. PnP storage devices are those visible as disks in the Device Manager, and the system treats such storage devices differently from other purely virtual devices. The virtual disk driver must be re-installed anytime this module is added or removed. |
MODULE_DRIVER_BLOCK | 0x00000002 | Virtual disk driver (.sys file).
The product's virtual disk driver module, which provides core functionality; it must be installed for the struct to function correctly. |
MODULE_DRIVER_FS | 0x00000004 | Filesystem driver (.sys file).
The product's filesystem driver module, which provides core functionality; it must be installed for the struct to function correctly. |
MODULE_HELPER_DLL | 0x00010000 | Shell Helper DLL (CBVaultDriveShellHelper2024.dll)
This module provides supplementary functionality for the struct; please refer to the Helper DLL topic for more information. Note: Not applicable when calling the get_driver_status method. |
This method is available in both the struct API and the Installer DLL included with the product; please refer to the Driver Installation in Windows topic for more information about the latter.
Note: This method cannot be called within events.
get_file_attributes Method (CBMemoryDrive Struct)
This method retrieves the attributes of a vault item.
Syntax
fn get_file_attributes(&self, file_name : &str) -> Result<i32, CBFSStorageError>
Remarks
This method retrieves the attributes of the vault item (e.g., file, directory, symbolic link, or alternate stream) specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The specified vault item's attributes are returned as a 32-bit integer composed of one or more of the following values:
VAULT_FATTR_FILE | 0x00000001 | The entry is a file. |
VAULT_FATTR_DIRECTORY | 0x00000002 | The entry is a directory. |
VAULT_FATTR_DATA_STREAM | 0x00000004 | The entry is an alternate data stream. |
VAULT_FATTR_COMPRESSED | 0x00000008 | The file or stream is compressed. |
VAULT_FATTR_ENCRYPTED | 0x00000010 | The file or stream is encrypted. |
VAULT_FATTR_SYMLINK | 0x00000020 | The entry is a symbolic link. |
VAULT_FATTR_READONLY | 0x00000040 | The file is read-only.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_ARCHIVE | 0x00000080 | The file requires archiving.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_HIDDEN | 0x00000100 | The file is hidden.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_SYSTEM | 0x00000200 | The file is a system file.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_TEMPORARY | 0x00000400 | The file is temporary.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_DELETE_ON_CLOSE | 0x00000800 | The file should be deleted when the last handle to the file is closed.
This attribute is currently not supported by CBFS Storage. |
VAULT_FATTR_RESERVED_0 | 0x00001000 | Reserved. |
VAULT_FATTR_RESERVED_1 | 0x00002000 | Reserved. |
VAULT_FATTR_RESERVED_2 | 0x00004000 | Reserved. |
VAULT_FATTR_RESERVED_3 | 0x00008000 | Reserved. |
VAULT_FATTR_NO_USER_CHANGE | 0x0000F03F | A mask that includes all attributes that cannot be changed.
Applications cannot use the set_file_attributes method to directly change any of the following attributes: FILE, DIRECTORY, DATA_STREAM, COMPRESSED, ENCRYPTED, SYMLINK, RESERVED_0, RESERVED_1, RESERVED_2, or RESERVED_3. |
VAULT_FATTR_USER_DEFINED | 0x7FF00000 | A mask for application-defined attributes.
Applications can use the set_file_attributes method to set custom attributes, as long as their values are covered by this mask. |
VAULT_FATTR_ANY_FILE | 0x7FFFFFFF | A mask that includes any and all attributes. |
Note: This method can be called only when active is true.
get_file_compression Method (CBMemoryDrive Struct)
This method retrieves the compression mode of a file or alternate stream.
Syntax
fn get_file_compression(&self, file_name : &str) -> Result<i32, CBFSStorageError>
Remarks
This method retrieves the compression mode of the file or alternate stream specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The returned compression mode will be one of the following values:
VAULT_CM_NONE | 0 | Do not use compression. |
VAULT_CM_DEFAULT | 1 | Use default compression (zlib). |
VAULT_CM_CUSTOM | 2 | Use event-based custom compression.
This compression level is not used. |
VAULT_CM_ZLIB | 3 | Use zlib compression.
Valid compression levels are 1-9. |
VAULT_CM_RLE | 4 | Use RLE compression.
This compression level is not used. |
Applications that use custom compression must implement the on_data_compress and on_data_decompress events. Please refer to the Compression topic for more information.
Note: This method can be called only when active is true.
get_file_creation_time Method (CBMemoryDrive Struct)
This method retrieves the creation time of a vault item.
Syntax
fn get_file_creation_time(&self, file_name : &str) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Remarks
This method retrieves the creation time of the vault item (e.g., file, directory, symbolic link, or alternate stream) specified by FileName. The timestamps returned by this method are specified in UTC.
The value passed for FileName must be a vault-local absolute path.
Note: This method can be called only when active is true.
get_file_encryption Method (CBMemoryDrive Struct)
This method retrieves the encryption mode of a file or alternate stream.
Syntax
fn get_file_encryption(&self, file_name : &str) -> Result<i32, CBFSStorageError>
Remarks
This method retrieves the encryption mode of the file or alternate stream specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The returned encryption mode will be one of the following values:
VAULT_EM_NONE | 0x0 | Do not use encryption. |
VAULT_EM_DEFAULT | 0x1 | Use default encryption (VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256). |
VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256 | 0x2 | Use AES256 encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash. |
VAULT_EM_CUSTOM256_PBKDF2_HMAC_SHA256 | 0x3 | Use event-based custom 256-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_PBKDF2_HMAC_SHA256 | 0x4 | Use event-based custom 512-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_PBKDF2_HMAC_SHA256 | 0x5 | Use event-based custom 1024-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_CUSTOM_KEY_DERIVE | 0x23 | Use event-based custom 256-bit encryption with custom key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_CUSTOM_KEY_DERIVE | 0x24 | Use event-based custom 512-bit encryption with custom key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_CUSTOM_KEY_DERIVE | 0x25 | Use event-based custom 1024-bit encryption with custom key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_DIRECT_KEY | 0x43 | Use event-based custom 256-bit encryption with no key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM512_DIRECT_KEY | 0x44 | Use event-based custom 512-bit encryption with no key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM1024_DIRECT_KEY | 0x45 | Use event-based custom 1024-bit encryption with no key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_UNKNOWN | 0xFF | Unidentified or unknown encryption. |
Applications that use custom encryption must implement at least the on_data_encrypt and on_data_decrypt events. Certain custom encryption modes may require that the on_hash_calculate or on_key_derive event be implemented as well. Please refer to the Encryption topic for more information.
Note: This method can be called only when active is true.
get_file_last_access_time Method (CBMemoryDrive Struct)
This method retrieves the last access time of a vault item.
Syntax
fn get_file_last_access_time(&self, file_name : &str) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Remarks
This method retrieves the creation time of the vault item (e.g., file, directory, symbolic link, or alternate stream) specified by FileName. The timestamps returned by this method are specified in UTC.
Note: Vault items' last access times are updated only if the use_access_time property is enabled.
The value passed for FileName must be a vault-local absolute path.
Note: This method can be called only when active is true.
get_file_modification_time Method (CBMemoryDrive Struct)
This method retrieves the modification time of a vault item.
Syntax
fn get_file_modification_time(&self, file_name : &str) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Remarks
This method retrieves the modification time of the vault item (e.g., file, directory, symbolic link, or alternate stream) specified by FileName. The timestamps returned by this method are specified in UTC.
The value passed for FileName must be a vault-local absolute path.
Note: This method can be called only when active is true.
get_file_size Method (CBMemoryDrive Struct)
This method retrieves the size of a file or alternate stream.
Syntax
fn get_file_size(&self, file_name : &str) -> Result<i64, CBFSStorageError>
Remarks
This method retrieves the size, in bytes, of the file or alternate stream specified by FileName.
Note: For files, the returned value reflects only the size of the file's immediate contents, it does not account for any alternate streams the file may or may not contain.
The value passed for FileName must be a vault-local absolute path.
Note: This method can be called only when active is true.
get_file_tag Method (CBMemoryDrive Struct)
This method retrieves the binary data held by a raw file tag attached to the specified vault item.
Syntax
fn get_file_tag(&self, file_name : &str, tag_id : i32) -> Result<Vec<u8>, CBFSStorageError>
Remarks
This method retrieves the binary data held by a raw file tag, identified by TagId, attached to the vault item (e.g., file, directory, or alternate stream) specified by FileName. If a raw file tag with the specified TagId is not attached to the specified vault item, this method .
The value passed for FileName must be a vault-local absolute path. The value passed for TagId must be in the range 0x0001 to 0xCFFF (inclusive).
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true.
get_file_tag_as_ansi_string Method (CBMemoryDrive Struct)
This method retrieves the value of an AnsiString-typed file tag attached to the specified vault item.
Syntax
fn get_file_tag_as_ansi_string(&self, file_name : &str, tag_name : &str) -> Result<String, CBFSStorageError>
Remarks
This method retrieves the value of an AnsiString-typed file tag, identified by TagName, attached to the vault item (e.g., file, directory, or alternate stream) specified by FileName. If an AnsiString-typed file tag with the specified TagName is not attached to the specified vault item, this method .
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
Please refer to the File Tags topic for more information.
This method can only retrieve typed file tags created with the set_file_tag_as_ansi_string method. Typed file tags created with the set_file_tag_as_string method must be retrieved using the get_file_tag_as_string method.
Note: This method can be called only when active is true.
get_file_tag_as_boolean Method (CBMemoryDrive Struct)
This method retrieves the value of a Boolean-typed file tag attached to the specified vault item.
Syntax
fn get_file_tag_as_boolean(&self, file_name : &str, tag_name : &str) -> Result<bool, CBFSStorageError>
Remarks
This method retrieves the value of a Boolean-typed file tag, identified by TagName, attached to the vault item (e.g., file, directory, or alternate stream) specified by FileName. If a Boolean-typed file tag with the specified TagName is not attached to the specified vault item, this method .
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true.
get_file_tag_as_date_time Method (CBMemoryDrive Struct)
This method retrieves the value of a DateTime-typed file tag attached to the specified vault item.
Syntax
fn get_file_tag_as_date_time(&self, file_name : &str, tag_name : &str) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Remarks
This method retrieves the value of a DateTime-typed file tag, identified by TagName, attached to the vault item (e.g., file, directory, or alternate stream) specified by FileName. If a DateTime-typed file tag with the specified TagName is not attached to the specified vault item, this method .
The timestamps returned by this method are specified in UTC.
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true.
get_file_tag_as_number Method (CBMemoryDrive Struct)
This method retrieves the value of a Number-typed file tag attached to the specified vault item.
Syntax
fn get_file_tag_as_number(&self, file_name : &str, tag_name : &str) -> Result<i64, CBFSStorageError>
Remarks
This method retrieves the value of a Number-typed file tag, identified by TagName, attached to the vault item (e.g., file, directory, or alternate stream) specified by FileName. If a Number-typed file tag with the specified TagName is not attached to the specified vault item, this method .
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true.
get_file_tag_as_string Method (CBMemoryDrive Struct)
This method retrieves the value of a String-typed file tag attached to the specified vault item.
Syntax
fn get_file_tag_as_string(&self, file_name : &str, tag_name : &str) -> Result<String, CBFSStorageError>
Remarks
This method retrieves the value of a String-typed file tag, identified by TagName, attached to the vault item (e.g., file, directory, or alternate stream) specified by FileName. If a String-typed file tag with the specified TagName is not attached to the specified vault item, this method .
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
Please refer to the File Tags topic for more information.
This method can only retrieve typed file tags created with the set_file_tag_as_string method. Typed file tags created with the set_file_tag_as_ansi_string method must be retrieved using the get_file_tag_as_ansi_string method.
Note: This method can be called only when active is true.
get_file_tag_data_type Method (CBMemoryDrive Struct)
This method retrieves the data type of a typed file tag attached to a specific vault item.
Syntax
fn get_file_tag_data_type(&self, file_name : &str, tag_name : &str) -> Result<i32, CBFSStorageError>
Remarks
This method retrieves the data type of a typed file tag, identified by TagName, attached to the vault item (e.g., file, directory, or alternate stream) specified by FileName. If a typed file tag with the specified TagName is not attached to the specified vault item, this method .
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
The value returned by this method will be one of the following (except VAULT_TDT_RAWDATA, which is not applicable):
VAULT_TDT_RAWDATA | 0x0 | The tag is untyped and must be addressed by Id. |
VAULT_TDT_BOOLEAN | 0x1 | The tag contains Boolean data and must be addressed by name. |
VAULT_TDT_STRING | 0x2 | The tag contains String (UTF-16LE) data and must be addressed by name. |
VAULT_TDT_DATETIME | 0x3 | The tag contains DateTime data and must be addressed by name. |
VAULT_TDT_NUMBER | 0x4 | The tag contains numeric (signed 64-bit) data and must be addressed by name. |
VAULT_TDT_ANSISTRING | 0x5 | The tag contains AnsiString (8-bit string) data and must be addressed by name. |
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true.
get_file_tag_size Method (CBMemoryDrive Struct)
This method retrieves the size of a raw file tag attached to the specified vault item.
Syntax
fn get_file_tag_size(&self, file_name : &str, tag_id : i32) -> Result<i32, CBFSStorageError>
Remarks
This method retrieves the size of the binary data held by a raw file tag, identified by TagId, attached to the vault item (e.g., file, directory, or alternate stream) specified by FileName. If a raw file tag with the specified TagId is not attached to the specified vault item, this method returns 0 as the tag size.
The value passed for FileName must be a vault-local absolute path. The value passed for TagId must be in the range 0x0001 to 0xCFFF (inclusive).
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true.
get_module_version Method (CBMemoryDrive Struct)
Retrieves the version of a given product module.
Syntax
fn get_module_version(&self, product_guid : &str, module : i32) -> Result<i64, CBFSStorageError>
Remarks
This method retrieves the version of the product module specified by Module. The value is returned as a 64-bit integer composed of four 16-bit words that each correspond to a piece of the overall module version. For example, a version of 2.32.6.28 would cause the value 0x000200200006001C to be returned.
If the specified module is not installed, this method returns 0.
ProductGUID is used to distinguish between driver installations performed by different applications. Such information is necessary to guard against unexpected situations such as, e.g., the driver being uninstalled by one application despite other applications still needing it.
The GUID must be specified in so-called "Registry Format" (e.g., "{1FAD0EF2-9A03-4B87-B4BC-645B7035ED90}") with curly braces included.
To ensure proper operation, it is critical that each individual application have its own unique ProductGUID value, and that applications (and their installation scripts) use that value when calling any of the following methods:
- install
- uninstall
- get_driver_status
- get_module_version
- register_icon
- unregister_icon
- initialize
The Module parameter specifies which driver module to query the status of. Possible values are:
MODULE_DRIVER_PNP_BUS | 0x00000001 | PnP Bus Driver (.sys file).
This module must be installed if the application wishes to make use of Plug-and-Play (PnP) storage features struct in Windows. PnP storage devices are those visible as disks in the Device Manager, and the system treats such storage devices differently from other purely virtual devices. The virtual disk driver must be re-installed anytime this module is added or removed. |
MODULE_DRIVER_BLOCK | 0x00000002 | Virtual disk driver (.sys file).
The product's virtual disk driver module, which provides core functionality; it must be installed for the struct to function correctly. |
MODULE_DRIVER_FS | 0x00000004 | Filesystem driver (.sys file).
The product's filesystem driver module, which provides core functionality; it must be installed for the struct to function correctly. |
MODULE_HELPER_DLL | 0x00010000 | Shell Helper DLL (CBVaultDriveShellHelper2024.dll)
This module provides supplementary functionality for the struct; please refer to the Helper DLL topic for more information. Note: Not applicable when calling the get_driver_status method. |
This method is available in both the struct API and the Installer DLL included with the product; please refer to the Driver Installation in Windows topic for more information about the latter.
Note: This method cannot be called within events.
get_originator_process_id Method (CBMemoryDrive Struct)
Retrieves the Id of the process (PID) that initiated the operation (Windows only).
Syntax
fn get_originator_process_id(&self) -> Result<i32, CBFSStorageError>
Remarks
This method can be called within the on_file_password_needed and on_file_access events to retrieve the Id of the process (PID) that initiated the operation. If the query fails, this method returns 0.
Please note that PIDs are not unique, and may be reused by different processes over time (though in practice, this is uncommon).
CBVaultDrive/Windows-specific: Applications cannot use this method to retrieve information about remote processes accessing virtual drives shared on the network. Windows does not provide such information due to the nature of remote access.
get_originator_process_name Method (CBMemoryDrive Struct)
Retrieves the name of the process that initiated the operation (Windows only).
Syntax
fn get_originator_process_name(&self) -> Result<String, CBFSStorageError>
Remarks
This method can be called within the on_file_password_needed and and on_file_access events to retrieve the name of the process that initiated the operation. If the query fails, this method returns empty string.
CBVaultDrive/Windows-specific: Applications cannot use this method to retrieve information about remote processes accessing virtual drives shared on the network. Windows does not provide such information due to the nature of remote access.
get_originator_thread_id Method (CBMemoryDrive Struct)
Retrieves the Id of the thread that initiated the operation (Windows only).
Syntax
fn get_originator_thread_id(&self) -> Result<i32, CBFSStorageError>
Remarks
This method can be called within the on_file_password_needed and on_file_access events to retrieve the Id of the thread that initiated the operation. If the query fails, this method returns 0.
This method is available only in Windows.
Please note that thread Ids are not unique, and may be reused by different threads over time.
get_originator_token Method (CBMemoryDrive Struct)
Retrieves the security token associated with the process that initiated the operation (Windows only).
Syntax
fn get_originator_token(&self) -> Result<i64, CBFSStorageError>
Remarks
This method can be called within the on_file_password_needed event to retrieve the security token associated with the process that initiated the operation. If the query fails, this method returns INVALID_HANDLE_VALUE.
This method is available only in Windows.
The security token returned by this method can be passed to the Windows API's GetTokenInformation function to obtain more information about the process.
Important: When applications are finished using the returned security token, they must close it using the Windows API's CloseHandle function.
Network Access Notes (CBVaultDrive-specific)
For virtual drives shared on the network, applications may wish to obtain information about the network users accessing it (e.g., account names). Drives can be shared in several modes in Windows, which can affect the information retrievable via the security token this method returns:
- Authenticated mode, in which case the Helper DLL (which, in general, is responsible for relaying remote drive requests to and from the system driver) will impersonate the network user, allowing that account's actual information to be retrieved.
- Guest mode, in which case the retrievable information is for the system's GUEST account.
- Administrative shares (those which exist by default and whose names end with '$'; e.g., C$, ADMIN$, etc.), in which case the retrievable information is for the LOCAL_SYSTEM account.
get_search_result_attributes Method (CBMemoryDrive Struct)
This method retrieves the attributes of a vault item found during a search operation.
Syntax
fn get_search_result_attributes(&self, search_id : i64) -> Result<i32, CBFSStorageError>
Remarks
This method retrieves the attributes of a vault item (e.g., file, directory, symbolic link, or alternate stream) found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId. Please refer to those methods' documentation for more information.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
The vault item's attributes are returned as a 32-bit integer composed of one or more of the following values:
VAULT_FATTR_FILE | 0x00000001 | The entry is a file. |
VAULT_FATTR_DIRECTORY | 0x00000002 | The entry is a directory. |
VAULT_FATTR_DATA_STREAM | 0x00000004 | The entry is an alternate data stream. |
VAULT_FATTR_COMPRESSED | 0x00000008 | The file or stream is compressed. |
VAULT_FATTR_ENCRYPTED | 0x00000010 | The file or stream is encrypted. |
VAULT_FATTR_SYMLINK | 0x00000020 | The entry is a symbolic link. |
VAULT_FATTR_READONLY | 0x00000040 | The file is read-only.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_ARCHIVE | 0x00000080 | The file requires archiving.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_HIDDEN | 0x00000100 | The file is hidden.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_SYSTEM | 0x00000200 | The file is a system file.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_TEMPORARY | 0x00000400 | The file is temporary.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_DELETE_ON_CLOSE | 0x00000800 | The file should be deleted when the last handle to the file is closed.
This attribute is currently not supported by CBFS Storage. |
VAULT_FATTR_RESERVED_0 | 0x00001000 | Reserved. |
VAULT_FATTR_RESERVED_1 | 0x00002000 | Reserved. |
VAULT_FATTR_RESERVED_2 | 0x00004000 | Reserved. |
VAULT_FATTR_RESERVED_3 | 0x00008000 | Reserved. |
VAULT_FATTR_NO_USER_CHANGE | 0x0000F03F | A mask that includes all attributes that cannot be changed.
Applications cannot use the set_file_attributes method to directly change any of the following attributes: FILE, DIRECTORY, DATA_STREAM, COMPRESSED, ENCRYPTED, SYMLINK, RESERVED_0, RESERVED_1, RESERVED_2, or RESERVED_3. |
VAULT_FATTR_USER_DEFINED | 0x7FF00000 | A mask for application-defined attributes.
Applications can use the set_file_attributes method to set custom attributes, as long as their values are covered by this mask. |
VAULT_FATTR_ANY_FILE | 0x7FFFFFFF | A mask that includes any and all attributes. |
If, however, attributes were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_ATTRIBUTES for the find_first/find_first_by_query method's Flags parameter), this method will always return 0. Please refer to the documentation for these methods for more information.
Note: This method can be called only when active is true.
get_search_result_creation_time Method (CBMemoryDrive Struct)
This method retrieves the creation time of a vault item found during a search operation.
Syntax
fn get_search_result_creation_time(&self, search_id : i64) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Remarks
This method retrieves the creation time of a vault item (e.g., file, directory, symbolic link, or alternate stream) found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId. Please refer to those methods' documentation for more information.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
The timestamps returned by this method are specified in UTC.
If times were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_TIMES for the find_first/find_first_by_query method's Flags parameter), this method will always return January 1, 1601 00:00:00 UTC. Please refer to the documentation for these methods for more information.
Note: This method can be called only when active is true.
get_search_result_full_name Method (CBMemoryDrive Struct)
This method retrieves the fully qualified name of a vault item found during a search operation.
Syntax
fn get_search_result_full_name(&self, search_id : i64) -> Result<String, CBFSStorageError>
Remarks
This method retrieves the fully qualified name of a vault item (e.g., file, directory, symbolic link, or alternate stream) found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId (i.e., the vault item's vault-local absolute path). Please refer to those methods' documentation for more information.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
If fully qualified names were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_FULL_NAME for the find_first/find_first_by_query method's Flags parameter), this method will always return an empty string. Please refer to the documentation for these methods for more information.
Note: This method can be called only when active is true.
get_search_result_last_access_time Method (CBMemoryDrive Struct)
This method retrieves the last access time of a vault item found during a search operation.
Syntax
fn get_search_result_last_access_time(&self, search_id : i64) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Remarks
This method retrieves the creation time of a vault item (e.g., file, directory, symbolic link, or alternate stream) found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId. Please refer to those methods' documentation for more information.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
The timestamps returned by this method are specified in UTC.
If times were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_TIMES for the find_first/find_first_by_query method's Flags parameter), this method will always return January 1, 1601 00:00:00 UTC. Please refer to the documentation for these methods for more information.
Note: Vault items' last access times are updated only if the use_access_time property is enabled.
Note: This method can be called only when active is true.
get_search_result_link_destination Method (CBMemoryDrive Struct)
This method retrieves the destination of a symbolic link found during a search operation.
Syntax
fn get_search_result_link_destination(&self, search_id : i64) -> Result<String, CBFSStorageError>
Remarks
This method retrieves the fully qualified name of a symbolic link found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId. Please refer to those methods' documentation for more information.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
If the most recently found vault item is not a symbolic link, or if symbolic link destinations were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_LINK_DEST for the find_first/find_first_by_query method's Flags parameter), this method will always return an empty string. Please refer to the documentation for these methods for more information.
Note: This method can be called only when active is true.
get_search_result_metadata_size Method (CBMemoryDrive Struct)
This method retrieves the size of the metadata associated with a vault item found during a search operation.
Syntax
fn get_search_result_metadata_size(&self, search_id : i64) -> Result<i64, CBFSStorageError>
Remarks
This method retrieves the size of the metadata associated with a vault item (e.g., file, directory, symbolic link, or alternate stream) found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId. Please refer to those methods' documentation for more information.
The metadata size of a vault item reflects the total size of all vault pages associated with it that do not contain actual file/stream data; this includes file tags (both internal and application defined), index pages, B-trees, and all other "filesystem information".
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
If metadata sizes were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_METADATA_SIZE for the find_first/find_first_by_query method's Flags parameter), this method will always return 0. Please refer to the documentation for these methods for more information.
Note: This method can be called only when active is true.
get_search_result_modification_time Method (CBMemoryDrive Struct)
This method retrieves the modification time of a vault item found during a search operation.
Syntax
fn get_search_result_modification_time(&self, search_id : i64) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Remarks
This method retrieves the modification time of a vault item (e.g., file, directory, symbolic link, or alternate stream) found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId. Please refer to those methods' documentation for more information.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
The timestamps returned by this method are specified in UTC.
If times were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_TIMES for the find_first/find_first_by_query method's Flags parameter), this method will always return January 1, 1601 00:00:00 UTC. Please refer to the documentation for these methods for more information.
Note: This method can be called only when active is true.
get_search_result_name Method (CBMemoryDrive Struct)
This method retrieves the name of a vault item found during a search operation.
Syntax
fn get_search_result_name(&self, search_id : i64) -> Result<String, CBFSStorageError>
Remarks
This method retrieves the name of a vault item (e.g., file, directory, symbolic link, or alternate stream) found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId. Please refer to those methods' documentation for more information.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
The names returned by this method do not include a path; use get_search_result_full_name if a path is needed.
If names were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_NAME for the find_first/find_first_by_query method's Flags parameter), this method will always return an empty string. Please refer to the documentation for these methods for more information.
Note: This method can be called only when active is true.
get_search_result_size Method (CBMemoryDrive Struct)
This method retrieves the size of a vault item found during a search operation.
Syntax
fn get_search_result_size(&self, search_id : i64) -> Result<i64, CBFSStorageError>
Remarks
This method retrieves the size of a vault item (e.g., file, directory, symbolic link, or alternate stream) found via find_first/find_first_by_query/find_next as part of the search operation identified by SearchId. Please refer to those methods' documentation for more information.
Note: For files, the returned value reflects only the size of the file's immediate contents; it does not account for any alternate streams the file may or may not contain.
The value passed for SearchId must be a search operation Id returned by find_first or find_first_by_query.
If the vault item is a directory, or if sizes were not requested as part of the specified search operation (by passing either 0 or a value including VAULT_FF_NEED_SIZE for the find_first/find_first_by_query method's Flags parameter), this method will always return 0. Please refer to the documentation for these methods for more information.
Note: This method can be called only when active is true.
initialize Method (CBMemoryDrive Struct)
This method initializes the struct.
Syntax
fn initialize(&self, product_guid : &str) -> Result<(), CBFSStorageError>
Remarks
This method initializes the struct and must be called each time the application starts before attempting to call any of the struct's other methods with the exception of installation-related methods.
ProductGUID is used to distinguish between driver installations performed by different applications. Such information is necessary to guard against unexpected situations such as, e.g., the driver being uninstalled by one application despite other applications still needing it.
The GUID must be specified in so-called "Registry Format" (e.g., "{1FAD0EF2-9A03-4B87-B4BC-645B7035ED90}") with curly braces included.
To ensure proper operation, it is critical that each individual application have its own unique ProductGUID value, and that applications (and their installation scripts) use that value when calling any of the following methods:
If the required driver was not installed using the install method with the same value of ProductGUID, initialize will return a ERROR_FILE_NOT_FOUND error (Win32 error code 2).
If the loaded kernel-mode driver is older than the user-mode API, initialize will return a ERROR_INVALID_KERNEL_INFO_VERSION error (Win32 error code 340). In this situation, an update of the driver using the install method is required before the struct can be used.
install Method (CBMemoryDrive Struct)
Installs (or upgrades) the product's system drivers and/or the helper DLL (Windows only).
Syntax
fn install(&self, cab_file_name : &str, product_guid : &str, path_to_install : &str, modules_to_install : i32, flags : i32) -> Result<i32, CBFSStorageError>
Remarks
This method is used to install or upgrade the product's various modules (i.e., the system drivers and the Helper DLL). The ModulesToInstall parameter selects which modules should be installed. If the system must be rebooted to complete the installation process, this method will return a non-zero value indicating which module(s) requested the reboot (out of those initially selected).
Important: To upgrade the product's modules, use only the install method. Previously installed versions of the modules should not be uninstalled first. Calling the install method will upgrade the previously installed version.
Please refer to the Driver Installation in Windows topic for more information.
CabFileName must be the path of the .cab file containing the product modules. Important: This .cab file must remain on the target system (or be available in some other way) after installation, as it is required for uninstalling the modules from the system.
ProductGUID is used to distinguish between driver installations performed by different applications. Such information is necessary to guard against unexpected situations such as, e.g., the driver being uninstalled by one application despite other applications still needing it.
The GUID must be specified in so-called "Registry Format" (e.g., "{1FAD0EF2-9A03-4B87-B4BC-645B7035ED90}") with curly braces included.
To ensure proper operation, it is critical that each individual application have its own unique ProductGUID value, and that applications (and their installation scripts) use that value when calling any of the following methods:
PathToInstall controls where the modules are installed. Pass empty string (highly recommended) to automatically install them to the appropriate Windows system directory.
ModulesToInstall should contain one or more of the following flags, OR'd together:
MODULE_DRIVER_PNP_BUS | 0x00000001 | PnP Bus Driver (.sys file).
This module must be installed if the application wishes to make use of Plug-and-Play (PnP) storage features struct in Windows. PnP storage devices are those visible as disks in the Device Manager, and the system treats such storage devices differently from other purely virtual devices. The virtual disk driver must be re-installed anytime this module is added or removed. |
MODULE_DRIVER_BLOCK | 0x00000002 | Virtual disk driver (.sys file).
The product's virtual disk driver module, which provides core functionality; it must be installed for the struct to function correctly. |
MODULE_DRIVER_FS | 0x00000004 | Filesystem driver (.sys file).
The product's filesystem driver module, which provides core functionality; it must be installed for the struct to function correctly. |
MODULE_HELPER_DLL | 0x00010000 | Shell Helper DLL (CBVaultDriveShellHelper2024.dll)
This module provides supplementary functionality for the struct; please refer to the Helper DLL topic for more information. Note: Not applicable when calling the get_driver_status method. |
Flags specifies various installation options, and should contain zero or more of the following flags, OR'd together:
INSTALL_REMOVE_OLD_VERSIONS | 0x00000001 | Uninstall drivers and helper DLLs from previous struct versions (e.g., 2017).
Note: This functionality is only available in Windows. This flag does not remove the old PnP driver (VPnpBus) from the system because that driver is not versioned. Use the installer DLL of the old version and its Uninstall() function if you need to uninstall the PnP driver. |
INSTALL_KEEP_START_TYPE | 0x00000002 | Keep the driver's current start type setting in the registry.
If this flag is not set (default), the installation logic will reset the driver's start type setting in the Windows registry to the default value. Setting this flag causes the installation logic to preserve the current value, which may be necessary if the user (or the application itself) set it previously. Note: This functionality is only available in Windows. |
INSTALL_OVERWRITE_SAME_VERSION | 0x00000004 | Install files when their version is the same as the version of already installed files.
If this flag is not set (default), the installation logic will overwrite the existing file only if the version number of the file being installed is larger than the version of the file being overwritten. Setting this flag causes the installation logic to overwrite the file even when it has the same version. Note: This functionality is only available in Windows. |
This method is available in both the struct API and the Installer DLL included with the product; please refer to the Driver Installation in Windows topic for more information about the latter.
This method requires administrative rights to execute successfully. If the user account of the process that calls this method doesn't have such rights, the call will fail with an ERROR_PRIVILEGE_NOT_HELD () error.
Note: This method cannot be called within events.
is_directory_empty Method (CBMemoryDrive Struct)
This method checks whether a directory is empty.
Syntax
fn is_directory_empty(&self, directory : &str) -> Result<bool, CBFSStorageError>
Remarks
This method checks whether the directory specified by Directory is empty (i.e., does not contain any files, subdirectories, or symbolic links). If the specified directory is empty, this method returns true; otherwise, it returns false.
The value passed for Directory must be a vault-local absolute path.
Note: This method can be called only when active is true.
is_icon_registered Method (CBMemoryDrive Struct)
Checks whether the specified icon is registered (Windows only).
Syntax
fn is_icon_registered(&self, icon_id : &str) -> Result<bool, CBFSStorageError>
Remarks
This method checks whether an icon with the specified IconId has been registered. If such an icon has been registered, this method returns true; otherwise it returns false.
Icons can be registered using the register_icon method. Please refer to that method's documentation, as well as the Custom Drive Icons topic, for more information.
The Helper DLL must be installed in order for this method to function correctly. Applications can check to see whether the Helper DLL is installed using the get_module_version method, and install it using the install method if necessary.
load_from_file Method (CBMemoryDrive Struct)
Copies contents of a file-based vault into the in-memory vault.
Syntax
fn load_from_file(&self, file_name : &str) -> Result<(), CBFSStorageError>
Remarks
This method loads the contents of the vault, specified by FileName, into the struct.
If the in-memory vault is not opened, LoadFromFileopens an in-memory vault. If the in-memory vault is already opened, it is closed by this method.
If the vault is encrypted, then before calling load_from_file, the application should set proper values to vault_encryption and vault_password properties.
Note: This method can be called only when active is true, and it cannot be called within events.
move_file Method (CBMemoryDrive Struct)
This method renames or moves a vault item.
Syntax
fn move_file(&self, old_file_name : &str, new_file_name : &str, overwrite : bool) -> Result<(), CBFSStorageError>
Remarks
This method renames or moves a vault item (e.g., file, directory, symbolic link, or alternate stream) from the specified OldFileName to the specified NewFileName. For alternate streams, renaming is always possible, but moving them from one file to another is allowed only if the AllowMoveStreamsBetweenFiles configuration setting is enabled.
The values passed for OldFileName and NewFileName must both be vault-local absolute paths (including the item's old and new names, respectively) in the same vault.
The Overwrite parameter specifies what to do if a vault item with the specified NewFileName already exists. If Overwrite is true, and such an item exists, it will be overwritten by the item specified by OldFileName. But if such an item exists, and Overwrite is false, this method .
Note: The usual rules of deletion still apply for an item being overwritten. Notably, a nonempty directory cannot be overwritten.
Note: This method can be called only when active is true, and it cannot be called within events.
open_file Method (CBMemoryDrive Struct)
This method opens a new or existing file or alternate stream in the vault.
Syntax
fn open_file(&self, file_name : &str, open_mode : i32, read_enabled : bool, write_enabled : bool, password : &str) -> Result<CBFSStorageStream, CBFSStorageError>
Remarks
This method opens the file or alternate stream specified by FileName, creating it if necessary based on the specified OpenMode, and returns a stream object that provides access to its data.
Note: Files and alternate streams cannot be created or written to if the vault is open in read_only mode.
The value passed for FileName must be a vault-local absolute path.
The OpenMode parameter specifies what behavior to use when opening a file or alternate stream. Valid values are as follows:
VAULT_FOM_CREATE_NEW | 0 | Creates a new file or alternate stream if possible, failing if one already exists. |
VAULT_FOM_CREATE_ALWAYS | 1 | Creates a new file or stream, overwriting an existing one if necessary. |
VAULT_FOM_OPEN_EXISTING | 2 | Opens a file or stream if it exists; fails otherwise. |
VAULT_FOM_OPEN_ALWAYS | 3 | Opens a file or stream if it exists; creates a new one otherwise. |
The ReadEnabled and WriteEnabled parameters specify which kinds of access the returned stream object should permit.
Note: WriteEnabled is ignored if read_only is true.
The Password parameter works as follows:
- If the specified file or alternate stream already exists and is encrypted, the specified Password is used to decrypt and access its data.
- If a new file or alternate stream is created, and the default_file_encryption property is not VAULT_EM_NONE, the specified Password is used to encrypt it.
Internally, this method simply calls open_file_ex, passing on all shared parameters' values and using the following defaults for the others:
- ShareDenyRead and ShareDenyWrite use true.
- Encryption uses the current default_file_encryption value.
- Compression and CompressionLevel use the current default_file_compression and DefaultFileCompressionLevel values, respectively.
- PagesPerBlock uses 16.
Note: This method can be called only when active is true, and it cannot be called within events.
open_file_ex Method (CBMemoryDrive Struct)
This method opens a new or existing file or alternate stream in the vault.
Syntax
fn open_file_ex(&self, file_name : &str, open_mode : i32, read_enabled : bool, write_enabled : bool, share_deny_read : bool, share_deny_write : bool, encryption : i32, password : &str, compression : i32, compression_level : i32, pages_per_block : i32) -> Result<CBFSStorageStream, CBFSStorageError>
Remarks
This method opens the file or alternate stream specified by FileName, creating it if necessary based on the specified OpenMode, and returns a stream object that provides access to its data.
Note: Files and alternate streams cannot be created or written to if the vault is open in read_only mode.
The value passed for FileName must be a vault-local absolute path.
The OpenMode parameter specifies what behavior to use when opening a file or alternate stream. Valid values are as follows:
VAULT_FOM_CREATE_NEW | 0 | Creates a new file or alternate stream if possible, failing if one already exists. |
VAULT_FOM_CREATE_ALWAYS | 1 | Creates a new file or stream, overwriting an existing one if necessary. |
VAULT_FOM_OPEN_EXISTING | 2 | Opens a file or stream if it exists; fails otherwise. |
VAULT_FOM_OPEN_ALWAYS | 3 | Opens a file or stream if it exists; creates a new one otherwise. |
The ReadEnabled and WriteEnabled parameters specify which kinds of access the returned stream object should permit.
Note: WriteEnabled is ignored if read_only is true.
The ShareDenyRead and ShareDenyWrite parameters specify whether other accessors may read and/or write the specified file or alternate stream simultaneously. To prevent simultaneous read and/or write access, pass true; to allow it, pass false.
The Encryption parameter specifies the encryption mode to use when creating a file or alternate stream. Valid values are as follows:
VAULT_EM_NONE | 0x0 | Do not use encryption. |
VAULT_EM_DEFAULT | 0x1 | Use default encryption (VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256). |
VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256 | 0x2 | Use AES256 encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash. |
VAULT_EM_CUSTOM256_PBKDF2_HMAC_SHA256 | 0x3 | Use event-based custom 256-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_PBKDF2_HMAC_SHA256 | 0x4 | Use event-based custom 512-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_PBKDF2_HMAC_SHA256 | 0x5 | Use event-based custom 1024-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_CUSTOM_KEY_DERIVE | 0x23 | Use event-based custom 256-bit encryption with custom key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_CUSTOM_KEY_DERIVE | 0x24 | Use event-based custom 512-bit encryption with custom key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_CUSTOM_KEY_DERIVE | 0x25 | Use event-based custom 1024-bit encryption with custom key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_DIRECT_KEY | 0x43 | Use event-based custom 256-bit encryption with no key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM512_DIRECT_KEY | 0x44 | Use event-based custom 512-bit encryption with no key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM1024_DIRECT_KEY | 0x45 | Use event-based custom 1024-bit encryption with no key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_UNKNOWN | 0xFF | Unidentified or unknown encryption. |
Applications that use custom encryption must implement at least the on_data_encrypt and on_data_decrypt events. Certain custom encryption modes may require that the on_hash_calculate or on_key_derive event be implemented as well. Please refer to the Encryption topic for more information.
The Password parameter works as follows:
- If the specified file or alternate stream already exists and is encrypted, the specified Password is used to decrypt and access its data.
- If a file or alternate stream is created, and Encryption is not VAULT_EM_NONE, the specified Password is used to encrypt it.
The Compression parameter specifies the compression mode to use when creating a file or alternate stream. Valid values are as follows:
VAULT_CM_NONE | 0 | Do not use compression. |
VAULT_CM_DEFAULT | 1 | Use default compression (zlib). |
VAULT_CM_CUSTOM | 2 | Use event-based custom compression.
This compression level is not used. |
VAULT_CM_ZLIB | 3 | Use zlib compression.
Valid compression levels are 1-9. |
VAULT_CM_RLE | 4 | Use RLE compression.
This compression level is not used. |
Applications that use custom compression must implement the on_data_compress and on_data_decompress events. Please refer to the Compression topic for more information.
The CompressionLevel parameter specifies the compression level to use, if applicable.
The PagesPerBlock parameter specifies how many pages should be compressed as a single block, if applicable. Valid values are powers of 2 up to and including 128 (i.e., 2, 4, 8, 16, 32, 64, or 128), or 0, which is interpreted as "default" (currently 16 for both zlib and run-length encoding [RLE]). Larger values allow for more efficient compression; however, because a block must be decompressed (and, for writes, recompressed) anytime its data are accessed, larger values can also cause excessive slowdown, especially for random access.
Note: This method can be called only when active is true, and it cannot be called within events.
open_root_data Method (CBMemoryDrive Struct)
This method opens the vault's root data stream.
Syntax
fn open_root_data(&self) -> Result<CBFSStorageStream, CBFSStorageError>
Remarks
This method opens the vault's root data stream, returning a stream object that provides access to its data.
Please refer to the Using RootData topic for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
register_icon Method (CBMemoryDrive Struct)
Registers an icon that can be displayed as an overlay on the virtual drive in Windows File Explorer (Windows only).
Syntax
fn register_icon(&self, icon_path : &str, product_guid : &str, icon_id : &str) -> Result<bool, CBFSStorageError>
Remarks
This method registers an icon in the file specified by IconPath so that it can later be used to display an overlay on the virtual drive in Windows File Explorer. If the system must be rebooted before the icon can be used, this method returns true, otherwise it returns false.
Please note that this method only registers overlay icons; Applications should call the set_icon and reset_icon methods to select an icon for display. Please refer to the Custom Drive Icons topic for more information.
IconPath must be the full path and file name of the .ico file whose icon should be registered. The file must exist and remain available in order for the icon to be used until the icon is unregistered using unregister_icon.
ProductGUID is used to distinguish between driver installations performed by different applications. Such information is necessary to guard against unexpected situations such as, e.g., the driver being uninstalled by one application despite other applications still needing it.
The GUID must be specified in so-called "Registry Format" (e.g., "{1FAD0EF2-9A03-4B87-B4BC-645B7035ED90}") with curly braces included.
To ensure proper operation, it is critical that each individual application have its own unique ProductGUID value, and that applications (and their installation scripts) use that value when calling any of the following methods:
IconId specifies an identifier that can later be passed to the set_icon and unregister_icon methods. Each registered icon should have a unique IconId value; if a value is passed that is already in use, the existing icon will be removed (by calling unregister_icon internally) before the new one is registered.
This method is available in both the struct API and the Installer DLL included with the product; please refer to the Driver Installation in Windows topic for more information about the latter. The Helper DLL must be installed in order for this method to function correctly. Applications can check to see whether the Helper DLL is installed using the get_module_version method, and install it using the install method if necessary.
This method requires administrative rights to execute successfully. If the user account of the process that calls this method doesn't have such rights, the call will fail with an ERROR_PRIVILEGE_NOT_HELD () error.
Note: This method cannot be called within events.
remove_denied_process Method (CBMemoryDrive Struct)
Removes a rule that prevents a process from accessing the virtual drive .
Syntax
fn remove_denied_process(&self, process_file_name : &str, process_id : i32) -> Result<(), CBFSStorageError>
Remarks
When the process_restrictions_enabled property is enabled, this method can be used to remove an access rule previously added with the add_denied_process method.
Pass the same values for ProcessFileName and ProcessId as were used to add the rule when add_denied_process was called previously. Please refer to that method's documentation for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
The methods and properties related to process access lists are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that manipulation and enumeration of process access information occurs in a thread-safe manner.
remove_granted_process Method (CBMemoryDrive Struct)
Removes a rule that allows a process to access the virtual drive .
Syntax
fn remove_granted_process(&self, process_file_name : &str, process_id : i32) -> Result<(), CBFSStorageError>
Remarks
When the process_restrictions_enabled property is enabled, this method can be used to remove an access rule previously added with the add_granted_process method.
Pass the same values for ProcessFileName and ProcessId as were used to add the rule when add_granted_process was called previously. Please refer to that method's documentation for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
The methods and properties related to process access lists are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that manipulation and enumeration of process access information occurs in a thread-safe manner.
remove_mounting_point Method (CBMemoryDrive Struct)
Removes a mounting point for the virtual drive.
Syntax
fn remove_mounting_point(&self, index : i32, mounting_point : &str, flags : i32, authentication_id : i64) -> Result<(), CBFSStorageError>
Remarks
This method removes a previously-created mounting point for the virtual drive.
Index must be set to the index of an item in the MountingPoint* properties, or to -1 to remove an item based on the other method parameters.
If Index is -1, then the same values must be passed for MountingPoint, Flags, AuthenticationId as were used to add the mounting point when add_mounting_point was called previously. Please refer to that method's documentation for more information. (If Index is not -1, these parameters are ignored.)
The sgSTGMPDRIVELETTERNOTIFYASYNC; flag may be passed in Flags to send notifications about removal of the mounting point asynchronously. Do not use this flag if the process quits right after a call to this method because asynchronous delivery involves a secondary thread, which will be terminated when the process quits.
Note: This method cannot be called within events.
The methods and properties related to mounting points are not intended to be used from multiple threads at once. Applications that wish to use said methods and properties from multiple threads are responsible for employing proper thread synchronization techniques to ensure that manipulation and enumeration of mounting points occurs in a thread-safe manner.
reset_icon Method (CBMemoryDrive Struct)
Resets the virtual drive's icon back to default by deselecting the active overlay icon (Windows only).
Syntax
fn reset_icon(&self) -> Result<(), CBFSStorageError>
Remarks
This method deselects the overlay icon currently in use, thus resetting the virtual drive's icon back to its default state (i.e., displayed without any overlay icons).
Please refer to the set_icon method, as well as the Custom Drive Icons topic, for more information.
The Helper DLL must be installed in order for this method to function correctly. Applications can check to see whether the Helper DLL is installed using the get_module_version method, and install it using the install method if necessary.
Note: This method can be called only after creating a virtual drive, and it cannot be called within events.
resolve_link Method (CBMemoryDrive Struct)
This method retrieves the destination of a symbolic link.
Syntax
fn resolve_link(&self, link_name : &str, normalize : bool) -> Result<String, CBFSStorageError>
Remarks
This method retrieves the destination pointed to by the symbolic link specified by LinkName.
The value passed for LinkName must be a vault-local absolute path.
As the create_link method's documentation describes, symbolic links can be created with either relative or absolute vault-local paths. The Normalize parameter specifies whether the struct should normalize the specified link's destination before returning it. Passing true will ensure a vault-local absolute path is always returned; passing false will cause the original destination path to be returned.
Note: This method can be called only when active is true.
save_to_file Method (CBMemoryDrive Struct)
Copies contents of the in-memory vault into a file-based vault.
Syntax
fn save_to_file(&self, file_name : &str) -> Result<(), CBFSStorageError>
Remarks
This method saves the in-memory vault into the file specified by the FileName parameter.
The vault is saved "as is", with all parameters including encryption which were set for the in-memory vault.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_attributes Method (CBMemoryDrive Struct)
This method sets the attributes of a vault item.
Syntax
fn set_file_attributes(&self, file_name : &str, attributes : i32) -> Result<(), CBFSStorageError>
Remarks
This method sets the attributes of the vault item (e.g., file, directory, symbolic link, or alternate stream) specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The Attributes parameter specifies the new attributes for the vault item, which should be constructed by ORing together one or more of the following values:
VAULT_FATTR_FILE | 0x00000001 | The entry is a file. |
VAULT_FATTR_DIRECTORY | 0x00000002 | The entry is a directory. |
VAULT_FATTR_DATA_STREAM | 0x00000004 | The entry is an alternate data stream. |
VAULT_FATTR_COMPRESSED | 0x00000008 | The file or stream is compressed. |
VAULT_FATTR_ENCRYPTED | 0x00000010 | The file or stream is encrypted. |
VAULT_FATTR_SYMLINK | 0x00000020 | The entry is a symbolic link. |
VAULT_FATTR_READONLY | 0x00000040 | The file is read-only.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_ARCHIVE | 0x00000080 | The file requires archiving.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_HIDDEN | 0x00000100 | The file is hidden.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_SYSTEM | 0x00000200 | The file is a system file.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_TEMPORARY | 0x00000400 | The file is temporary.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_DELETE_ON_CLOSE | 0x00000800 | The file should be deleted when the last handle to the file is closed.
This attribute is currently not supported by CBFS Storage. |
VAULT_FATTR_RESERVED_0 | 0x00001000 | Reserved. |
VAULT_FATTR_RESERVED_1 | 0x00002000 | Reserved. |
VAULT_FATTR_RESERVED_2 | 0x00004000 | Reserved. |
VAULT_FATTR_RESERVED_3 | 0x00008000 | Reserved. |
VAULT_FATTR_NO_USER_CHANGE | 0x0000F03F | A mask that includes all attributes that cannot be changed.
Applications cannot use the set_file_attributes method to directly change any of the following attributes: FILE, DIRECTORY, DATA_STREAM, COMPRESSED, ENCRYPTED, SYMLINK, RESERVED_0, RESERVED_1, RESERVED_2, or RESERVED_3. |
VAULT_FATTR_USER_DEFINED | 0x7FF00000 | A mask for application-defined attributes.
Applications can use the set_file_attributes method to set custom attributes, as long as their values are covered by this mask. |
VAULT_FATTR_ANY_FILE | 0x7FFFFFFF | A mask that includes any and all attributes. |
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_compression Method (CBMemoryDrive Struct)
This method compresses or decompresses a file or alternate stream.
Syntax
fn set_file_compression(&self, file_name : &str, compression : i32, compression_level : i32, pages_per_block : i32, password : &str) -> Result<(), CBFSStorageError>
Remarks
This method changes the compression mode used to compress the file or alternate stream specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The Compression parameter specifies the new compression mode to use. Valid values are as follows:
VAULT_CM_NONE | 0 | Do not use compression. |
VAULT_CM_DEFAULT | 1 | Use default compression (zlib). |
VAULT_CM_CUSTOM | 2 | Use event-based custom compression.
This compression level is not used. |
VAULT_CM_ZLIB | 3 | Use zlib compression.
Valid compression levels are 1-9. |
VAULT_CM_RLE | 4 | Use RLE compression.
This compression level is not used. |
Applications that use custom compression must implement the on_data_compress and on_data_decompress events. Please refer to the Compression topic for more information.
The CompressionLevel parameter specifies the compression level to use, if applicable.
The PagesPerBlock parameter specifies how many pages should be compressed as a single block, if applicable. Valid values are powers of 2 up to and including 128 (i.e., 2, 4, 8, 16, 32, 64, or 128), or 0, which is interpreted as "default" (currently 16 for both zlib and run-length encoding [RLE]). Larger values allow for more efficient compression; however, because a block must be decompressed (and, for writes, recompressed) anytime its data are accessed, larger values can also cause excessive slowdown, especially for random access.
The Password parameter specifies the password to use to access the file's data, if it is encrypted.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_creation_time Method (CBMemoryDrive Struct)
This method sets the creation time of a vault item.
Syntax
fn set_file_creation_time(&self, file_name : &str, creation_time : &chrono::DateTime<Utc>) -> Result<(), CBFSStorageError>
Remarks
This method sets the creation time of the vault item (e.g., file, directory, symbolic link, or alternate stream) specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The CreationTime parameter specifies the new creation time for the vault item, which must be specified in UTC.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_encryption Method (CBMemoryDrive Struct)
This method encrypts, decrypts, or changes the encryption password of a file or alternate stream.
Syntax
fn set_file_encryption(&self, file_name : &str, encryption : i32, old_password : &str, new_password : &str) -> Result<(), CBFSStorageError>
Remarks
This method changes the encryption mode or password used to encrypt the file or alternate stream specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The Encryption parameter specifies the new encryption mode to use. Valid values are as follows:
VAULT_EM_NONE | 0x0 | Do not use encryption. |
VAULT_EM_DEFAULT | 0x1 | Use default encryption (VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256). |
VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256 | 0x2 | Use AES256 encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash. |
VAULT_EM_CUSTOM256_PBKDF2_HMAC_SHA256 | 0x3 | Use event-based custom 256-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_PBKDF2_HMAC_SHA256 | 0x4 | Use event-based custom 512-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_PBKDF2_HMAC_SHA256 | 0x5 | Use event-based custom 1024-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_CUSTOM_KEY_DERIVE | 0x23 | Use event-based custom 256-bit encryption with custom key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_CUSTOM_KEY_DERIVE | 0x24 | Use event-based custom 512-bit encryption with custom key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_CUSTOM_KEY_DERIVE | 0x25 | Use event-based custom 1024-bit encryption with custom key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_DIRECT_KEY | 0x43 | Use event-based custom 256-bit encryption with no key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM512_DIRECT_KEY | 0x44 | Use event-based custom 512-bit encryption with no key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM1024_DIRECT_KEY | 0x45 | Use event-based custom 1024-bit encryption with no key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_UNKNOWN | 0xFF | Unidentified or unknown encryption. |
Applications that use custom encryption must implement at least the on_data_encrypt and on_data_decrypt events. Certain custom encryption modes may require that the on_hash_calculate or on_key_derive event be implemented as well. Please refer to the Encryption topic for more information.
The OldPassword parameter specifies the current encryption password, if applicable.
The NewPassword parameter specifies the new encryption password to use, if applicable.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_last_access_time Method (CBMemoryDrive Struct)
This method sets the last access time of a vault item.
Syntax
fn set_file_last_access_time(&self, file_name : &str, last_access_time : &chrono::DateTime<Utc>) -> Result<(), CBFSStorageError>
Remarks
This method sets the last access time of the vault item (e.g., file, directory, symbolic link, or alternate stream) specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The LastAccessTime parameter specifies the new last access time for the vault item, which must be specified in UTC.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_modification_time Method (CBMemoryDrive Struct)
This method sets the modification time of a vault item.
Syntax
fn set_file_modification_time(&self, file_name : &str, modification_time : &chrono::DateTime<Utc>) -> Result<(), CBFSStorageError>
Remarks
This method sets the modification time of the vault item (e.g., file, directory, symbolic link, or alternate stream) specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The ModificationTime parameter specifies the new modification time for the vault item, which must be specified in UTC.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_size Method (CBMemoryDrive Struct)
This method sets the size of a file or alternate stream.
Syntax
fn set_file_size(&self, file_name : &str, size : i64, password : &str) -> Result<(), CBFSStorageError>
Remarks
This method sets the size of the file or alternate stream specified by FileName.
The value passed for FileName must be a vault-local absolute path.
The Size parameter specifies the new size of the file or alternate stream, which must be greater than or equal to 0.
Applications can also change the size of a file or alternate stream using the stream objects returned by the open_file and open_file_ex methods.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_tag Method (CBMemoryDrive Struct)
This method attaches a raw file tag with binary data to the specified vault item.
Syntax
fn set_file_tag(&self, file_name : &str, tag_id : i32, data : &[u8]) -> Result<(), CBFSStorageError>
Remarks
This method attaches a raw file tag with binary data to the vault item (e.g., file, directory, or alternate stream) specified by FileName using the specified TagId. If a raw file tag with the specified TagId is already attached to the specified vault item, it is replaced.
The value passed for FileName must be a vault-local absolute path. The value passed for TagId must be in the range 0x0001 to 0xCFFF (inclusive).
The Data parameter specifies the raw binary data to store in the file tag; it may be up to 65531 bytes in length.
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_tag_as_ansi_string Method (CBMemoryDrive Struct)
This method attaches an AnsiString-typed file tag to the specified vault item.
Syntax
fn set_file_tag_as_ansi_string(&self, file_name : &str, tag_name : &str, value : &str) -> Result<(), CBFSStorageError>
Remarks
This method attaches an AnsiString-typed file tag to the vault item (e.g., file, directory, or alternate stream) specified by FileTag using the specified TagName. If a typed file tag with the specified TagName is already attached to the specified vault item, it is replaced.
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
The Value parameter specifies the AnsiString value to store in the file tag; it may be up to 65529 - (name_length * 2) bytes in length (where name_length is measured in characters), including null terminators for both the AnsiString value and the name.
Please refer to the File Tags topic for more information.
Note: AnsiString file tag values are converted to UTF-16LE when referenced in a search query string. To reduce the chance of string-conversion-related issues, it is recommended that applications only store ASCII characters in AnsiString-typed file tags, and prefer String-typed file tags (created using set_file_tag_as_string) in all other cases.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_tag_as_boolean Method (CBMemoryDrive Struct)
This method attaches a Boolean-typed file tag to the specified vault item.
Syntax
fn set_file_tag_as_boolean(&self, file_name : &str, tag_name : &str, value : bool) -> Result<(), CBFSStorageError>
Remarks
This method attaches a Boolean-typed file tag to the vault item (e.g., file, directory, or alternate stream) specified by FileTag using the specified TagName. If a typed file tag with the specified TagName is already attached to the specified vault item, it is replaced.
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
The Value parameter specifies the Boolean value to store in the file tag.
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_tag_as_date_time Method (CBMemoryDrive Struct)
This method attaches a DateTime-typed file tag to the specified vault item.
Syntax
fn set_file_tag_as_date_time(&self, file_name : &str, tag_name : &str, value : &chrono::DateTime<Utc>) -> Result<(), CBFSStorageError>
Remarks
This method attaches a DateTime-typed file tag to the vault item (e.g., file, directory, or alternate stream) specified by FileTag using the specified TagName. If a typed file tag with the specified TagName is already attached to the specified vault item, it is replaced.
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
The Value parameter specifies the DateTime value to store in the file tag, which must be specified in UTC.
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_tag_as_number Method (CBMemoryDrive Struct)
This method attaches a Number-typed file tag to the specified vault item.
Syntax
fn set_file_tag_as_number(&self, file_name : &str, tag_name : &str, value : i64) -> Result<(), CBFSStorageError>
Remarks
This method attaches a Number-typed file tag to the vault item (e.g., file, directory, or alternate stream) specified by FileTag using the specified TagName. If a typed file tag with the specified TagName is already attached to the specified vault item, it is replaced.
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
The Value parameter specifies the Number value to store in the file tag.
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
set_file_tag_as_string Method (CBMemoryDrive Struct)
This method attaches a String-typed file tag to the specified vault item.
Syntax
fn set_file_tag_as_string(&self, file_name : &str, tag_name : &str, value : &str) -> Result<(), CBFSStorageError>
Remarks
This method attaches a String-typed file tag to the vault item (e.g., file, directory, or alternate stream) specified by FileTag using the specified TagName. If a typed file tag with the specified TagName is already attached to the specified vault item, it is replaced.
The value passed for FileName must be a vault-local absolute path. The value passed for TagName may be up to 4095 characters in length (not including the null terminator).
The Value parameter specifies the UTF-16LE String value to store in the file tag; it may be up to 65529 - (name_length * 2) bytes in length (where name_length is measured in characters), including null terminators for both the String value and the name.
Please refer to the File Tags topic for more information.
Note: This method can be called only when active is true, and it cannot be called within events.
set_icon Method (CBMemoryDrive Struct)
Selects a registered overlay icon for display on the virtual drive in Windows File Explorer (Windows only).
Syntax
fn set_icon(&self, icon_id : &str) -> Result<(), CBFSStorageError>
Remarks
This method selects the overlay icon specified by IconId for display, causing it to be shown on the virtual drive in Windows File Explorer. The desired icon must have already been registered using the register_icon method, and the value passed for IconId must match the one passed register_icon at that time.
To switch to a different overlay icon later, call this method again with a different IconId. To reset the virtual drive's icon back to its default state (i.e., displayed without any overlay icons), call the reset_icon method. Please refer to the Custom Drive Icons topic for more information.
The Helper DLL must be installed in order for this method to function correctly. Applications can check to see whether the Helper DLL is installed using the get_module_version method, and install it using the install method if necessary.
Note: This method can be called only after creating a virtual drive, and it cannot be called within events. Also, note that the effects of this method only last until the virtual drive is destroyed; applications that always want to have some overlay icon displayed must call this method each time the virtual drive is created.
shutdown_system Method (CBMemoryDrive Struct)
Shuts down or reboots the operating system.
Syntax
fn shutdown_system(&self, shutdown_prompt : &str, timeout : i32, force_close_apps : bool, reboot : bool) -> Result<bool, CBFSStorageError>
Remarks
This method shuts down or (if Reboot is true) reboots the operating system. If the appropriate privileges cannot be obtained, or if the InitiateSystemShutdown system call returns false, then this method will return false; otherwise, it returns true. This method can be used if the installation or uninstallation function requires the system to be rebooted in order to complete.
ShutdownPrompt, if non-empty, specifies a message that the OS should display to the user for Timeout seconds. If empty string is passed for ShutdownPrompt, no message is displayed and the Timeout parameter's value is ignored.
ForceCloseApps specifies whether the OS should forcefully close all applications. Please keep in mind that forceful closing of applications with unsaved data can lead to data loss.
Reboot specifies whether the OS should reboot (true) or just shut down (false).
This method is available in both the struct API and the Installer DLL included with the product; please refer to the Driver Installation in Windows topic for more information about the latter.
Note: This method cannot be called within events.
uninstall Method (CBMemoryDrive Struct)
Uninstalls the product's system drivers and/or helper DLL (Windows only).
Syntax
fn uninstall(&self, cab_file_name : &str, product_guid : &str, installed_path : &str, flags : i32) -> Result<i32, CBFSStorageError>
Remarks
This method is used to uninstall the product's various modules (i.e., the system drivers and Helper DLL). If the system must be rebooted to complete the uninstallation process, this method will return a non-zero value indicating which module(s) requested the reboot (see install for possible values).
Important: To upgrade the product's modules, use only the install method. Previously installed versions of the modules should not be uninstalled first. Calling the install method will upgrade the previously installed version.
Please refer to the Driver Installation in Windows topic for more information.
The same values must be passed for the CabFileName, ProductGUID, and InstalledPath parameters as were passed when install was called; please refer to its documentation for more information.
Flags specifies which versions of the product's modules should be uninstalled, and should be set by OR'ing together one or more of the following values:
UNINSTALL_VERSION_PREVIOUS | 0x00000001 | Uninstall modules from previous product versions.
Note: This functionality is only available in Windows. |
UNINSTALL_VERSION_CURRENT | 0x00000002 | Uninstall modules from the current product version.
Note: This functionality is only available in Windows. |
UNINSTALL_VERSION_ALL | 0x00000003 | Uninstall modules from all product versions.
Note: This functionality is only available in Windows. |
This method is available in both the struct API and the Installer DLL included with the product; please refer to the Driver Installation in Windows topic for more information about the latter.
This method requires administrative rights to execute successfully. If the user account of the process that calls this method doesn't have such rights, the call will fail with an ERROR_PRIVILEGE_NOT_HELD () error.
Note: This method cannot be called within events.
unix_time_to_file_time Method (CBMemoryDrive Struct)
This method converts the date/time in Unix format to the Windows FileTime format.
Syntax
fn unix_time_to_file_time(&self, unix_time : i64, nanoseconds : i32) -> Result<chrono::DateTime<Utc>, CBFSStorageError>
Remarks
Use this method to convert the date/time in Unix format to the Windows FileTime format.
Pass the Unix time value to UnixTime and optionally pass the subsecond part of the time, expressed in nanoseconds, to the Nanoseconds parameter. If the subsecond part of the time is not available, set Nanoseconds to zero (0) value.
unregister_icon Method (CBMemoryDrive Struct)
Unregisters an existing overlay icon (Windows only).
Syntax
fn unregister_icon(&self, product_guid : &str, icon_id : &str) -> Result<bool, CBFSStorageError>
Remarks
This method unregisters the overlay icon identified by IconId. If the system must be rebooted to completely remove the icon, this method returns true, otherwise it returns false.
The same values must be passed for the ProductGUID and IconId parameters as were passed when register_icon was called; please refer to its documentation, as well as the Custom Drive Icons topic, for more information.
This method is available in both the struct API and the Installer DLL included with the product; please refer to the Driver Installation in Windows topic for more information about the latter. The Helper DLL must be installed in order for this method to function correctly. Applications can check to see whether the Helper DLL is installed using the get_module_version method, and install it using the install method if necessary.
This method requires administrative rights to execute successfully. If the user account of the process that calls this method doesn't have such rights, the call will fail with an ERROR_PRIVILEGE_NOT_HELD () error.
Note: This method cannot be called within events.
update_vault_encryption Method (CBMemoryDrive Struct)
This method encrypts, decrypts, or changes the encryption password of the vault.
Syntax
fn update_vault_encryption(&self, encryption : i32, old_password : &str, new_password : &str) -> Result<(), CBFSStorageError>
Remarks
This method changes the encryption mode or password used to encrypt the vault.
The Encryption parameter specifies the new encryption mode to use. Valid values are as follows:
VAULT_EM_NONE | 0x0 | Do not use encryption. |
VAULT_EM_DEFAULT | 0x1 | Use default encryption (VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256). |
VAULT_EM_XTS_AES256_PBKDF2_HMAC_SHA256 | 0x2 | Use AES256 encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash. |
VAULT_EM_CUSTOM256_PBKDF2_HMAC_SHA256 | 0x3 | Use event-based custom 256-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_PBKDF2_HMAC_SHA256 | 0x4 | Use event-based custom 512-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_PBKDF2_HMAC_SHA256 | 0x5 | Use event-based custom 1024-bit encryption with PBKDF2 key derivation based on a HMAC_SHA256 key hash.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_CUSTOM_KEY_DERIVE | 0x23 | Use event-based custom 256-bit encryption with custom key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM512_CUSTOM_KEY_DERIVE | 0x24 | Use event-based custom 512-bit encryption with custom key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM1024_CUSTOM_KEY_DERIVE | 0x25 | Use event-based custom 1024-bit encryption with custom key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. |
VAULT_EM_CUSTOM256_DIRECT_KEY | 0x43 | Use event-based custom 256-bit encryption with no key derivation.
A 256-bit (32-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM512_DIRECT_KEY | 0x44 | Use event-based custom 512-bit encryption with no key derivation.
A 512-bit (64-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_CUSTOM1024_DIRECT_KEY | 0x45 | Use event-based custom 1024-bit encryption with no key derivation.
A 1024-bit (128-byte) block size is used with this encryption mode. This mode is useful for cases in which the password is an identifier for an external key and should not be used for key derivation. |
VAULT_EM_UNKNOWN | 0xFF | Unidentified or unknown encryption. |
Applications that use custom encryption must implement at least the on_data_encrypt and on_data_decrypt events. Certain custom encryption modes may require that the on_hash_calculate or on_key_derive event be implemented as well. Please refer to the Encryption topic for more information.
The OldPassword parameter specifies the current encryption password, if applicable.
The NewPassword parameter specifies the new encryption password to use, if applicable.
Note: This method can be called only when active is true, and it cannot be called within events.
on_ejected Event (CBMemoryDrive Struct)
Fires when the media and virtual drive have been ejected (Windows only).
Syntax
// CBMemoryDriveEjectedEventArgs carries the CBMemoryDrive Ejected event's parameters. pub struct CBMemoryDriveEjectedEventArgs { fn result_code(&self) -> i32 fn set_result_code(&self, value : i32) } // CBMemoryDriveEjectedEvent defines the signature of the CBMemoryDrive Ejected event's handler function. pub trait CBMemoryDriveEjectedEvent { fn on_ejected(&self, sender : CBMemoryDrive, e : &mut CBMemoryDriveEjectedEventArgs); } impl <'a> CBMemoryDrive<'a> { pub fn on_ejected(&self) -> &'a dyn CBMemoryDriveEjectedEvent; pub fn set_on_ejected(&mut self, value : &'a dyn CBMemoryDriveEjectedEvent); ... }
Remarks
This event fires when a user has ejected the media and virtual drive using the Eject command in Windows File Explorer.
For ejection via the system notification area (tray) to work correctly, the storage_type property must be set to STGT_DISK_PNP, and the storage_characteristics property must include ejection-related flags.
This event is optional; it is provided to give applications a chance to, e.g., free up resources associated with the virtual drive. Since the virtual drive has already been destroyed by the time this event fires, applications must not call close_vault (it is called automatically with its Force parameter set to true) .
The ResultCode parameter will always be initially set to the result of a storage deletion operation. The expected value is 0. If the event cannot be handled in a "successful" manner for some reason (e.g., a resource isn't available, security checks failed, etc.), set it to a non-zero value to report an appropriate error. Note that as ejection has already occured, this non-zero value will not have effect on the media's state. Please refer to the Error Handling topic for more information.
on_error Event (CBMemoryDrive Struct)
This event fires if an unhandled error occurs during an event.
Syntax
// CBMemoryDriveErrorEventArgs carries the CBMemoryDrive Error event's parameters. pub struct CBMemoryDriveErrorEventArgs { fn error_code(&self) -> i32 fn description(&self) -> &String } // CBMemoryDriveErrorEvent defines the signature of the CBMemoryDrive Error event's handler function. pub trait CBMemoryDriveErrorEvent { fn on_error(&self, sender : CBMemoryDrive, e : &mut CBMemoryDriveErrorEventArgs); } impl <'a> CBMemoryDrive<'a> { pub fn on_error(&self) -> &'a dyn CBMemoryDriveErrorEvent; pub fn set_on_error(&mut self, value : &'a dyn CBMemoryDriveErrorEvent); ... }
Remarks
This event fires if an unhandled error occurs during another event. Developers can use this information to track down unhandled errors in an application's event handlers.
on_file_access Event (CBMemoryDrive Struct)
Fires when the OS wants to create or open a file or directory.
Syntax
// CBMemoryDriveFileAccessEventArgs carries the CBMemoryDrive FileAccess event's parameters. pub struct CBMemoryDriveFileAccessEventArgs { fn file_name(&self) -> &String fn existing_attributes(&self) -> i32 fn desired_access(&self) -> i32 fn attributes(&self) -> i32 fn options(&self) -> i32 fn share_mode(&self) -> i32 fn result_code(&self) -> i32 fn set_result_code(&self, value : i32) } // CBMemoryDriveFileAccessEvent defines the signature of the CBMemoryDrive FileAccess event's handler function. pub trait CBMemoryDriveFileAccessEvent { fn on_file_access(&self, sender : CBMemoryDrive, e : &mut CBMemoryDriveFileAccessEventArgs); } impl <'a> CBMemoryDrive<'a> { pub fn on_file_access(&self) -> &'a dyn CBMemoryDriveFileAccessEvent; pub fn set_on_file_access(&mut self, value : &'a dyn CBMemoryDriveFileAccessEvent); ... }
Remarks
This optional event fires when the OS wants to create or open the existing file or directory specified by FileName. It can be used to control and optionally restrict access to files and directories. The event fires when FireFileAccessEvent setting is enabled (by default, it is disabled for performance reasons).
This event also fires when the OS wants to create or open a named data stream in a file. Such requests are distinguished by the presence of a colon (:) in the FileName value; the text before the colon is the name of the file itself, and the text after the colon is the name of the stream to open.
The ExistingAttributes parameter contains the attributes of the file or directory being opened, if one already exists; otherwise, it contains 0.
To determine whether the request is for a file or a directory, compare ExistingAttributes against the VAULT_FATTR_DIRECTORY or VAULT_FATTR_FILE constant respectively, like so:
// Check whether the request is for a file or a directory.
bool isDirectory = ExistingAttributes & CBFSVAULT_FATTR_DIRECTORY == CBFSVAULT_FATTR_DIRECTORY;
bool isFile = ExistingAttributes & CBFSVAULT_FATTR_FILE == CBFSVAULT_FATTR_FILE;
The DesiredAccess parameter specifies the mode of access to the file or directory desired by the process that initiated the request. It can be one of the following values:
STG_DACCESS_READ | 0x00000001 | Grant/deny read access. |
STG_DACCESS_WRITE | 0x00000002 | Grant/deny write access. |
STG_DACCESS_READWRITE | 0x00000003 | Grant/deny read and write access. |
The Attributes parameter contains the value of Attributes, passed by the originator process; it may contain zero or more of the following attributes:
VAULT_FATTR_FILE | 0x00000001 | The entry is a file. |
VAULT_FATTR_DIRECTORY | 0x00000002 | The entry is a directory. |
VAULT_FATTR_DATA_STREAM | 0x00000004 | The entry is an alternate data stream. |
VAULT_FATTR_COMPRESSED | 0x00000008 | The file or stream is compressed. |
VAULT_FATTR_ENCRYPTED | 0x00000010 | The file or stream is encrypted. |
VAULT_FATTR_SYMLINK | 0x00000020 | The entry is a symbolic link. |
VAULT_FATTR_READONLY | 0x00000040 | The file is read-only.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_ARCHIVE | 0x00000080 | The file requires archiving.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_HIDDEN | 0x00000100 | The file is hidden.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_SYSTEM | 0x00000200 | The file is a system file.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_TEMPORARY | 0x00000400 | The file is temporary.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_DELETE_ON_CLOSE | 0x00000800 | The file should be deleted when the last handle to the file is closed.
This attribute is currently not supported by CBFS Storage. |
VAULT_FATTR_RESERVED_0 | 0x00001000 | Reserved. |
VAULT_FATTR_RESERVED_1 | 0x00002000 | Reserved. |
VAULT_FATTR_RESERVED_2 | 0x00004000 | Reserved. |
VAULT_FATTR_RESERVED_3 | 0x00008000 | Reserved. |
VAULT_FATTR_NO_USER_CHANGE | 0x0000F03F | A mask that includes all attributes that cannot be changed.
Applications cannot use the set_file_attributes method to directly change any of the following attributes: FILE, DIRECTORY, DATA_STREAM, COMPRESSED, ENCRYPTED, SYMLINK, RESERVED_0, RESERVED_1, RESERVED_2, or RESERVED_3. |
VAULT_FATTR_USER_DEFINED | 0x7FF00000 | A mask for application-defined attributes.
Applications can use the set_file_attributes method to set custom attributes, as long as their values are covered by this mask. |
VAULT_FATTR_ANY_FILE | 0x7FFFFFFF | A mask that includes any and all attributes. |
Windows: The Options parameter includes flags and options that are described in the CreateOptions parameter of the Native API's ZwCreateFile function. Most of those flags correspond to flags passed in the FlagsAndAttributes parameter of the Windows API's CreateFile function, but some flags are specific to Native API. If you need those flags, check both functions' descriptions.
Linux, macOS: this parameter is not used.
The ShareMode parameter specifies the access sharing mode desired by the process that initiated the request; it may contain zero or more of the following share mode flags:
FILE_SYS_SHARE_READ | 0x00000001 | Enables subsequent open operations on a file to request read access.
Otherwise, other processes cannot open the file if they request read access. If this flag is not specified, but the file has been opened for read access, file creation or opening fails. |
FILE_SYS_SHARE_WRITE | 0x00000002 | Enables subsequent open operations on a file to request write access.
Otherwise, other processes cannot open the file if they request write access. If this flag is not specified, but the file has been opened for write access or has a file mapping with write access, file creation or opening fails. |
FILE_SYS_SHARE_DELETE | 0x00000004 | Enables subsequent open operations on a file to request delete access.
Otherwise, other processes cannot open the file if they request delete access. If this flag is not specified, but the file has been opened for delete access, the function fails. Note: Delete access allows both delete and rename operations. |
The ResultCode parameter will always be 0 when the event is fired. Applications may perform the necessary access control using one of GetOriginator* methods, and set ResultCode to 0 to indicate that the file or directory may be opened, or to a system-specific error code to tell the OS about an error. Please refer to the Error Handling topic for more information.
Note: an application may not access the drive and its contents from an event handler, as this will cause a deadlock.
on_file_after_copy Event (CBMemoryDrive Struct)
This event fires after the file has been copied during file export/import operations.
Syntax
// CBMemoryDriveFileAfterCopyEventArgs carries the CBMemoryDrive FileAfterCopy event's parameters. pub struct CBMemoryDriveFileAfterCopyEventArgs { fn source_path(&self) -> &String fn destination_path(&self) -> &String fn attributes(&self) -> i32 fn result_code(&self) -> i32 fn set_result_code(&self, value : i32) } // CBMemoryDriveFileAfterCopyEvent defines the signature of the CBMemoryDrive FileAfterCopy event's handler function. pub trait CBMemoryDriveFileAfterCopyEvent { fn on_file_after_copy(&self, sender : CBMemoryDrive, e : &mut CBMemoryDriveFileAfterCopyEventArgs); } impl <'a> CBMemoryDrive<'a> { pub fn on_file_after_copy(&self) -> &'a dyn CBMemoryDriveFileAfterCopyEvent; pub fn set_on_file_after_copy(&mut self, value : &'a dyn CBMemoryDriveFileAfterCopyEvent); ... }
Remarks
This event fires when the struct is executing the copy_to_vault or copy_from_vault method after the file specified by SourcePath has been copied to a file identified by DestinationPath.
For a directory, the event fires after the directory identified by SourcePath has been created as DestinationPath and all of the source directory's contents have been processed.
The event will fire only if the VAULT_CFF_FIRE_COPY_EVENTS flag is included in the Flags parameter of the copy_from_vault or copy_to_vault method. Also, the event will not fire for the base directory that was passed to the copy_to_vault or copy_from_vault method.
A process may check whether it was a file or directory copied by inspecting the value of the Attributes parameter, which contains the attributes of the file as a 32-bit integer. The attributes are composed of one or more of the following values:
VAULT_FATTR_FILE | 0x00000001 | The entry is a file. |
VAULT_FATTR_DIRECTORY | 0x00000002 | The entry is a directory. |
VAULT_FATTR_DATA_STREAM | 0x00000004 | The entry is an alternate data stream. |
VAULT_FATTR_COMPRESSED | 0x00000008 | The file or stream is compressed. |
VAULT_FATTR_ENCRYPTED | 0x00000010 | The file or stream is encrypted. |
VAULT_FATTR_SYMLINK | 0x00000020 | The entry is a symbolic link. |
VAULT_FATTR_READONLY | 0x00000040 | The file is read-only.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_ARCHIVE | 0x00000080 | The file requires archiving.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_HIDDEN | 0x00000100 | The file is hidden.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_SYSTEM | 0x00000200 | The file is a system file.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_TEMPORARY | 0x00000400 | The file is temporary.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_DELETE_ON_CLOSE | 0x00000800 | The file should be deleted when the last handle to the file is closed.
This attribute is currently not supported by CBFS Storage. |
VAULT_FATTR_RESERVED_0 | 0x00001000 | Reserved. |
VAULT_FATTR_RESERVED_1 | 0x00002000 | Reserved. |
VAULT_FATTR_RESERVED_2 | 0x00004000 | Reserved. |
VAULT_FATTR_RESERVED_3 | 0x00008000 | Reserved. |
VAULT_FATTR_NO_USER_CHANGE | 0x0000F03F | A mask that includes all attributes that cannot be changed.
Applications cannot use the set_file_attributes method to directly change any of the following attributes: FILE, DIRECTORY, DATA_STREAM, COMPRESSED, ENCRYPTED, SYMLINK, RESERVED_0, RESERVED_1, RESERVED_2, or RESERVED_3. |
VAULT_FATTR_USER_DEFINED | 0x7FF00000 | A mask for application-defined attributes.
Applications can use the set_file_attributes method to set custom attributes, as long as their values are covered by this mask. |
VAULT_FATTR_ANY_FILE | 0x7FFFFFFF | A mask that includes any and all attributes. |
To cancel further copying, return the VAULT_ERR_INTERRUPTED_BY_USER error code via ResultCode.
The ResultCode parameter will always be 0 when the event is fired. If the event cannot be handled in a "successful" manner for some reason (e.g., a resource is not available or security checks failed), set it to a nonzero value to report an appropriate error. Please see the Error Handling topic for more information.
Note: When a storage is opened concurrently in read-only mode by several applications using CBVaultDrive or CBMemoryDrive struct, the event will fire only in the first application. To prevent such a situation, always open a vault in read-write mode.
on_file_before_copy Event (CBMemoryDrive Struct)
This event fires before the file is copied during file export/import operations.
Syntax
// CBMemoryDriveFileBeforeCopyEventArgs carries the CBMemoryDrive FileBeforeCopy event's parameters. pub struct CBMemoryDriveFileBeforeCopyEventArgs { fn source_path(&self) -> &String fn destination_path(&self) -> &String fn attributes(&self) -> i32 fn set_attributes(&self, value : i32) fn destination_exists(&self) -> bool fn skip(&self) -> bool fn set_skip(&self, value : bool) fn result_code(&self) -> i32 fn set_result_code(&self, value : i32) } // CBMemoryDriveFileBeforeCopyEvent defines the signature of the CBMemoryDrive FileBeforeCopy event's handler function. pub trait CBMemoryDriveFileBeforeCopyEvent { fn on_file_before_copy(&self, sender : CBMemoryDrive, e : &mut CBMemoryDriveFileBeforeCopyEventArgs); } impl <'a> CBMemoryDrive<'a> { pub fn on_file_before_copy(&self) -> &'a dyn CBMemoryDriveFileBeforeCopyEvent; pub fn set_on_file_before_copy(&mut self, value : &'a dyn CBMemoryDriveFileBeforeCopyEvent); ... }
Remarks
This event fires when the struct is executing the copy_to_vault or copy_from_vault method before the file specified by SourcePath is copied to a file identified by DestinationPath or before the directory identified by SourcePath is about to be created as DestinationPath.
This event will fire only if the VAULT_CFF_FIRE_COPY_EVENTS flag is included in the Flags parameter of the copy_from_vault or copy_to_vault method. Also, the event will not fire for the base directory that was passed to the copy_to_vault or copy_from_vault method.
A process may check whether it is a file or a directory being copied by inspecting the value of the Attributes parameter, which contains the attributes of the file as a 32-bit integer. The attributes are composed of one or more of the following values:
VAULT_FATTR_FILE | 0x00000001 | The entry is a file. |
VAULT_FATTR_DIRECTORY | 0x00000002 | The entry is a directory. |
VAULT_FATTR_DATA_STREAM | 0x00000004 | The entry is an alternate data stream. |
VAULT_FATTR_COMPRESSED | 0x00000008 | The file or stream is compressed. |
VAULT_FATTR_ENCRYPTED | 0x00000010 | The file or stream is encrypted. |
VAULT_FATTR_SYMLINK | 0x00000020 | The entry is a symbolic link. |
VAULT_FATTR_READONLY | 0x00000040 | The file is read-only.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_ARCHIVE | 0x00000080 | The file requires archiving.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_HIDDEN | 0x00000100 | The file is hidden.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_SYSTEM | 0x00000200 | The file is a system file.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_TEMPORARY | 0x00000400 | The file is temporary.
This attribute is not used by CBFS Storage, but it can be set and retrieved. |
VAULT_FATTR_DELETE_ON_CLOSE | 0x00000800 | The file should be deleted when the last handle to the file is closed.
This attribute is currently not supported by CBFS Storage. |
VAULT_FATTR_RESERVED_0 | 0x00001000 | Reserved. |
VAULT_FATTR_RESERVED_1 | 0x00002000 | Reserved. |
VAULT_FATTR_RESERVED_2 | 0x00004000 | Reserved. |
VAULT_FATTR_RESERVED_3 | 0x00008000 | Reserved. |
VAULT_FATTR_NO_USER_CHANGE | 0x0000F03F | A mask that includes all attributes that cannot be changed.
Applications cannot use the set_file_attributes method to directly change any of the following attributes: FILE, DIRECTORY, DATA_STREAM, COMPRESSED, ENCRYPTED, SYMLINK, RESERVED_0, RESERVED_1, RESERVED_2, or RESERVED_3. |
VAULT_FATTR_USER_DEFINED | 0x7FF00000 | A mask for application-defined attributes.
Applications can use the set_file_attributes method to set custom attributes, as long as their values are covered by this mask. |
VAULT_FATTR_ANY_FILE | 0x7FFFFFFF | A mask that includes any and all attributes. |
An event handler may change the following attributes: VAULT_FATTR_READONLY, VAULT_FATTR_ARCHIVE, VAULT_FATTR_HIDDEN, VAULT_FATTR_SYSTEM, VAULT_FATTR_TEMPORARY. When files are imported to the vault, an event handler may set user-defined flags that match the VAULT_FATTR_USER_DEFINED mask.
The DestinationExists flag indicates the presence of the file or directory at the moment when the event is fired.
Note: When copying the files from the vault, it is possible that a file gets created or deleted outside of the struct; the value of this parameter may become inaccurate.
To skip the file, set the Skip parameter to true. When the file is skipped, on_file_after_copy does not fire.
To cancel copying, return the VAULT_ERR_INTERRUPTED_BY_USER error code via ResultCode.
The ResultCode parameter will always be 0 when the event is fired. If the event cannot be handled in a "successful" manner for some reason (e.g., a resource is not available or security checks failed), set it to a nonzero value to report an appropriate error. Please see the Error Handling topic for more information.
Note: When a storage is opened concurrently in read-only mode by several applications using CBVaultDrive or CBMemoryDrive struct, the event will fire only in the first application. To prevent such a situation, always open a vault in read-write mode.
on_file_password_needed Event (CBMemoryDrive Struct)
This event fires if a password is needed to open an encrypted file.
Syntax
// CBMemoryDriveFilePasswordNeededEventArgs carries the CBMemoryDrive FilePasswordNeeded event's parameters. pub struct CBMemoryDriveFilePasswordNeededEventArgs { fn file_name(&self) -> &String fn password(&self) -> &String fn set_password(&self, value : String) fn set_password_ref(&self, value : &String) fn ttl_in_cache(&self) -> i32 fn set_ttl_in_cache(&self, value : i32) fn result_code(&self) -> i32 fn set_result_code(&self, value : i32) } // CBMemoryDriveFilePasswordNeededEvent defines the signature of the CBMemoryDrive FilePasswordNeeded event's handler function. pub trait CBMemoryDriveFilePasswordNeededEvent { fn on_file_password_needed(&self, sender : CBMemoryDrive, e : &mut CBMemoryDriveFilePasswordNeededEventArgs); } impl <'a> CBMemoryDrive<'a> { pub fn on_file_password_needed(&self) -> &'a dyn CBMemoryDriveFilePasswordNeededEvent; pub fn set_on_file_password_needed(&mut self, value : &'a dyn CBMemoryDriveFilePasswordNeededEvent); ... }
Remarks
This event fires when the encrypted file specified by FileName is being opened if a valid password has not been provided (either directly, or via the default_file_access_password property or cache_file_password method). This event will not fire if a valid password has already been provided, or if the file specified by FileName does not exist in the vault.
To allow access to the specified file, set the Password parameter to the correct password.
If an invalid password is provided by the event handler, the event will fire again.
To prevent access to the specified file or to stop being asked for a password in a loop, return the VAULT_ERR_INVALID_PASSWORD error code via ResultCode.
The TTLInCache parameter specifies time to seconds that the struct keeps the password in the internal cache to reduce the number of requests for a password. The value of 0 tells the struct to discard the password after the first use.
Note: This event can be fired on different threads, and possibly even on several threads concurrently. As an alternative to handling this event, applications can provide a default file encryption password using the default_file_access_password property or can call the cache_file_password method (before a file is opened) to specify a one-time-use password.
The ResultCode parameter will always be 0 when the event is fired. If the event cannot be handled in a "successful" manner for some reason (e.g., a resource is not available or security checks failed), set it to a nonzero value to report an appropriate error. Please see the Error Handling topic for more information.
Note: When a storage is opened concurrently in read-only mode by several applications using CBVaultDrive or CBMemoryDrive struct, the event will fire only in the first application. To prevent such a situation, always open a vault in read-write mode.
on_progress Event (CBMemoryDrive Struct)
This event fires to indicate the progress of long-running vault operations.
Syntax
// CBMemoryDriveProgressEventArgs carries the CBMemoryDrive Progress event's parameters. pub struct CBMemoryDriveProgressEventArgs { fn operation(&self) -> i32 fn file_name(&self) -> &String fn progress(&self) -> i32 fn total(&self) -> i32 fn can_stop(&self) -> bool fn stop(&self) -> bool fn set_stop(&self, value : bool) } // CBMemoryDriveProgressEvent defines the signature of the CBMemoryDrive Progress event's handler function. pub trait CBMemoryDriveProgressEvent { fn on_progress(&self, sender : CBMemoryDrive, e : &mut CBMemoryDriveProgressEventArgs); } impl <'a> CBMemoryDrive<'a> { pub fn on_progress(&self) -> &'a dyn CBMemoryDriveProgressEvent; pub fn set_on_progress(&mut self, value : &'a dyn CBMemoryDriveProgressEvent); ... }
Remarks
This event fires anytime the struct needs to report the progress of a long-running vault operation. Certain operations may cause this event to fire repeatedly.
The Operation parameter specifies which long-running operation caused this event to fire. Possible values are as follows:
VAULT_PO_FORMATTING | 0 | Formatting a vault. |
VAULT_PO_CHECKING_1 | 1 | Checking a vault (stage 1). |
VAULT_PO_CHECKING_2 | 2 | Checking a vault (stage 2). |
VAULT_PO_CHECKING_3 | 3 | Checking a vault (stage 3). |
VAULT_PO_CHECKING_4 | 4 | Checking a vault (stage 4). |
VAULT_PO_CHECKING_5 | 5 | Checking a vault (stage 5). |
VAULT_PO_PAGE_CORRUPTED | 8 | Processing a corrupted vault page. |
VAULT_PO_PAGE_ORPHANED | 9 | Processing an orphaned vault page. |
VAULT_PO_COMPRESSING | 10 | Compressing a file or alternate stream. |
VAULT_PO_DECOMPRESSING | 11 | Decompressing a file or alternate stream. |
VAULT_PO_ENCRYPTING | 12 | Encrypting a vault, file, or alternate stream. |
VAULT_PO_DECRYPTING | 13 | Decrypting a vault, file, or alternate stream |
VAULT_PO_COMPACTING | 14 | Compacting a vault. |
VAULT_PO_RESIZING | 15 | Resizing a vault. |
VAULT_PO_CALCULATING_SIZE | 16 | Calculating a vault's size. |
VAULT_PO_COPYING_FILES_TO_VAULT | 17 | Copying files to a vault. |
VAULT_PO_COPYING_FILES_FROM_VAULT | 18 | Copying files from a vault. |
When the operation is copying files from or to the vault, FileName contains the path of the source file being copied.
The Progress and Total parameters reflect the current and maximum progress values. Both will be 0 if the operation's progression cannot be determined.
The CanStop parameter indicates whether the application may interrupt the operation by setting the Stop parameter to true.
Note: Some operations can be interrupted only at certain points over the course of their lifetime.
Note: An application should not attempt to call struct's methods from handlers of this event. Doing this is guaranteed to cause a deadlock.
Note: When a storage is opened concurrently in read-only mode by several applications using CBVaultDrive or CBMemoryDrive struct, the event will fire only in the first application. To prevent such a situation, always open a vault in read-write mode.
CBFSStorageStream Struct
Syntax
cbfsstorage::CBFSStorageStream
Remarks
The CBFSStorageStream struct is returned by some of the CBMemoryDrive struct's methods. All stream structs in CBFS Storage share a common API, which implements Read, Write, and Seek traits from Rust's io module, documented below.
Properties | |
Length |
Gets or sets the length of the stream, in bytes.
fn get_len(&self) -> std::io::Result<u64>; |
Position |
Gets the current position within the stream.
fn stream_position(&self) -> std::io::Result<u64>; |
Methods | |
Close |
Closes the stream. Has no effect if the stream is already closed.
fn close(&mut self); |
Flush |
Forces all data held by the stream's buffers to be written out to storage.
fn flush(&mut self) -> std::io::Result<()>; |
Read |
Reads a sequence of bytes from the stream and advances the current position within the stream by the number of bytes read.
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize>; The number of bytes to read is determined as buf.len(). Fewer than the size of buf may be read if fewer bytes are available. Returns the number of bytes read, and any error encountered. |
Seek |
Sets the current position within the stream based on a particular point of origin.
fn seek(&mut self, pos: std::io::SeekFrom) -> std::io::Result<u64>; Returns the new offset relative to the start of the stream, and any error encountered. |
Write |
Writes a sequence of bytes to the stream and advances the current position within the stream by the number of bytes written.
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize>; The number of bytes to write is determined as buf.len(). Returns the number of bytes written, and any error encountered. |
Config Settings (CBMemoryDrive Struct)
The struct accepts one or more of the following configuration settings. Configuration settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the struct, access to these internal properties is provided through the config method.CBMemoryDrive Config Settings
By default, this setting is disabled, and alternate streams can be renamed only within the same file, and cannot be moved between them.
Note: This setting cannot be changed within events.
By default, this setting is enabled, and the broadcast is sent asynchronously. This is typically sufficient, but applications may disable this setting if they find that Windows File Explorer is still presenting virtual drives as available after they've been deleted (which may occur if the application exits immediately after deleting a virtual drive).
By default, this setting is set to 0, and automatic compaction operations will start without delay.
Note: This setting cannot be changed within events.
By default, this setting is set to 0.
This setting's value is stored in the registry and is persistent; it requires administrative rights to be changed.
A vault's maximum nonpaged name length is permanent, and it cannot be changed after the vault is created. When a vault is open, this configuration setting cannot be changed, and it can be queried only to obtain the value used by the vault.
By default, this setting is set to 0, and the struct will automatically choose an optimal value when creating a vault based on page_size.
Note: This setting cannot be changed when active is true, and it cannot be changed within events.
This setting, when enabled, tells the driver to create a fake mounting point and use it to work around the Search Indexer bug. By default, this setting is disabled.
Note: This property cannot be changed within events.
Trappable Errors (CBMemoryDrive Struct)
The struct uses the error codes shown below, all of which are also available as constants for applications' convenience. System error codes, all of which are positive, may also be used as necessary for virtual-drive-related errors. Please refer to the Error Handling topic for more information.CBMemoryDrive Errors
-1 | The specified file is not a CBFS Storage vault. (VAULT_ERR_INVALID_VAULT_FILE) |
-2 | The specified page size is not valid. (VAULT_ERR_INVALID_PAGE_SIZE) |
-3 | The vault is corrupted. Please call check_and_repair. (VAULT_ERR_VAULT_CORRUPTED) |
-4 | Too many transactions active. (VAULT_ERR_TOO_MANY_TRANSACTIONS) |
-5 | A file, directory, symbolic link, or alternate stream with the specified name already exists. (VAULT_ERR_FILE_ALREADY_EXISTS) |
-6 | One or more transactions are still active. (VAULT_ERR_TRANSACTIONS_STILL_ACTIVE) |
-7 | The specified file tag already exists. (VAULT_ERR_TAG_ALREADY_EXISTS) |
-8 | The specified file, directory, symbolic link, or alternate stream was not found. (VAULT_ERR_FILE_NOT_FOUND) |
-9 | The specified path was not found. (VAULT_ERR_PATH_NOT_FOUND) |
-10 | The specified file or alternate stream is already open in an exclusive access mode. (VAULT_ERR_SHARING_VIOLATION) |
-11 | Cannot seek beyond the end of a file or alternate stream. (VAULT_ERR_SEEK_BEYOND_EOF) |
-12 | No other files, directories, symbolic links, or alternate streams match the search criteria. (VAULT_ERR_NO_MORE_FILES) |
-13 | The specified name is not valid. (VAULT_ERR_INVALID_FILE_NAME) |
-14 | The requested operation cannot be performed while a vault is open. (VAULT_ERR_VAULT_ACTIVE) |
-15 | A vault must be open before the requested operation can be performed. (VAULT_ERR_VAULT_NOT_ACTIVE) |
-16 | The specified password is incorrect. (VAULT_ERR_INVALID_PASSWORD) |
-17 | The requested operation cannot be performed; the vault is open in read-only mode. (VAULT_ERR_VAULT_READ_ONLY) |
-18 | Cannot use custom encryption; no custom encryption event handlers provided. (VAULT_ERR_NO_ENCRYPTION_HANDLERS) |
-19 | Out of memory. (VAULT_ERR_OUT_OF_MEMORY) |
-20 | A symbolic link's destination file could not be found. (VAULT_ERR_SYMLINK_DESTINATION_NOT_FOUND) |
-21 | The specified file is not a symbolic link. (VAULT_ERR_FILE_IS_NOT_SYMLINK) |
-22 | The specified buffer is too small to hold the requested value. (VAULT_ERR_BUFFER_TOO_SMALL) |
-23 | Decompression failed (possibly due to corruption). (VAULT_ERR_BAD_COMPRESSED_DATA) |
-24 | Invalid parameter. (VAULT_ERR_INVALID_PARAMETER) |
-25 | The vault is full (and cannot be automatically resized). (VAULT_ERR_VAULT_FULL) |
-26 | Operation interrupted by user. (VAULT_ERR_INTERRUPTED_BY_USER) |
-27 | The specified file tag was not found. (VAULT_ERR_TAG_NOT_FOUND) |
-28 | The specified directory is not empty. (VAULT_ERR_DIRECTORY_NOT_EMPTY) |
-29 | The file or alternate stream was closed unexpectedly; the handle is no longer valid. (VAULT_ERR_HANDLE_CLOSED) |
-30 | Invalid file or alternate stream handle. (VAULT_ERR_INVALID_STREAM_HANDLE) |
-31 | Access denied. (VAULT_ERR_FILE_ACCESS_DENIED) |
-32 | Cannot use custom compression; no custom compression event handlers provided. (VAULT_ERR_NO_COMPRESSION_HANDLERS) |
-33 | Not implemented in this version of CBFS Storage. (VAULT_ERR_NOT_IMPLEMENTED) |
-35 | The CBFS Storage system driver has not been installed. (VAULT_ERR_DRIVER_NOT_INSTALLED) |
-37 | The specified vault cannot be opened, it was created using a newer version of CBFS Storage. (VAULT_ERR_NEW_VAULT_VERSION) |
-38 | The specified file is not a directory. (VAULT_ERR_FILE_IS_NOT_DIRECTORY) |
-39 | The specified file tag data type is not valid. (VAULT_ERR_INVALID_TAG_DATA_TYPE) |
-40 | The specified vault storage file does not exist. (VAULT_ERR_VAULT_FILE_DOES_NOT_EXIST) |
-41 | The specified vault storage file already exists. (VAULT_ERR_VAULT_FILE_ALREADY_EXISTS) |
-42 | Some callback mode event handler has returned an unidentified error. (VAULT_ERR_CALLBACK_MODE_FAILURE) |
-43 | External library could not be initialized or used. (VAULT_ERR_EXTERNAL_ERROR) |
Special Use Errors
21 | ERROR_NOT_READY: Reported by the methods of the struct if initialize has not been called or did not succeed. |
191 | ERROR_INVALID_EXE_SIGNATURE: Reported by the install method when the CAB file signature cannot be validated. |
575 | ERROR_APP_INIT_FAILURE: Reported by the methods of the struct if initialize has not been called or did not succeed. Differs from ERROR_NOT_READY (21) in that it indicates a specific situation in the internal code. |
588 | ERROR_FS_DRIVER_REQUIRED: Reported if the required system module was not correctly installed for the given ProductGUID. |
614 | ERROR_NO_CALLBACK_ACTIVE: Reported by any method that can only be called within event handlers if it is called outside an event handler. |
618 | ERROR_UNSUPPORTED_COMPRESSION: Reported by the OpenVault method of CBVaultDrive when the vault file is compressed or encrypted (e.g., using built-in NTFS mechanisms), which is not supported. |
1292 | ERROR_IMPLEMENTATION_LIMIT: Reported when the timeout value provided is less than 3 seconds. |
1314 | ERROR_PRIVILEGE_NOT_HELD: Reported by any method that requires elevated permissions if it is called without such permissions. |
6002 | ERROR_FILE_ENCRYPTED: Reported by the by the OpenVault method of CBVaultDrive when the vault file is encrypted, which is not supported. |