'Par Nicolas Jobin CGI Inc. Mars 2005
' Ce VBS lit les valeurs dans PendingFileRenameOperations et les copie
' dans SCT.
' Les codes de retour sont 
' 0 : Tout c'est bien passé
' 1 : Impossible d'écrire la nouvelle valeur
' 2 : Impossible d'effacer la clef PendingFileRenameOperations
' 3 : Impossible de lire

Option Explicit
On Error Resume Next

Const HKEY_LOCAL_MACHINE = &H80000002
Dim strComputer, strKeyPath, Return, strValue, strValueName,strValueName2, ExitCode
Dim arrValues, iValues(), strResult
Dim strTemp
Dim i
Dim OReg, d,pos,dontcopy
Set d = CreateObject("Scripting.Dictionary")

strKeyPath = "SYSTEM\CurrentControlSet\Control\Session Manager"
strValueName = "PendingFileRenameOperations" ' Valeur lue et effacée
strValueName2 = "SCT" ' Valeur écrite
strComputer = "."

Set OReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
                      strComputer & "\root\default:StdRegProv")
Return = 0
Return = OReg.GetMultiStringValue(HKEY_LOCAL_MACHINE,strKeyPath,strValueName,arrValues)
' Si la lecture s'est bien passée
If (Return = 0) And (Err.Number = 0) Then
	i = 0
 	For Each strValue In arrValues ' Pour toutes les valeurs lues
 	        dontcopy = 0
 	        pos = InStr(strValue, "qxldd.dll")
		 		
		if (pos > 0 ) Then
			WScript.ECHO strValue
			pos = InStr(strValue, "!")
			
			if (pos > 0 ) Then
			
			else
			   dontcopy = 1
			end if
 	        End If
 	        
 	        if (dontcopy = 0 ) then
 			d.Add i,strValue ' Affecte la valeur lue dans une variable dictionary
 		end if	
 		i = i + 1
 		
 	Next
 Else
    WScript.Quit(3) ' Quitte le programme avec un code de retour = à 3
End If
strResult = d.Items ' Affecte les valeurs dans un Array
' +++++++++++++++++++++++++++++++++++++++
' Écriture du registre dans la valeur SCT
Return = 0
Return = OReg.SetMultiStringValue(HKEY_LOCAL_MACHINE,strKeyPath,strValueName2,strResult)
ExitCode = 0
' Vérification de l'écriture
If (Return = 0) And (Err.Number = 0) Then
	'WScript.Echo "Valeur Transférée"
	'Do nothing
Else
	'WScript.Echo "Impossible de transférer la valeur" & vbNewLine _
	'		      & "Erreur no = " & Err.Number
	ExitCode = 1 ' Code de retour égale à 1 Erreur d'écriture
End If
Return = 0
If ExitCode = 0 Then ' Si on a pu écrire SCT, on efface PendingFileRenameOperations
	Return = OReg.DeleteValue(HKEY_LOCAL_MACHINE,strKeyPath,strValueName)
End If
If (Return = 0) And (Err.Number = 0) Then
	'WScript.Echo "Valeur Effacée"
	'Tout est beau
Else
	'WScript.Echo "Impossible d'effacer la valeur" & vbNewLine _
	'		      & "Erreur no = " & Err.Number
	ExitCode = 2 ' Code de retour égale à 2 Impossible d'effacer
End If
WScript.Quit(ExitCode) ' Sort avec un code de retour
