On Error goto 0 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_CURRENT_USER = &H80000001 Const strObjRegistry = "winmgmts:\\.\root\default:StdRegProv" Function RegistryDeleteKeyRecursive(regRoot, strKeyPath) Set objRegistry = GetObject(strObjRegistry) objRegistry.EnumKey regRoot, strKeyPath, arrSubkeys If IsArray(arrSubkeys) Then For Each strSubkey In arrSubkeys RegistryDeleteKeyRecursive regRoot, strKeyPath & "\" & strSubkey Next End If objRegistry.DeleteKey regRoot, strKeyPath End Function Function RegistryListSubkeys(regRoot, strKeyPath) Set objRegistry = GetObject(strObjRegistry) objRegistry.EnumKey regRoot, strKeyPath, arrSubkeys RegistryListSubkeys = arrSubkeys End Function Function GetUserSID() Dim objWshNetwork, objUserAccount Set objWshNetwork = CreateObject("WScript.Network") Set objUserAccount = GetObject("winmgmts://" & objWshNetwork.UserDomain & "/root/cimv2").Get("Win32_UserAccount.Domain='" & objWshNetwork.ComputerName & "',Name='" & objWshNetwork.UserName & "'") GetUserSID = objUserAccount.SID End Function Function RegistryCleanupSyncRootManager() strSyncRootManagerKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager" arrSubKeys = RegistryListSubkeys(HKEY_LOCAL_MACHINE, strSyncRootManagerKeyPath) If IsArray(arrSubkeys) Then arrSubkeys=Filter(arrSubkeys, Session.Property("APPNAME")) End If If IsArray(arrSubkeys) Then arrSubkeys=Filter(arrSubkeys, GetUserSID()) End If If IsArray(arrSubkeys) Then For Each strSubkey In arrSubkeys RegistryDeleteKeyRecursive HKEY_LOCAL_MACHINE, strSyncRootManagerKeyPath & "\" & strSubkey Next End If End Function Function RegistryCleanupCfApiShellExtensions() Set objRegistry = GetObject(strObjRegistry) strShellExtAppId = "Software\Classes\AppID\@CFAPI_SHELLEXT_APPID_REG@" strShellExtThumbnailHandlerClsId = "Software\Classes\CLSID\@CFAPI_SHELLEXT_THUMBNAIL_HANDLER_CLASS_ID_REG@" strShellExtCustomStateHandlerClsId = "Software\Classes\CLSID\@CFAPI_SHELLEXT_CUSTOM_STATE_HANDLER_CLASS_ID_REG@" rootKey = HKEY_CURRENT_USER If objRegistry.EnumKey(rootKey, strShellExtAppId, arrSubKeys) = 0 Then RegistryDeleteKeyRecursive rootKey, strShellExtAppId End If If objRegistry.EnumKey(rootKey, strShellExtThumbnailHandlerClsId, arrSubKeys) = 0 Then RegistryDeleteKeyRecursive rootKey, strShellExtThumbnailHandlerClsId End If If objRegistry.EnumKey(rootKey, strShellExtCustomStateHandlerClsId, arrSubKeys) = 0 Then RegistryDeleteKeyRecursive rootKey, strShellExtCustomStateHandlerClsId End If End Function Function RegistryCleanup() RegistryCleanupSyncRootManager() RegistryCleanupCfApiShellExtensions() End Function