About the Synchronization Engine
The synchronization engine is the component of Windows Media Player that manages copying digital media content to portable devices. Windows Media Player supports a single instance of the synchronization engine for each device. You must use a remoted instance of the Windows Media Player control to perform synchronization tasks programmatically. In effect, your program shares the synchronization engine instances with Windows Media Player and all other programs that use the Player interfaces for device synchronization.
You can use IWMPSyncDevice::start and IWMPSyncDevice::stop to control when the synchronization engine does its work. In most cases, you should not use these methods. Instead, you should let the synchronization engine schedule its work automatically. The start and stop methods exist so that you can use them if your program is designed to replace the Windows Media Player user interface. In this case, you might want to provide a start/stop button similar to the one Windows Media Player provides in the Devices tab.
You can monitor the synchronization progress for a device by polling IWMPSyncDevice::get_progress. This method retrieves a progress value for the entire synchronization process with a particular device. The value retrieved is a number that represents the percentage of synchronization complete. There are two events you can receive that are related to synchronization. The DeviceSyncError event notifies you when a problem occurs. The DeviceSyncStateChange event alerts you when the synchronization engine has changed state for the current device.
You can limit the amount of device storage that Windows Media Player uses for synchronization by calling IWMPSyncDevice2::setItemInfo with the PercentSpaceReserved attribute. Using this interface requires Windows Media Player 11.