BigDrive is a modular, cross-language framework for building, configuring, and managing virtual drive providers and shell folder integrations on Windows. It supports the development and registration of custom drive providers, configuration management, and seamless integration with Windows shell extensions.
- Provider Framework: Create and register custom drive providers using a unified interface.
- Configuration Management: Manage provider and drive configurations, including parsing and storing settings in JSON.
- Shell Integration: Implement
IShellFolderand related interfaces for Windows Explorer integration. - Event Logging: Utilities for writing to the Windows Event Viewer for diagnostics and monitoring.
- Extensive Unit Tests: Comprehensive test coverage for all major components.
Windows Shell Folder Extensions are challenging to develop for several reasons:
- C++ Implementation:
Shell folder extensions must be implemented in C++. Since they are hosted inexplorer.exe, loading .NET assemblies is not recommended. - Limited Documentation:
Shell extensions have existed since Windows 95, but early documentation was scarce and not widely available online. - Memory Management:
Extensions must manage memory perfectly, asexplorer.execan run for long periods. Even minor leaks can accumulate over time. - Stability:
Access violations in extensions can crashexplorer.exeand cause the taskbar to disappear, requiring a restart. - COM Complexity:
Developing shell extensions involves implementing numerous COM interfaces and clipboard formats.
To address these challenges, BigDrive uses a C++ shim shell extension that proxies data requests to out-of-process COM+ components. This design ensures:
- Process Isolation:
COM+ components run outsideexplorer.exe, so crashes do not affect the shell. - Language Flexibility:
COM+ components can be written in any language that supports COM on Windows. - Extensibility:
Developers can write and register their own COM+ components, which BigDrive will discover and expose as drives in File Explorer under "This PC".
See the Installation Architecture for details.
src/BigDrive.Client/— Core C++ client library for interacting with providers and managing configurations.src/BigDrive.Provider.Sample/— Example C# provider implementation demonstrating integration with the framework.src/BigDrive.Setup/— Setup utilities for bootstrapping event logs and managing event sources.src/ConfigProvider/— Configuration provider logic and models.src/BigDrive.Service/— COM+ Application with permsions to register drives and manage configurations.src/Interfaces/— Shared interface definitions for providers and clients.src/BigDrive.ShellFolder/— Shell extension implementation for Windows Explorer integration.src/BigDrive.Extenion/— Shell extension context menu implemenation for registering drives.test/— Unit tests for all major modules.
- Build the Solution:
OpenBigDrive.slnin Visual Studio and build all projects. - Run Setup:
Use the setup utilities insrc/BigDrive.Setup/to register event sources and prepare the environment (requires administrator privileges). - Develop Providers:
Use the sample provider as a template for building your own drive providers. - Testing:
Run the unit tests in thetest/directory to verify functionality.
This project is licensed under the MIT License. See the LICENSE file for details.