HEX
Server: Apache
System: Windows NT MAGNETO-ARM 10.0 build 22000 (Windows 10) AMD64
User: Michel (0)
PHP: 7.4.7
Disabled: NONE
Upload Files
File: C:/Windows/OEM/Certificates.wsf
<package>
    <?component error="true" debug="true" ?>
    <comment>
      Manages cloud-based certificates.
    </comment>
    <component id="CertificateManager">
        <registration
            progid="WaGuest.CertificateManager"
            description=""
            version="1.0.0.0"
            clsid="{11F1516F-829F-42BE-A328-F3E0CA9E247A}"/>
      
        <public>
            <property name="WScript" />
            <method name="Initialize">
                <parameter name="objGuestInterface" />
            </method>
            <method name="InstallCertificates">
            </method>
        </public>
      
        <object id="WshShell" progid="WScript.Shell" />
        <object id="FSO" progid="Scripting.FileSystemObject" />

        <script language="VBScript" src="Utility.vbs" />

        <script language="VBScript">
            Option Explicit

            Const ERROR_CERTSYNCFAILURE =           2
            Const CERTIFICATE_STORE_PASSWORD =      ""

            Dim g_Trace
            Dim oTraceEvent
            Dim g_objGuestInterface
        
            Sub Initialize(objGuestInterface)
                Set g_Trace = GetScriptObject(Me.WScript, "Tracing.wsf", "TraceSource")
                g_Trace.Name = "Certificates"

                Set g_objGuestInterface = objGuestInterface
            End Sub

            Sub InstallCertificates()
                Dim certs, numCertsInstalled
                numCertsInstalled = 0
                certs = g_objGuestInterface.GetCertificates()         
                
                If Not IsNull(certs) Then
                    Dim objCert
                    For Each objCert In certs
                        Dim certId, certName, certStore

                        certId = objCert.thumbprint
                        certName = objCert.name
                        certStore = objCert.storeName
                        
                        Dim sCertFile : sCertFile = objCert.tmpFile

                        On Error Resume Next
                        ImportCertificate sCertFile, objCert

                        If Err.Number = 0 Then
                            Set oTraceEvent = g_Trace.CreateEvent("INFO")
                            With oTraceEvent.appendChild(oTraceEvent.ownerDocument.createElement("InstalledCertificate"))
                                .setAttribute "certId", certId
                                .setAttribute "certName", certName
                                .setAttribute "certStore", certStore
                            End With
                            g_Trace.TraceEvent oTraceEvent
                        ElseIf Err.Number = &h80040002 Then
                            Set oTraceEvent = g_Trace.CreateEvent("ERROR")
                            With oTraceEvent.appendChild(oTraceEvent.ownerDocument.createElement("CertificateNotFound"))
                                .setAttribute "certId", certId
                                .setAttribute "certName", certName
                                .setAttribute "certStore", certStore
                            End With                        
                            g_Trace.TraceEvent oTraceEvent
                        Else
                            TraceError g_Trace, "SyncCertificates: ImportCertificate failed for cert '" & certName & " (" & certId & ")'"
                        End If
                        On Error Goto 0
                        
                        numCertsInstalled = numCertsInstalled + 1
                    Next

                    ' cleanup
                    FSO.DeleteFile sCertFile
                End If

                Set oTraceEvent = g_Trace.CreateEvent("INFO")
                With oTraceEvent.appendChild(oTraceEvent.ownerDocument.createElement("AllCertificatesInstalled"))
                    .setAttribute "count", numCertsInstalled
                End With                        
                g_Trace.TraceEvent oTraceEvent
            End Sub

            Private Function ImportCertificate(sCertFile, cert)
                On Error Resume Next
                Dim oResults, certLocation, certHash, certStoreName

                ' obtain the hash and trim the "sha1:" prefix
                certHash = cert.thumbprint
                If InStr(1, certHash, "sha1:", 1) = 1 Then
                    certHash = Right(certHash, Len(certHash) - 5)
                End If

                certStoreName = cert.storeName
                certLocation = cert.storeLocation
                If Not(certLocation = "System" Or certLocation = "LocalMachine" Or certLocation = "CurrentUser") Then
                    Err.Raise vbObjectError + ERROR_PROTOCOLVIOLATION, "Certificates.wsf", "An invalid certificate location, " & certLocation & ", was specified"
                    Exit Function
                End If
                
                If certLocation = "System" Then
                    certLocation = "LocalMachine"
                End If
                
                Set oResults = ExecuteAndTraceWithResults("%SystemRoot%\OEM\WaGuest.exe /importcert" & _
                    " """ & sCertFile & """" & _
                    " """ & CERTIFICATE_STORE_PASSWORD & """" & _
                    " """ & certHash & """" & _
                    " """ & certLocation & """" & _
                    " """ & certStoreName & """", g_Trace)

                If oResults.ExitCode <> 0 Then
                    Err.Raise vbObjectError + ERROR_CERTSYNCFAILURE, "Certificates.wsf", "Import Error (" & Trim(oResults.StdErr) & ")" 
                    Exit Function
                End If
            End Function
           
        </script>
    </component>
</package>