/// <summary>
        /// Gets a device's registry property. Helper class that
        /// encapsulates the core functionality of the other get
        /// registry property functions.
        /// </summary>
        /// <param name="devInfoSet">The dev info set.</param>
        /// <param name="devInfoData">The dev info data.</param>
        /// <param name="propertyIndex">Index of the property.</param>
        /// <returns>The property buffer.</returns>
        private static StringBuilder GetProperty(
            IntPtr devInfoSet,
            SP_DEVINFO_DATA devInfoData,
            SPDRP propertyIndex)
        {
            Int32         requiredSize        = 0;
            Int32         propertyRegDataType = 0;
            StringBuilder propertyBuffer;

            Win32SetupApi.SetupDiGetDeviceRegistryProperty(
                devInfoSet,
                ref devInfoData,
                (int)propertyIndex,
                ref propertyRegDataType,
                null,
                0,
                ref requiredSize);

            propertyBuffer = new StringBuilder(requiredSize);

            propertyRegDataType = 0;
            Win32SetupApi.SetupDiGetDeviceRegistryProperty(
                devInfoSet,
                ref devInfoData,
                (int)propertyIndex,
                ref propertyRegDataType,
                propertyBuffer,
                propertyBuffer.Capacity,
                ref requiredSize);

            return(propertyBuffer);
        }