SW_DEVICE_CREATE_INFO structure (swdevicedef.h)
Describes info that PnP uses to create the software device.
Syntax
typedef struct _SW_DEVICE_CREATE_INFO {
ULONG cbSize;
PCWSTR pszInstanceId;
PCZZWSTR pszzHardwareIds;
PCZZWSTR pszzCompatibleIds;
const GUID *pContainerId;
ULONG CapabilityFlags;
PCWSTR pszDeviceDescription;
PCWSTR pszDeviceLocation;
const SECURITY_DESCRIPTOR *pSecurityDescriptor;
} SW_DEVICE_CREATE_INFO, *PSW_DEVICE_CREATE_INFO;
Members
cbSize
The size in bytes of this structure. Use it as a version field. Initialize it to sizeof(SW_DEVICE_CREATE_INFO).
pszInstanceId
A string that represents the instance ID portion of the device instance ID. This value is used for IRP_MN_QUERY_ID BusQueryInstanceID. Because all software devices are considered "UniqueId" devices, this string must be a unique name for all devices on this software device enumerator.
pszzHardwareIds
A list of strings for the hardware IDs for the software device. This value is used for IRP_MN_QUERY_ID BusQueryHardwareIDs. If a client expects a driver package to be installed on the device, the client should specify hardware IDs.
pszzCompatibleIds
A list of strings for the compatible IDs for the software device. This value is used for IRP_MN_QUERY_ID BusQueryCompatibleIDs. If a client expects a class driver package to be installed on the device, the client specifies compatible IDs that match the class driver package. If a driver package isn't needed, we recommend to specify a compatible ID to classify the type of software device. In addition to the compatible IDs specified in this member, SWD\Generic
and possibly SWD\GenericRaw
will always be added as the least specific compatible IDs.
pContainerId
A value that is used to control the base container ID for the software device. This value will be used for IRP_MN_QUERY_ID BusQueryContainerIDs. For typical situations, we recommend to set this member to NULL and use the SWDeviceCapabilitiesRemovable flag to control whether the device inherits the parent's container ID or if PnP assigns a new random container ID. See Overview of the removable device capability for more information on how that affects the assignment of the container ID for the device. If the client needs to explicitly control the container ID, specify a GUID in the variable that this member points to. In general, you should not specify NULL_GUID for the container ID. See Overview of container IDs for more information on container IDs and the special meaning of NULL_GUID.
CapabilityFlags
A combination of SW_DEVICE_CAPABILITIES values that are combined by using a bitwise OR operation. The resulting value specifies capabilities of the software device. The capabilities that you can specify when you create a software device are a subset of the capabilities that a bus driver can specify by using the DEVICE_CAPABILTIES structure. Only capabilities that make sense to allow changing for a software only device are supported. The rest receive appropriate default values. Here are possible values:
Value | Meaning |
---|---|
|
No capabilities have been specified. |
|
This bit specifies that the device is removable from its parent. Setting this flag is equivalent to a bus driver setting the Removable member of the DEVICE_CAPABILTIES structure for a PDO. |
|
This bit suppresses UI that would normally be shown during installation. Setting this flag is equivalent to a bus driver setting the SilentInstall member of the DEVICE_CAPABILTIES structure for a PDO. |
|
This bit prevents the device from being displayed in some UI. Setting this flag is equivalent to a bus driver setting the NoDisplayInUI member of the DEVICE_CAPABILTIES structure for a PDO. |
|
Specify this bit when the client wants a driver to be loaded on the device and when this driver is required for correct function of the client’s feature.
When this bit is specified, at least one of pszzHardwareIds or pszzCompatibleIds must be filled in. If this bit is specified and if a driver can't be found, the device shows a yellow bang in Device Manager to indicate that the device has a problem, and Troubleshooters flag this as a device with a problem. Setting this bit is equivalent to a bus driver not setting the RawDeviceOK member of the DEVICE_CAPABILTIES structure for a PDO. When this bit is specified, the driver owns creating interfaces for the device, and you can't call SwDeviceInterfaceRegister for the device. |
pszDeviceDescription
A string that contains the text that is displayed for the device name in the UI. This value is used for IRP_MN_QUERY_DEVICE_TEXT DeviceTextDescription.
When an INF is matched against the device, the name from the INF overrides this name unless steps are taken to preserve this name.
We recommend that this string be a reference to a localizable resource. For the syntax of referencing resources, see DEVPROP_TYPE_STRING_INDIRECT.
pszDeviceLocation
A string that contains the text that is displayed for the device location in the UI. This value is used for IRP_MN_QUERY_DEVICE_TEXT DeviceTextLocationInformation.
pSecurityDescriptor
A pointer to a SECURITY_DESCRIPTOR structure that contains the security information associated with the software device. If this member is NULL, the I/O Manager assigns the default security descriptor to the device. If a custom security descriptor is needed, specify a self-relative security descriptor.
Remarks
You can only specify this info at creation time, and you can't later call the Software Device API to modify this info, by setting properties, for example.
Requirements
Requirement | Value |
---|---|
Header | swdevicedef.h (include Swdevice.h) |