From: Paolo Bonzini [paolo.bonz...@gmail.com] on behalf of Paolo Bonzini [pbonz...@redhat.com] > Il 06/06/2013 17:06, Tomoki Sekiyama ha scritto: >> +STDAPI VSSCheckOSVersion(void); >> + >> +STDAPI COMRegister(void); >> +STDAPI COMUnregister(void); >> + >> +STDAPI DllRegisterServer(void); >> +STDAPI DllUnregisterServer(void); > > Can you explain the difference between COMRegister/COMUnregister and > DllRegisterServer/DllUnregisterServer (and why the COM+ part need not be > done by regsvr32)? Also, why does COMUnregister call > DllUnregisterServer but COMRegister does not call DllRegisterServer?
COMRegister and COMUnregister are called by`qemu-ga -s install`, to register/unregister the DLL into/from COM+ application catalogue. DllRegisterServer is automatically called inside pCatalog->InstallComponent() (like regsvr32 does), and register this DLL as a VSS provider. DllUnregisterServer will do the oposite. ICOMAdminCatalog (pCatalog) does not provide a method to uninstall component, so COMUnregister calls DllUnregisterServer by itself. > Also, is it needed to call VSSCheckOSVersion from the requestor? I > would think that checking VSSAPI.DLL is stronger than checking the > version, and indeed you do that check too. In Windows XP, VSSAPI.DLL exists but it has different functionality and interfaces from newer Windows. http://msdn.microsoft.com/en-us/library/windows/desktop/aa384627(v=vs.85).aspx It is checking the OS version because this patchset only supports Windows 2003 or later. Thanks, Tomoki Sekiyama