'********************************************************************
'*
'* File:           ExtensionsTest.VBS
'* Created:        March 2000
'*
'* Main Function: Adds snapins, enumerates extensions, enables
'*                 disables the extension snapins.
'* Usage: ExtensionTest.VBS
'*
'* Copyright (C) 2000 Microsoft Corporation
'*
'********************************************************************
OPTION EXPLICIT

'Define constants

'Declare variables
Dim mmc
Dim doc
Dim snapins

Dim Services
Dim ServicesExtensions
Dim ServicesExtension

Dim Compmgmt
Dim CompmgmtExtensions
Dim CompmgmtExtension

Dim message
Dim intRet

'get the various objects we'll need
Set mmc         = wscript.CreateObject("MMC20.Application")
Set doc         = mmc.Document
Set snapins     = doc.snapins

'add services & compmgmt snapins
Set Services = snapins.Add("{58221c66-ea27-11cf-adcf-00aa00a80033}") ' Services snapin
Set Compmgmt = snapins.Add("{58221C67-EA27-11CF-ADCF-00AA00A80033}") ' Compmgmt snapin

EnumerateExtensions(Services)
EnumerateExtensions(Compmgmt)

DisableAnExtension Services, "Send"

Services.EnableAllExtensions(1)
message = "Please verify all extensions of " & Services.Name & "are enabled."
intRet = MsgBox(message, vbInformation, "Verify test")

' Now remove Services & try to disable the extension
RemoveSnapinAndEnableExtension Services, "Send"

Set mmc = Nothing

'********************************************************************
'*
'* Sub Welcome
'*
'********************************************************************
Sub Welcome()
    Dim intDoIt

    intDoIt =  MsgBox(L_Welcome_MsgBox_Message_Text, _
                      vbOKCancel + vbInformation,    _
                      L_Welcome_MsgBox_Title_Text )
    If intDoIt = vbCancel Then
        WScript.Quit
    End If
End Sub


'********************************************************************
'*
'* Sub EnumerateExtensions(objSnapin)
'* Purpose: Enumberates the extensions of the given snapin.
'* Input:   objSnapin    given snapin.
'*
'* Output:  Results of the enumeration are either printed on screen or saved in strOutputFile.
'*
'********************************************************************
Sub EnumerateExtensions(objSnapin)
    ON ERROR RESUME NEXT
	
    Dim Extensions
	Dim Extension
	Dim SnapinName
	Dim ExtensionNames
	Dim count
	Dim OtherData

    Set Extensions = objSnapin.Extensions
	
    count = Extensions.Count

    If count > 0 Then
	
	SnapinName = objSnapin.Name
		
	OtherData = "Vendor : " + objSnapin.Vendor
	OtherData = OtherData + ", Version : " + objSnapin.Version
	OtherData = OtherData + ", CLSID : " + objSnapin.SnapinCLSID
	intRet = MsgBox(OtherData, vbInformation, "About Information for " & SnapinName)
	
	For Each Extension in Extensions
	    ExtensionNames = ExtensionNames + Extension.Name
		ExtensionNames = ExtensionNames + ","
		EnumerateExtensions(Extension)
	Next
	
	ExtensionNames = ExtensionNames + "."
	
	intRet = MsgBox(ExtensionNames, vbInformation, "Extensions for " & SnapinName)
	End If

End Sub

'********************************************************************
'*
'* Function FindExtension(objSnapin,strExtension)
'* Purpose: Finds an extension for given primary snapin with given name.
'* Input:   objSnapin    given snapin.
'*          strExtension given extension name.
'*
'* Output:  returns true if extension exists. objExtension carries the returned object.
'*
'********************************************************************
Function FindExtension(objSnapin, strExtension, objExtension)

    Dim Extensions
	Dim Extension

    Set Extensions = objSnapin.Extensions

	For Each objExtension in Extensions
	    If InStr(objExtension.Name, strExtension) Then
		    FindExtension = true
			Exit Function
		End If
	Next

    FindExtension = false
	
End Function

'********************************************************************
'*
'* Sub DisableAnExtension(objSnapin, strExtensionName)
'* Purpose: Disables and extension of objSnapin with given name.
'* Input:   objSnapin    given snapin.
'*
'* Output:  Verify if the snapis is disabled.
'*
'********************************************************************
Sub DisableAnExtension(objSnapin, strExtensionName)

    Dim Extension
	
	If FindExtension(objSnapin, strExtensionName, Extension) Then
		ObjSnapin.EnableAllExtensions(0)
		Extension.Enable(0)
		
		message = "Please verify disabling of " & Extension.Name & " extension of " & objSnapin.Name & "."
	    intRet = MsgBox(message, vbInformation, "Verify test")
	Else
	    message = "Extension for " & objSnapin.Name & " with name " & strExtensionName & " does not exist."
	    intRet = MsgBox(message, vbInformation, "Verify test")
	End If	

End Sub

'********************************************************************
'*
'* Sub RemoveSnapinAndEnableExtension(objSnapin, strExtensionName)
'* Purpose: Finds the extension with given name, removes primary &
'*          accesses extension. This will fail as primary is gone.
'* Input:   objSnapin    given snapin.
'*
'* Output:  Verify error message is returned on enabling.
'*
'********************************************************************
Sub RemoveSnapinAndEnableExtension(objSnapin, strExtensionName)
    ON ERROR RESUME NEXT
    Dim Extension
	
	If FindExtension(objSnapin, strExtensionName, Extension) Then
	    snapins.Remove objSnapin
		Extension.Enable(1)		
		MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
		Err.clear
	Else
	    message = "Extension for " & objSnapin.Name & " with name " & strExtensionName & " does not exist."
	    intRet = MsgBox(message, vbInformation, "Verify test")
	End If	

End Sub