A Windows kernel-mode driver that enables Windows Hello facial recognition support for virtual camera devices through driver emulation and Media Foundation Transform processing.
β START HERE: Immediate Steps Guide
Complete practical guides for Week 1:
- π Step-by-Step Guide - Detailed walkthrough (2-4 hours)
- β Progress Checklist - Track your completion
- π§ Troubleshooting - Quick solutions
First time here? β Start with IMMEDIATE_STEPS_START_HERE.md for the complete roadmap.
- New to this project? β Start with IMMEDIATE_STEPS_START_HERE.md for Week 1 tasks
- Want overview? β Continue reading this README
- Need quick commands? β See QUICK_REFERENCE.md
- Want build instructions? β Read Documentation/BUILD_AND_INSTALL.md
- Understanding consolidation? β Review CONSOLIDATION_SUMMARY.md
This project was born from the goal of making regular RGB webcams compatible with Windows Hello facial recognition by emulating the behavior of certified biometric cameras (like Intel RealSense or Surface cameras). The core concept: if we can make Windows believe a standard webcam has the proper biometric capabilities, we can enable Windows Hello face authentication without specialized hardware.
- Analyzed Windows Hello Requirements: Studied how Windows Hello detects and validates biometric cameras
- Reverse-Engineered Reference Drivers: Examined existing camera drivers (Realtek, RealSense) to understand the architecture
- Identified Key Components: Determined that we needed:
- Kernel-mode driver (KMDF) to present as a camera device
- Media Foundation Transform (MFT) for stream processing
- Proper INF configuration with Camera class and Windows Hello signature attributes
- Multi-stream support (RGB + IR) for full biometric compatibility
- Created KMDF Driver Skeleton: Built the foundational Windows Driver Framework structure
- Driver entry points (Driver.c/h)
- Device management (Device.c/h)
- I/O queue handlers (Queue.c/h)
- WPP trace logging support
- Configured Build System: Set up Visual Studio 2022 solution with WDK integration
- x64 and ARM64 platform support
- Debug and Release configurations
- Proper library dependencies and build settings
- Modified INF File: This was the breakthrough moment
- Changed device class from "System" to "Camera" (GUID:
{ca3e7ab9-b4c3-4ae6-8251-579ef933890f}) - Added
SignatureAttributes.WindowsHellosection to mark binaries as Hello-compatible - Configured camera device interfaces for Windows recognition
- Registered MFT CLSID for stream processing association
- Changed device class from "System" to "Camera" (GUID:
- Implemented Media Foundation Transform (MFT): Complete COM-based stream processor
- Full
IMFTransforminterface implementation (~500 lines of code) - Support for RGB24 and YUY2 video formats
- Pass-through processing architecture (extensible for AI/ML)
- COM factory and DLL registration infrastructure
- Full
- Connected All Components: Ensured driver and MFT work together seamlessly
- Created Comprehensive Documentation:
- Build and installation guides
- Quick reference commands
- Deployment checklists
- Troubleshooting procedures
- Developed Automation Scripts:
- install.bat - Automated installation with validation
- uninstall.bat - Clean removal process
- verify.bat - Post-installation verification
Core Implementation: COMPLETE β
The foundational architecture is fully implemented and ready for testing:
- β KMDF Driver: Full kernel-mode driver structure with proper WDF architecture
- β Camera Class Configuration: INF properly configured for Camera class with Windows Hello attributes
- β MFT Implementation: Complete IMFTransform implementation with COM infrastructure
- β Build System: Visual Studio 2022 + WDK support for x64/ARM64
- β Documentation: Comprehensive guides for building, installing, and troubleshooting
- β Installation Scripts: Automated install/uninstall/verify batch files
What Works Now:
- Driver compiles and builds successfully
- Installs as Camera device in Device Manager
- MFT registers with Media Foundation
- Windows Hello signature attributes are present
- All infrastructure ready for stream processing
Next Steps (Requires Hardware Testing):
- π Physical camera stream capture implementation
- π RGB to IR stream simulation for biometric verification
- π Multi-stream support (RGB + IR) for full Windows Hello compatibility
- π Windows Hello face enrollment and authentication testing
- π Optional: AI/ML integration (ONNX Runtime for enhanced face detection)
- πΉ Virtual Camera Emulation: Presents as a genuine camera device to Windows
- π Windows Hello Compatible: Configured with biometric camera signature attributes
- π¬ MFT Stream Processing: Complete Media Foundation Transform for video frame handling
- π» Multi-Platform Support: x64 and ARM64 architectures
- π Trace Logging: WPP (Windows Software Trace Preprocessor) for debugging
- π§ Extensible Architecture: Ready for AI/ML integration and custom processing
- βοΈ Production-Ready Infrastructure: Complete build, install, and verification tools
VirtualCamDriver/
βββ VirtualCamDriver/ # KMDF Kernel Driver
β βββ Driver.c/.h # Driver entry points and initialization
β βββ Device.c/.h # Device object creation and management
β βββ Queue.c/.h # I/O request queue handling
β βββ VirtualCamDriver.inf # Installation file with Camera class config
β βββ Trace.h # WPP tracing definitions
β βββ Public.h # Public interface definitions
β
βββ VirtualCamMFT/ # Media Foundation Transform DLL
β βββ VirtualCamMFT.h/.cpp # Complete IMFTransform implementation
β βββ DllMain.cpp # COM factory & DLL registration
β βββ VirtualCamMFT.def # DLL export definitions
β βββ README.md # MFT-specific documentation
β
βββ Documentation/
β βββ BUILD_AND_INSTALL.md # Complete build & installation guide
β βββ IMPLEMENTATION_SUMMARY.md # Detailed implementation status
β βββ objective.md # Original project objectives
β βββ steps.md # Development roadmap
β
βββ install.bat # Automated installation script
βββ uninstall.bat # Clean removal script
βββ verify.bat # Post-install verification
βββ QUICK_REFERENCE.md # Command quick reference
βββ DEPLOYMENT_CHECKLIST.md # Production deployment guide
- Operating System: Windows 10 (version 1903+) or Windows 11 (x64 or ARM64)
- Visual Studio 2022: Community, Professional, or Enterprise edition
- Install with "Desktop development with C++" workload
- Windows Driver Kit (WDK): Version 22H2 or later
- Windows SDK: Version 10.0.22000.0 or later (included with WDK)
- Windows Debugging Tools: For troubleshooting (optional but recommended)
- Administrator Privileges: Required for driver installation
- Test Signing Mode: Required for development (see Certificate Signing section below)
- PnPUtil or DevCon: For driver management (PnPUtil included with Windows)
-
Open the solution:
Double-click VirtualCamDriver.sln -
Select configuration:
- Platform:
x64(orARM64for ARM devices) - Configuration:
Release(for production) orDebug(for development)
- Platform:
-
Build the solution:
- Press
Ctrl+Shift+Bor - Menu: Build β Build Solution
- Press
-
Verify build output:
- Check the Output window for build success
- Locate binaries in:
x64\Release\orx64\Debug\ - Required files:
VirtualCamDriver.sys(driver)VirtualCamMFT.dll(MFT)VirtualCamDriver.inf(installation file)
# Navigate to the project directory
cd C:\path\to\VirtualCamDriver
# Build for x64 Release
msbuild VirtualCamDriver.sln /t:Build /p:Configuration=Release /p:Platform=x64
# Build for ARM64 Release
msbuild VirtualCamDriver.sln /t:Build /p:Configuration=Release /p:Platform=ARM64This is the easiest workaround for development and testing without purchasing a certificate.
-
Enable Test Signing (requires Administrator privileges and restart):
# Open Command Prompt as Administrator bcdedit /set testsigning on # Restart your computer shutdown /r /t 0
-
Verify test signing is enabled (after restart):
bcdedit /enum {current} | findstr "testsigning" # Should show: testsigning Yes
Note: When test signing is enabled, you'll see a watermark on your desktop saying "Test Mode"
-
Create a self-signed test certificate (one-time setup):
# Create a test certificate and install it makecert -r -pe -ss PrivateCertStore -n "CN=VirtualCamDriver Test Certificate" TestCert.cer # Install the certificate to the root store (run as Administrator) certutil -addstore Root TestCert.cer
-
Sign the driver and MFT:
# Navigate to your build output directory cd x64\Release # Sign the driver signtool sign /v /s PrivateCertStore /n "VirtualCamDriver Test Certificate" /t http://timestamp.digicert.com VirtualCamDriver.sys # Sign the MFT DLL signtool sign /v /s PrivateCertStore /n "VirtualCamDriver Test Certificate" /t http://timestamp.digicert.com VirtualCamMFT.dll
-
Verify signatures:
signtool verify /pa VirtualCamDriver.sys signtool verify /pa VirtualCamMFT.dll
For distributing your driver to end users, you need a legitimate code signing certificate.
-
Obtain an EV (Extended Validation) Code Signing Certificate:
- Purchase from a trusted Certificate Authority (CA):
- DigiCert
- GlobalSign
- Sectigo
- Cost: ~$200-$500 per year
- Requires business verification
- Purchase from a trusted Certificate Authority (CA):
-
Sign with production certificate:
# Using a PFX file with password signtool sign /v /fd SHA256 /f "YourCertificate.pfx" /p "YourPassword" /t http://timestamp.digicert.com VirtualCamDriver.sys signtool sign /v /fd SHA256 /f "YourCertificate.pfx" /p "YourPassword" /t http://timestamp.digicert.com VirtualCamMFT.dll
-
Create catalog file (for Windows Hardware Lab Kit compatibility):
inf2cat /driver:. /os:10_X64 signtool sign /v /fd SHA256 /f "YourCertificate.pfx" /p "YourPassword" VirtualCamDriver.cat
# Temporary disable (one-time boot)
# Restart β Press F8 β Select "Disable Driver Signature Enforcement"
# Or use bcdedit (requires restart)
bcdedit /set nointegritychecks on-
Copy installation files to a folder:
VirtualCamDriver.sysVirtualCamMFT.dllVirtualCamDriver.infinstall.bat(from repository root)
-
Run install.bat as Administrator:
Right-click install.bat β "Run as administrator" -
Follow the prompts:
- The script will check for test signing
- Install the driver using PnPUtil
- Register the MFT DLL
- Verify the installation
-
Copy files to a deployment folder:
mkdir C:\VirtualCamDriver copy VirtualCamDriver.sys C:\VirtualCamDriver\ copy VirtualCamMFT.dll C:\VirtualCamDriver\ copy VirtualCamDriver.inf C:\VirtualCamDriver\ cd C:\VirtualCamDriver
-
Install driver package:
# Open Command Prompt as Administrator pnputil /add-driver VirtualCamDriver.inf /install
-
Register the MFT:
regsvr32 VirtualCamMFT.dll
# Run from the directory containing verify.bat
verify.batThis will check:
- Test signing status
- Driver package installation
- Device presence in system
- MFT registration
- Camera interface configuration
- Device class settings
- Recent error logs
-
Check Device Manager:
# Open Device Manager devmgmt.msc
- Look for "Virtual Camera Driver for Windows Hello"
- Should be under "Cameras" category (not "System devices")
- No yellow warning (!) or red X icons
- Right-click β Properties β Status should say "This device is working properly"
-
Verify driver in PnPUtil:
pnputil /enum-drivers | findstr /i "VirtualCam"
-
Check MFT registration:
reg query "HKLM\SOFTWARE\Classes\MediaFoundation\Transforms\{E8F8E8E8-E8E8-E8E8-E8E8-E8E8E8E8E8E8}"
-
Verify camera interface:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}" | findstr /i "VirtualCam"
Note: Full Windows Hello functionality requires implementing actual camera stream capture, which is the next development phase.
-
Open Windows Hello Settings:
Settings β Accounts β Sign-in options β Facial recognition (Windows Hello) -
Expected behavior (with current implementation):
- The device should appear in Device Manager as a camera
- Windows Hello may detect the camera device
- Full enrollment requires implementing the stream capture in the driver
-
For complete Windows Hello support, the following features need implementation:
- Physical camera stream capture
- RGB to IR stream simulation
- Multi-stream support (RGB + IR)
- Proper frame rate and resolution handling
Solution: Enable test signing or use a valid production certificate
bcdedit /set testsigning on
shutdown /r /t 0Solution:
- Check that test signing is enabled:
bcdedit /enum {current} - Verify driver is signed:
signtool verify /pa VirtualCamDriver.sys - Ensure certificate is in the trusted root store
Solutions:
- Check Event Viewer for details:
eventvwr.msc β Windows Logs β System
- Review setup log:
type %SystemRoot%\INF\setupapi.dev.log | findstr /i "virtualcam"
- Verify KMDF co-installer is available (included in WDK)
- Verify device is under "Cameras" in Device Manager (not "System devices")
- Check SignatureAttributes in INF:
- Open
VirtualCamDriver.inf - Ensure
SignatureAttributes.WindowsHellosection exists
- Open
- Verify MFT CLSID registration:
reg query "HKLM\SOFTWARE\Classes\MediaFoundation\Transforms\{E8F8E8E8-E8E8-E8E8-E8E8-E8E8E8E8E8E8}"
Solution: Install Windows Driver Kit (WDK) matching Visual Studio 2022
Solution: Install Windows SDK 10.0.22000 or later
Solution: Update $KMDFVERSION$ in INF to match installed WDK version
# Run as Administrator
uninstall.bat-
Remove device:
devcon remove Root\VirtualCamDriver
-
Unregister MFT:
regsvr32 /u VirtualCamMFT.dll -
Delete driver package:
# Find OEM INF number pnputil /enum-drivers | findstr /i "VirtualCam" # Delete (replace oemXX.inf with actual name) pnputil /delete-driver oemXX.inf /uninstall
-
Restart computer to complete removal
For more detailed information, see:
- BUILD_AND_INSTALL.md - Comprehensive build and installation guide with advanced options
- IMPLEMENTATION_SUMMARY.md - Complete implementation status, architecture details, and testing checklist
- QUICK_REFERENCE.md - Quick command reference for common tasks
- DEPLOYMENT_CHECKLIST.md - Production deployment checklist and quality gates
- VirtualCamMFT/README.md - MFT-specific documentation and extension guide
| Component | GUID/CLSID | Purpose |
|---|---|---|
| Camera Class | {ca3e7ab9-b4c3-4ae6-8251-579ef933890f} |
Windows Camera device class |
| MFT CLSID | {E8F8E8E8-E8E8-E8E8-E8E8-E8E8E8E8E8E8} |
Media Foundation Transform identifier |
| Video Camera Interface | {E5323777-F976-4f5b-9B55-B94699C46E44} |
Camera device interface |
| ProxyVCap | {17CCA71B-ECD7-11D0-B908-00A0C9223196} |
Video capture proxy |
- Driver.c: Main entry point,
DriverEntryand driver initialization - Device.c: Device object creation, PnP power management, and device interfaces
- Queue.c: I/O request queue creation and handling
- VirtualCamDriver.inf: Installation file with Camera class, Windows Hello attributes, and registry settings
- Trace.h: WPP software tracing macros for debugging
- IMFTransform Interface: Complete implementation for stream processing
- GetStreamLimits, GetStreamCount, GetInputStreamInfo, GetOutputStreamInfo
- AddInputStreams, DeleteInputStream, GetInputStreamAttributes
- GetInputAvailableType, GetInputCurrentType, SetInputType
- GetOutputAvailableType, GetOutputCurrentType, SetOutputType
- GetInputStatus, GetOutputStatus, SetOutputBounds
- ProcessEvent, ProcessMessage, ProcessInput, ProcessOutput
- COM Infrastructure: Class factory,
DllGetClassObject,DllRegisterServer,DllUnregisterServer - Media Type Support: RGB24, YUY2 video formats (extensible)
- Extensible Design: Ready for custom processing (AI/ML, IR simulation, enhancement)
The driver is configured for Windows Hello facial recognition compatibility through multiple integration points:
- Class GUID:
{ca3e7ab9-b4c3-4ae6-8251-579ef933890f}(Camera class) - Ensures Windows recognizes the device as a camera, not a generic system device
- Required for appearing in camera-specific APIs and applications
[SignatureAttributes]
VirtualCamDriver.sys = SignatureAttributes.WindowsHello
VirtualCamMFT.dll = SignatureAttributes.WindowsHello
[SignatureAttributes.WindowsHello]
WindowsHello = true
- Marks the driver and MFT as Windows Hello-compatible
- Enables biometric framework integration
- Allows the device to appear in Windows Hello setup
- MFT CLSID:
{E8F8E8E8-E8E8-E8E8-E8E8-E8E8E8E8E8E8} - Registered via INF:
HKR,,CameraDeviceMFTCLSID,0x00000000,"{E8F8E8E8-...}" - Links stream processing to the camera device
- Handles frame transformation and processing
- Interface GUID:
{E5323777-F976-4f5b-9B55-B94699C46E44}(Video camera interface) - Enables enumeration by camera applications
- Required for Windows Camera app and other media applications
For full Windows Hello face authentication, the driver will need:
- RGB Stream: Color video for visual feedback (standard webcam feed)
- IR Stream: Infrared simulation for liveness detection (prevents photo spoofing)
- Both streams synchronized with proper timestamps and metadata
- Make code changes in Visual Studio
- Build the solution (Ctrl+Shift+B)
- Sign binaries with test certificate
- Uninstall old version: Run
uninstall.bat - Install new version: Run
install.bat - Verify installation: Run
verify.bat - Test functionality in Device Manager or Windows Hello
- Check logs if issues occur:
- Event Viewer:
eventvwr.mscβ Windows Logs β System - Setup Log:
%SystemRoot%\INF\setupapi.dev.log
- Event Viewer:
Enable detailed driver logging:
# Start tracing session
traceview -start VirtualCamTrace -guid {YOUR-TRACE-GUID} -f trace.etl -level 4
# Reproduce the issue
# Stop tracing
traceview -stop VirtualCamTrace
# View trace file
tracefmt trace.etlBenefits of VM testing:
- Safe environment for testing driver changes
- Easy snapshots and rollback
- Isolated from main development system
- Can test on clean Windows installations
Recommended setup:
- VMware Workstation or Hyper-V
- Windows 10/11 x64 guest OS
- Test signing enabled in guest
- Shared folder for transferring driver files
- Implement actual camera frame capture in KMDF driver
- Connect to physical webcam device
- Handle USB video class (UVC) protocol
- Implement proper buffer management
- Add frame rate and resolution control
- RGB to grayscale conversion in MFT
- Contrast enhancement for IR simulation
- Multi-stream output (RGB + simulated IR)
- Stream synchronization
- Test face enrollment process
- Verify authentication works
- Test liveness detection
- Ensure anti-spoofing measures
- Integrate ONNX Runtime
- Add face detection model
- Implement liveness detection
- Performance optimization
- GPU acceleration support
- Obtain EV code signing certificate
- Create production build and sign all binaries
- Package installer (MSI or setup.exe)
- Create user documentation
- Optional: WHQL certification submission
- Always test in a VM first - Kernel drivers can cause BSODs if buggy
- Keep test signing enabled during development - Saves time re-signing
- Use WPP tracing liberally - Invaluable for debugging driver issues
- Monitor Event Viewer - Catches driver loading errors early
- Version your builds - Update version in INF file with each significant change
- Backup your test certificate - You'll need it to sign future builds
- Read all documentation first - Especially certificate signing requirements
- Use automated scripts -
install.bat,verify.bat,uninstall.bathandle complexity - Check Device Manager after install - Verify no yellow warnings
- Restart after enabling test signing - Required for changes to take effect
- Keep setup logs - Helpful if you need to troubleshoot
- Don't disable security features permanently - Use test signing only when needed
- β Forgetting to enable test signing before installation
- β Not signing both the .sys and .dll files
- β Mixing x64 and ARM64 binaries
- β Installing on the same machine you're developing on (use a VM)
- β Skipping the verification step after installation
- β Not checking Event Viewer when things fail
Contributions are welcome! Here's how you can help:
- Camera Stream Capture: Implement physical camera integration
- IR Simulation: Enhance the IR stream generation algorithm
- Testing: Test on various hardware configurations and Windows versions
- Documentation: Improve guides, add troubleshooting tips, translate
- Bug Fixes: Fix issues and improve stability
- Features: Add new capabilities (AI integration, multiple stream sources, etc.)
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name - Make your changes with clear, descriptive commits
- Test thoroughly on a clean VM
- Update documentation if adding new features
- Submit a pull request with detailed description
- Follow existing code formatting
- Add comments for complex logic
- Use WPP tracing for debug output (not DbgPrint)
- Keep functions focused and modular
- Handle all error cases gracefully
This project is licensed under the MIT License - see the LICENSE file for details.
Summary: You are free to use, modify, and distribute this software for any purpose, including commercial applications. Attribution is appreciated but not required.
This project is for educational and research purposes.
- This software emulates camera hardware capabilities to enable Windows Hello on non-certified devices
- Developed for learning about Windows driver development, Media Foundation, and biometric systems
- Users are responsible for compliance with local laws and regulations
- No warranty is provided - use at your own risk
- Always test in isolated environments (VMs) before deployment
- The authors are not responsible for any damage or data loss
Security Note: While this driver enables Windows Hello face authentication, true biometric security requires specialized hardware (IR cameras, depth sensors) that can detect liveness and prevent spoofing. This implementation is a proof-of-concept.
- Documentation: Check the
/Documentationfolder for detailed guides - Issues: Report bugs or request features on GitHub Issues
- Discussions: Ask questions in GitHub Discussions
- Windows Driver Kit (WDK) Documentation
- Media Foundation Documentation
- Windows Hello Face Authentication
- Windows Driver Development Forums
If you're new to Windows driver development or want to learn more:
This project was inspired by:
- Microsoft's Windows Driver Samples
- Intel RealSense SDK architecture
- Community contributions to Windows driver development
- Real-world biometric camera implementations
Special thanks to:
- The Windows Driver Development community
- Microsoft documentation team
- Open-source contributors who share knowledge
- Total Lines of Code: ~1,500 lines (Driver + MFT)
- Languages: C (KMDF Driver), C++ (MFT)
- Supported Platforms: x64, ARM64
- Windows Versions: Windows 10 (1903+), Windows 11
- Development Time: Multiple development phases
- Current Status: Core infrastructure complete, ready for stream implementation
Last Updated: October 2025
Version: 1.0-beta
Project Status: Core Implementation Complete - Ready for Testing Phase π
Made with β€οΈ for Windows driver development enthusiasts and biometric security researchers