WdfChildListUpdateChildDescriptionAsMissing not working sometimes.

In some cases,I terminate a game,then unplug virtual gamepad device(HID-compliant game controller) by WdfChildListUpdateChildDescriptionAsMissing.
It returns ok. But the gamepad is still on(by XInputGetState).
And next I create device by WdfChildListAddOrUpdateChildDescriptionAsPresent. It returns STATUS_OBJECT_NAME_EXISTS.
Only restart the system can return to normal.

I am a kmdf new learner and am very interested in these issues.
Any suggestions would be useful. Thank you.

UpdateAsMissing is an async operation. It queues a query request to the kernel pnp subsystem so that pnp asks the driver about its children. This query requires the kernel pnp state lock and usually arrives immediately (because it can acquire the lock). If the query is not coming, there is another stateful pnp operation that the child query is stuck behind. You need to find that stateful pnp operation. In my experience, it is usually your own driver that is blocking the stateful pnp operation from completing. You should look at all the other active threads where your driver is in the stack and see if that is the case.