I've been writing a KMDF filter driver for WPD (Portable Devices) class (based on example in http://www.osronline.com/article.cfm?article=446). The driver purpose is the block write requests to the device.
I set it up in the registry in UpperFilters for WPD class, and when plugging in Samsung Galaxy S3, I was able to catch the WPD IOCTLs sent to the device (currently the driver does nothing but forwarding the request to the next driver). So far so good.
I then installed Samsung Kies to see if the filter driver still works, but when I plugged in the device, Windows tried to install the "Samsung Mobile MTP Device" and failed. I tried it several times (I verified the driver is still installed, and this is not a missing driver issue). When I removed my driver from the UpperFilters, the device was installed and working. When I put the filter back, the device failed to start (code 10). Using Windbg I can see that my driver starts, device is added, and then the driver unloads (I don't know what happens in the middle...)
When I tried to put it as a lower filter, it again worked fine.
While searching the net, I found out it also happens when using WDM and not WDK.
Why is putting UpperFilter causing the device to fail to start in this case?
Is there a way to resolve it?
Have you tried other devices to see if this is specific to the Samsung?
Also, this looks like something introduced by the Samsung Kies software, perhaps they are installing another filter driver. You can find this out by inspecting %windir%\inf\setupapi.dev.log to see if there are driver entries related to Kies or Samsung.