MSDN: When a client app calls SwDeviceCreate for a software device that was previously marked for SwDeviceLifetimeParentPresent, SwDeviceCreate succeeds if there are no open software device handles for the device (only one handle can be open for a device). A client app can then regain control over a persistent software device for the purposes of updating properties and interfaces or changing the lifetime.
But after I set idd software device to SwDeviceLifetimeParentPresent, and then call SwDeviceCreate again with same createInfo, it returns 0x800700b7, which means object already exist. This result is not what MSDN said.
Even I can't remove the persist software device manually, it's always enumerated again after removed from device manager.