Overview
IddCx (Indirect Display Driver Class eXtension) uses an event-driven callback model to communicate with the driver. This page documents all callback functions implemented in the Virtual Display Driver and their lifecycle.Callback Lifecycle
The IddCx framework invokes callbacks in a specific sequence:Driver Initialization Callbacks
DriverEntry
Type:DRIVER_INITIALIZE
Signature:
Driver.cpp:2402
Responsibilities:
- Initialize WDF driver configuration
- Register
VirtualDisplayDriverDeviceAddcallback - Create WDF driver object
- Load configuration settings
VirtualDisplayDriverDeviceAdd
Type:EVT_WDF_DRIVER_DEVICE_ADD
Signature:
Driver.cpp:2808
Responsibilities:
- Configure PnP power callbacks
- Initialize IddCx configuration structure
- Register IddCx event callbacks
- Create device context
- Initialize IddCx device
VirtualDisplayDriverDeviceD0Entry
Type:EVT_WDF_DEVICE_D0_ENTRY
Signature:
Driver.cpp:2946
Responsibilities:
- Initialize adapter context
- Trigger monitor creation
- Begin adapter initialization
Adapter Callbacks
VirtualDisplayDriverAdapterInitFinished
Type:EVT_IDD_CX_ADAPTER_INIT_FINISHED
Signature:
Driver.cpp:3945
Parameters:
AdapterObject: Handle to the adapterpInArgs: Initialization status information
VirtualDisplayDriverAdapterCommitModes / VirtualDisplayDriverAdapterCommitModes2
Type:EVT_IDD_CX_ADAPTER_COMMIT_MODES / EVT_IDD_CX_ADAPTER_COMMIT_MODES2
Signature:
Driver.cpp:3969, Driver.cpp:4486
Responsibilities:
- Validate mode parameters
- Apply display mode changes
- Return success/failure status
VirtualDisplayDriverEvtIddCxAdapterQueryTargetInfo
Type:EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO (IddCx 1.8+)
Signature:
Driver.cpp:4203
Returns: Target connector type and other display target properties.
Monitor Callbacks
VirtualDisplayDriverParseMonitorDescription / VirtualDisplayDriverEvtIddCxParseMonitorDescription2
Type:EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION / EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION2
Signature:
Driver.cpp:3985, Driver.cpp:4337
Responsibilities:
- Parse EDID data from
pInArgs->MonitorDescription.pData - Fill in monitor connector type
- Provide monitor size information
VirtualDisplayDriverMonitorGetDefaultModes
Type:EVT_IDD_CX_MONITOR_GET_DEFAULT_DESCRIPTION_MODES
Signature:
Driver.cpp:4031
Responsibilities:
- Return list of default display modes
- Convert internal mode format to
DISPLAYCONFIG_VIDEO_SIGNAL_INFO - Report number of modes available
VirtualDisplayDriverMonitorQueryModes / VirtualDisplayDriverEvtIddCxMonitorQueryTargetModes2
Type:EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES / EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES2
Signature:
Driver.cpp:4128, Driver.cpp:4425
Responsibilities:
- Fill target mode array with supported display modes
- Report total number of modes
- Handle buffer size queries
SwapChain Callbacks
VirtualDisplayDriverMonitorAssignSwapChain
Type:EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN
Signature:
Driver.cpp:4176
Responsibilities:
- Create
SwapChainProcessorto handle frame processing - Store swap chain handle in device context
- Start frame processing thread
VirtualDisplayDriverMonitorUnassignSwapChain
Type:EVT_IDD_CX_MONITOR_UNASSIGN_SWAPCHAIN
Signature:
Driver.cpp:4191
Responsibilities:
- Stop frame processing
- Clean up
SwapChainProcessor - Release resources
HDR and Color Callbacks (IddCx 1.8+)
VirtualDisplayDriverEvtIddCxMonitorSetDefaultHdrMetadata
Type:EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA
Signature:
Driver.cpp:4242
Responsibilities:
- Store HDR metadata (SMPTE ST.2086)
- Configure HDR display parameters
- Validate metadata values
VirtualDisplayDriverEvtIddCxMonitorSetGammaRamp
Type:EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP
Signature:
Driver.cpp:4498
Responsibilities:
- Apply gamma correction
- Store gamma ramp for processing
- Support SDR/HDR tone mapping
Callback Return Values
All callbacks returnNTSTATUS values:
STATUS_SUCCESS: Operation completed successfullySTATUS_BUFFER_TOO_SMALL: Provided buffer is insufficientSTATUS_INVALID_PARAMETER: Invalid input parametersSTATUS_UNSUCCESSFUL: General failure
Threading Model
- Most callbacks are invoked in arbitrary thread context
- Must be thread-safe
- Should not block for extended periods
- Use synchronization primitives for shared data access
Error Handling
Callbacks should:- Validate all input parameters
- Check buffer sizes before copying data
- Return appropriate NTSTATUS codes
- Log errors for diagnostics
- Gracefully handle unexpected states
References
- Source File:
~/workspace/source/Virtual Display Driver (HDR)/MttVDD/Driver.cpp - Header File:
~/workspace/source/Virtual Display Driver (HDR)/MttVDD/Driver.h - IddCx Documentation: Microsoft IddCx Reference