IEEE 1394 Unit Filter Driver Registry Settings (Windows CE 5.0)
Virtual subunits exist as device drivers in the same manner that typical subunit drivers do. A parent driver, the AV/C driver or AVC.DLL, enumerates both subunits and virtual subunits. AV/C can enumerate typical subunit drivers because hardware is located on the bus. Registry entries can explicitly instruct AV/C to enumerate virtual subunit drivers.
Virtual subunits require that a multi-byte definition be included in a registry value underneath the AV/C driver's registry keys. The path HKEY_LOCAL_MACHINE\WDMDrivers\{095780C3-48A1-4570-BD95-46707F78C2DC}\0002\Virtual Device List must contain a number of values that define each virtual subunit. The type is REG_BINARY, or hex: in .reg file format, and the values represent the encoded form of the subunit type that AV/C should enumerate. AV/C encodes variable sized Type and ID values into a variable-length series of bytes. For details, see the AV/C Digital Interface Command Set, General Specification.
For subunit Type values less than or equal to 0x1D, the byte series is only a single byte long, and the encoding is essentially shifting the Type value left by three bits. Each virtual subunit to be enumerated should have a registry Value defined.
The following is a registry example.
[HKEY_LOCAL_MACHINE\WDMDrivers\{095780C3-48A1-4570-BD95-46707F78C2DC}\0002\Virtual Device List]
"VirtualVCR"=hex:20
"VirtualTuner"=hex:28
"VirtualDisc"=hex:18
Where the subunit type for tape recorder/player is defined by AV/C as 4, tuner is defined by AV/C as 5, and disc is defined by AV/C as 3.
These examples show an encoded Type value where the byte series is only one byte long. Additional bytes would be simply included in series. The registry value type is not a DWORD, so a variable length entry is permitted.
Both subunits and virtual subunits require typical WDM registry definitions. These definitions include the device identifiers that the driver can match against. For virtual subunits, the format for these entries is VAVC\TYP_#, where the # is the subunit type which is not encoded. In the previous entry the type is encoded.
The following is a registry example for the tuner subunit.
[HKEY_LOCAL_MACHINE\WDMDrivers\{D48DFBFE-13D1-40e3-9524-5D62C3744AAF}\0000]
"MatchingDeviceId"="VAVC\\TYP_5"
"Dll"="AVC_VTUNER.DLL"
"FriendlyName"="AV/C Virtual Tuner Subunit"
Where the "{D48DFBFE-13D1-40e3-9524-5D62C3744AAF}" value is a GUID generated by a tool such as Uuidgen.exe. Each driver must have a different GUID, do not merely copy the above for your own subunits.
Virtual subunit drivers, as well as typical subunit drivers, are required to define any filter drivers they use. If you choose to utilize the streaming filter driver, you need to declare it as a lower filter driver to your subunit driver. The following is a registry example for the tuner subunit.
[HKEY_LOCAL_MACHINE\WDMDrivers\{D48DFBFE-13D1-40e3-9524-5D62C3744AAF}]
"LowerFilters"=multi_sz:"AVC_STREAM"
Send Feedback on this topic to the authors