'
' Copyright (c) Microsoft Corporation.  All rights reserved.
'
' VBScript Source File
'
' Script Name: IIsExt.vbs
'

Option Explicit
On Error Resume Next

' Error codes
Const ERR_OK              = 0
Const ERR_GENERAL_FAILURE = 1

'''''''''''''''''''''
' Messages
Const L_NotEnoughParams_ErrorMessage   = "Not enough parameters."
Const L_InvalidSwitch_ErrorMessage     = "Invalid switch: %1"
Const L_CmdLib_ErrorMessage            = "Could not create an instance of the CmdLib object."
Const L_ChkCmdLibReg_ErrorMessage      = "Please register the Microsoft.CmdLib component."
Const L_ScriptHelper_ErrorMessage      = "Could not create an instance of the IIsScriptHelper object."
Const L_ChkScpHelperReg_ErrorMessage   = "Please, check if the Microsoft.IIsScriptHelper is registered."
Const L_OnlyOneOper_ErrorMessage       = "Please specify only one operation at a time."
Const L_PassWithoutUser_ErrorMessage   = "Please specify /u switch before using /p."
Const L_UserWithoutPass_ErrorMessage   = "Please specify /p switch when using /u."
Const L_WMIConnect_ErrorMessage        = "Could not connect to WMI provider."
Const L_Error_ErrorMessage             = "Error &H%1: %2"
Const L_Admin_ErrorMessage             = "You cannot run this command because you are not an"
Const L_Adminp2_ErrorMessage           = "administrator on the server you are trying to configure."
Const L_GetWebSvcObj_ErrorMessage      = "Could not get web service object"
Const L_EnApp_ErrorMessage             = "Error while configuring application or extension."
Const L_NoApp_ErrorMessage             = "The specified application does not exist in the application"
Const L_NoAppp2_ErrorMessage           = "dependencies list."
Const L_NoDep_ErrorMessage             = "The specified application-extension relationship does not"
Const L_NoDepp2_ErrorMessage           = "exist in the application dependencies list."
Const L_NoExt_ErrorMessage             = "The extension does not exist in the restriction list."
Const L_NoEfi_ErrorMessage             = "The extension file does not exist in the restriction list."

Const L_EnDep_ErrorMessage             = "Error while configuring dependency."
Const L_ShowList_ErrorMessage          = "Error while showing list.  Please confirm that the"
Const L_ShowList2_ErrorMessage         = "WebSvcExtRestrictionList and ApplicationDependencies"
Const L_ShowList3_ErrorMessage         = "properties exist and are set on the W3SVC node."
Const L_RmEfi_ErrorMessage             = "Error trying to delete extension.  Make sure it exists"
Const L_RmEfip2_ErrorMessage           = "and is deletable."
Const L_EnAppComplete_Message          = "Enabling application complete."
Const L_AddDpComplete_Message          = "Adding dependency complete."
Const L_RemDpComplete_Message          = "Removing dependency complete."
Const L_EnExtComplete_Message          = "Enabling extension complete."
Const L_DsExtComplete_Message          = "Disabling extension complete."
Const L_DsEFiComplete_Message          = "Disabling extension file complete."
Const L_EnEFiComplete_Message          = "Enabling extension file complete."
Const L_AdEFiComplete_Message          = "Adding extension file complete."
Const L_RmEFiComplete_Message          = "Deleting extension file complete."
Const L_ShowListFile_Message           = "Status / Extension Path"
Const L_ShowListFile2_Message          = "------------------------"
'''''''''''''''''''''
' Help
Const L_Empty_Text     = ""

' General help messages
Const L_SeeHelp_Message         = "Type IIsExt /? for help."
 
Const L_Help_HELP_General01_Text  = "Description: Manages Web Service Extensions."
Const L_Help_HELP_General02_Text  = "Syntax: IIsExt [/s <server> [/u <username> [/p <password>]]]"
Const L_Help_HELP_General02a_Text = "                   [/ListExt | /ListApp | /AddDep | /DisExt"
Const L_Help_HELP_General03_Text  = "                    /EnExt | /RmDep | /EnApp | /EnFile | /DisFile"
Const L_Help_HELP_General04_Text  = "                    /AddFile | /ListFile | /RmFile] <args>"
Const L_Help_HELP_General05_Text  = "Switches:"
Const L_Help_HELP_General06_Text  = "Value                   Description"
Const L_Help_HELP_General06a_Text = "/s <server>             Connect to machine <server>."
Const L_Help_HELP_General06b_Text = "                        [Default: this system]"
Const L_Help_HELP_General06c_Text = "/u <username>           Connect as <domain>\<username> or"
Const L_Help_HELP_General06d_Text = "                        <username>.  [Default: current user]"
Const L_Help_HELP_General06e_Text = "/p <password>           Password for the <username> user."
Const L_Help_HELP_General07_Text  = "/EnApp <appname>        Enables an application in the"
Const L_Help_HELP_General07a_Text = "                        application dependencies list."
Const L_Help_HELP_General08_Text  = "/ListApp                Lists the applications in the"
Const L_Help_HELP_General08a_Text = "                        application dependencies list."
Const L_Help_HELP_General09_Text  = "/AddDep <appname> <ID> [<ID> ...]" 
Const L_Help_HELP_General09a_Text = "                        Adds a dependency between an"
Const L_Help_HELP_General09b_Text = "                        application in the application"
Const L_Help_HELP_General09c_Text = "                        dependencies list and a Web Service"
Const L_Help_HELP_General09d_Text = "                        Extension ID."
Const L_Help_HELP_General10_Text  = "/RmDep  <appname> <ID> [<ID> ...]"
Const L_Help_HELP_General10a_Text = "                        Removes a dependency between an"
Const L_Help_HELP_General10b_Text = "                        application in the application"
Const L_Help_HELP_General10c_Text = "                        dependencies list and a Web Service"
Const L_Help_HELP_General10d_Text = "                        Extension ID."
Const L_Help_HELP_General11_Text  = "/EnExt <ID>             Enables all files for a Web Service"
Const L_Help_HELP_General11a_Text = "                        Extension with the specified Web"
Const L_Help_HELP_General11b_Text = "                        Service Extension ID."
Const L_Help_HELP_General12_Text  = "/DisExt <ID>            Disables all files for a Web Service"
Const L_Help_HELP_General12a_Text = "                        Extension with the specified Web"
Const L_Help_HELP_General12b_Text = "                        Service Extension ID."
Const L_Help_HELP_General13_Text  = "/ListExt                Lists Web Service Extension IDs for"
Const L_Help_HELP_General13a_Text = "                        all defined Web Service Extensions."
Const L_Help_HELP_General14_Text  = "/EnFile <filename>      Enables a single file in the"
Const L_Help_HELP_General14a_Text = "                        restriction list."
Const L_Help_HELP_General15_Text  = "/DisFile <filename>     Disables a single file in the"
Const L_Help_HELP_General15a_Text = "                        restriction list."
Const L_Help_HELP_General16_Text  = "/ListFile               Lists all the files in the"
Const L_Help_HELP_General16a_Text = "                        restriction list."
Const L_Help_HELP_General17_Text  = "/RmFile <filename>      Removes a file from the restriction"
Const L_Help_HELP_General17a_Text = "                        list if it is deletable."
Const L_Help_HELP_General18_Text  = "/AddFile <args>         Adds a file to the restriction list."
Const L_Help_HELP_General19_Text  = "/AddFile /?             Displays help for the /AddFile flag."

Const L_Help_HELP_AddFile01_Text  = "Description: Adds a file to the restriction list."
Const L_Help_HELP_AddFile02_Text  = "Syntax: IIsExt [/s <server> [/u <username> [/p <password>]]]"
Const L_Help_HELP_AddFile02a_Text = "               /AddFile <filepath> <access> <ID> <deleteable>"
Const L_Help_HELP_AddFile03_Text  = "               <ShortDesc>"
Const L_Help_HELP_AddFile07_Text  = "<filepath>              The fully qualified path to the dll"
Const L_Help_HELP_AddFile08_Text  = "                        or exe, including the filename and" 
Const L_Help_HELP_AddFile09_Text  = "                        extension.  Special cases include"
Const L_Help_HELP_AddFile09a_Text = "                        *.dll to enable/disable unlisted"
Const L_Help_HELP_AddFile09b_Text = "                        ISAPI's and *.exe to enable/disable"
Const L_Help_HELP_AddFile09c_Text = "                        unlisted CGI's."
Const L_Help_HELP_AddFile10_Text  = "<access>                Set this to 0 to disable or 1 to"
Const L_Help_HELP_AddFile10a_Text = "                        enable the file after it is added."
Const L_Help_HELP_AddFile11_Text  = "<ID>                    This ID is an arbitrary identifier"
Const L_Help_HELP_AddFile11a_Text = "                        that identifies the Web Service"
Const L_Help_HELP_AddFile11b_Text = "                        Extension the file is associated with."
Const L_Help_HELP_AddFile12_Text  = "                        There can be one or more files for"
Const L_Help_HELP_AddFile12a_Text = "                        each Web Service Extension"
Const L_Help_HELP_AddFile13_Text  = "<deletable>             Set this to 0 to prevent this file"
Const L_Help_HELP_AddFile13a_Text = "                        from being deleted from the restriction" 
Const L_Help_HELP_AddFile14_Text  = "                        list or 1 to allow this file to be"
Const L_Help_HELP_AddFile14a_Text = "                        deleted from the restriction list."
Const L_Help_HELP_AddFile15_Text  = "<ShortDesc>             This is a brief text description of"
Const L_Help_HELP_AddFile15a_Text = "                        the Web Service Extension the file is"
Const L_Help_HELP_AddFile16_Text  = "                        associated with.  Files with the same"
Const L_Help_HELP_AddFile16a_Text = "                        ID should also have the same ShortDesc."

''''''''''''''''''''''''
' Operation codes
Const OPER_ENAPP = 1
Const OPER_ADDDP = 3
Const OPER_REMDP = 4
Const OPER_ENEXT = 5
Const OPER_DSEXT = 6
Const OPER_ENEFI = 7
Const OPER_DSEFI = 8
Const OPER_ADEFI = 9
Const OPER_RMEFI = 10
Const OPER_LSAPP = 11
Const OPER_LSEXT = 12
Const OPER_LSEFI = 13

''''''''''''''''''''''''
' Globalization related code
'
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Const vbSpace = " "

' Get the overridden UI language.
Function GetLangID()
	Dim args, lang

	Set args = WScript.Arguments.Named
	If args.Exists("lang") Then
		lang = args.Item("lang")
		GetLangID = CInt(lang)
	Else
		GetLangID = GetUILanguage()
	End If
End Function

' Get a localized resources for 'resourceID' if available;
' otherwise, get the neutral resource.
Function GetLocalizedResource(resourceID)
	Const ForReading = 1, TristateUseDefault = -2
	Dim lang, value, ini
		
	lang = GetLangID()
	ini = fso.GetParentFolderName(WScript.ScriptFullName) & "\" _
			& ToHex(lang) & "\" & fso.GetBaseName(WScript.ScriptName) &  ".ini"

	If fso.FileExists(ini) Then
		Dim stream, file

		Set file = fso.GetFile(ini)
		Set stream = file.OpenAsTextStream(ForReading, TristateUseDefault)
		value = ReadResource(stream, resourceID)
	End If

	If Not IsEmpty(value) Then
		GetLocalizedResource = value
	Else
		GetLocalizedResource = Eval(resourceID)
	End If
End Function

' Read a resource ID from the TextStream
Function ReadResource(stream, resourceID)
	Const ERROR_FILE_NOT_FOUND = 2
	Dim ln, arr, key, value

	If Not IsObject(stream) Then Err.Raise ERROR_FILE_NOT_FOUND

	Do Until stream.AtEndOfStream
		ln = stream.ReadLine

		arr = Split(ln, "=", 2, 1)
		If UBound(arr, 1) = 1 Then
			' Trim the key and the value first before trimming quotes
			key = arr(0)
			key = TrimSpace(key)
			'key = Replace(key, String(1, vbTab), "")

			If StrComp(resourceID, key, 1) = 0 Then
				value = TrimChar(TrimSpace(arr(1)), """")
				ReadResource = value
				Exit Do
			End If
		End If
	Loop

	stream.Close
End Function

Function TrimSpace(s)
	Dim c
	do
		c = Left(s, 1)
		if c <> vbTab and c <> vbSpace then
			exit do
		end if
		s = Right(s, len(s) - 1)
	loop	

	do
		c = Right(s, 1)
		if c <> vbTab and c <> vbSpace then
			exit do
		end if
		s = Left(s, len(s) - 1)
	loop	

	TrimSpace = s
End Function

' Trim a character from the text string
Function TrimChar(s, c)
	Dim a
	do
		a = Left(s, 1)
		if a <> c then
			exit do
		end if
		s = Right(s, len(s) - 1)
	loop	

	do
		a = Right(s, 1)
		if a <> c then
			exit do
		end if
		s = Left(s, len(s) - 1)
	loop	

	TrimChar = s
End Function

Function ToHex(n)
	Dim s : s = Hex(n)
	ToHex = String(4 - Len(s), "0") & s
End Function

'
' Main block
'
Dim oScriptHelper
Dim intResult, intOperation
Dim strServer, strUser, strPassword
Dim strCmdLineOptions, strAppName
Dim oError, aArgs

' Default values
strServer = "."
strUser = ""
strPassword = ""
intOperation = 0

' Instantiate script helper object
Set oScriptHelper = CreateObject("Microsoft.IIsScriptHelper")
If Err.Number <> 0 Then
    WScript.Echo GetLocalizedResource("L_ScriptHelper_ErrorMessage")
    WScript.Echo GetLocalizedResource("L_ChkScpHelperReg_ErrorMessage")
    WScript.Quit(ERR_GENERAL_FAILURE)
End If

Set oScriptHelper.ScriptHost = WScript

' Check if we are being run with cscript.exe instead of wscript.exe
oScriptHelper.CheckScriptEngine

' Command Line parsing
Dim argObj, arg
Set argObj = WScript.Arguments

strCmdLineOptions = "[server:s:1;user:u:1;password:p:1];enapp::1;listapp::0;adddep::n;" &_
                    "rmdep::n;enext::1;disext::n;listext::0;enfile::1;disfile::1;addfile::5;" &_
                    "rmfile::1;listfile::0"

Set oError = oScriptHelper.ParseCmdLineOptions(strCmdLineOptions)

If Not oError Is Nothing Then
    If oError.ErrorCode = oScriptHelper.ERROR_NOT_ENOUGH_ARGS Then
        ' Not enough arguments for a specified switch
        WScript.Echo GetLocalizedResource("L_NotEnoughParams_ErrorMessage")
        WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
    Else
        ' Invalid switch
        oScriptHelper.vbPrintf GetLocalizedResource("L_InvalidSwitch_ErrorMessage"), Array(oError.SwitchName)
        WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
    End If
    
        WScript.Quit(ERR_GENERAL_FAILURE)
End If

If oScriptHelper.GlobalHelpRequested Then
    DisplayHelpMessage
    WScript.Quit(ERR_OK)
End If

For Each arg In oScriptHelper.Switches
    Select Case arg

    Case "server"
        ' Server information
        strServer = oScriptHelper.GetSwitch(arg)

    Case "user"
        ' User information
        strUser = oScriptHelper.GetSwitch(arg)

    Case "password"
        ' Password information
        strPassword = oScriptHelper.GetSwitch(arg)

    Case "enapp"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_ENAPP

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

        strAppName = oScriptHelper.GetSwitch(arg)

    Case "adddep"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_ADDDP

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

        aArgs = oScriptHelper.GetSwitch(arg)

        If UBound(aArgs) = -1 Then
            WScript.Echo GetLocalizedResource("L_NotEnoughParams_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

    Case "rmdep"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_REMDP

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

        aArgs = oScriptHelper.GetSwitch(arg)

        If UBound(aArgs) = -1 Then
            WScript.Echo GetLocalizedResource("L_NotEnoughParams_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

    Case "enext"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_ENEXT

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

        strAppName = oScriptHelper.GetSwitch(arg)

    Case "disfile"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_DSEFI

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

        strAppName = oScriptHelper.GetSwitch(arg)

    Case "enfile"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_ENEFI

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

        strAppName = oScriptHelper.GetSwitch(arg)

    Case "disext"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_DSEXT

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

        aArgs = oScriptHelper.GetSwitch(arg)

    Case "addfile"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_ADEFI

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display addfile specific help
            DisplayAddFileHelp
            WScript.Quit(ERR_OK)
        End If

        aArgs = oScriptHelper.GetSwitch(arg)

    Case "rmfile"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_RMEFI

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

        strAppName = oScriptHelper.GetSwitch(arg)

    Case "listapp"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_LSAPP

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

    Case "listext"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_LSEXT

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

    Case "listfile"
        If (intOperation <> 0) Then
            WScript.Echo GetLocalizedResource("L_OnlyOneOper_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            WScript.Quit(ERR_GENERAL_FAILURE)
        End If

        intOperation = OPER_LSEFI

        If oScriptHelper.IsHelpRequested(arg) Then
            ' display enapp specific help
        End If

    End Select
Next

' Check Parameters
If intOperation = 0 Then
    WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
    WScript.Quit(ERR_GENERAL_FAILURE)
End If

' Check if /p is specified but /u isn't. In this case, we should bail out with an error
If oScriptHelper.Switches.Exists("password") And Not oScriptHelper.Switches.Exists("user") Then
    WScript.Echo GetLocalizedResource("L_PassWithoutUser_ErrorMessage")
    WScript.Quit(ERR_GENERAL_FAILURE)
End If

' Check if /u is specified but /p isn't. In this case, we should ask for a password
If oScriptHelper.Switches.Exists("user") And Not oScriptHelper.Switches.Exists("password") Then
    WScript.Echo GetLocalizedResource("L_UserWithoutPass_ErrorMessage")
    WScript.Quit(ERR_GENERAL_FAILURE)
End If

' Initializes authentication with remote machine
intResult = oScriptHelper.InitAuthentication(strServer, strUser, strPassword)
If intResult <> 0 Then
    WScript.Quit(intResult)
End If

' Choose operation
Select Case intOperation
	Case OPER_ENAPP
		intResult = ChApp(strAppName, intOperation)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_EnAppComplete_Message")
        End If

    Case OPER_ADDDP
        intResult = ChDep(aArgs, intOperation)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_AddDpComplete_Message")
        End If

    Case OPER_REMDP
        intResult = ChDep(aArgs, intOperation)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_RemDpComplete_Message")
        End If

	Case OPER_ENEXT
		intResult = ChApp(strAppName, intOperation)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_EnExtComplete_Message")
        End If

	Case OPER_ENEFI
		intResult = ChApp(strAppName, intOperation)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_EnEfiComplete_Message")
        End If

	Case OPER_DSEFI
		intResult = ChApp(strAppName, intOperation)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_DsEfiComplete_Message")
        End If

	Case OPER_DSEXT
		intResult = DsExt(aArgs)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_DsExtComplete_Message")
        End If

	Case OPER_ADEFI
		intResult = ChDep(aArgs, intOperation)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_AdEFiComplete_Message")
        End If

	Case OPER_RMEFI
		intResult = RmEfi(strAppName)
        If intResult=0 Then
            WScript.Echo GetLocalizedResource("L_RmEFiComplete_Message")
        End If

	Case OPER_LSAPP
		intResult = ShowList(intOperation)
    
	Case OPER_LSEXT
		intResult = ShowList(intOperation)
	
	Case OPER_LSEFI
		intResult = ShowListFile()

End Select

' Return value to command processor
WScript.Quit(intResult)

'''''''''''''''''''''''''
' End Of Main Block
'''''''''''''''''''''

'''''''''''''''''''''''''''
' DisplayHelpMessage
'''''''''''''''''''''''''''
Sub DisplayHelpMessage()
    WScript.Echo GetLocalizedResource("L_Help_HELP_General01_Text")
    WScript.Echo GetLocalizedResource("L_Empty_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General02_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General02a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General03_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General04_Text")
    WScript.Echo GetLocalizedResource("L_Empty_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General05_Text")
    WScript.Echo GetLocalizedResource("L_Empty_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06b_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06c_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06d_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06e_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General07_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General07a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General08_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General08a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General09_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General09a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General09b_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General09c_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General09d_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General10_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General10a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General10b_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General10c_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General10d_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General11_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General11a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General11b_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General12_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General12a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General12b_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General13_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General13a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General14_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General14a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General15_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General15a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General16_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General16a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General17_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General17a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General18_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General19_Text")
End Sub

'''''''''''''''''''''''''''
' DisplayHelpMessage
'''''''''''''''''''''''''''
Sub DisplayAddFileHelp()
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile01_Text")
    WScript.Echo GetLocalizedResource("L_Empty_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile02_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile02a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile03_Text")
    WScript.Echo GetLocalizedResource("L_Empty_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General05_Text")
    WScript.Echo GetLocalizedResource("L_Empty_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06b_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06c_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06d_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_General06e_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile07_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile08_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile09_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile09a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile09b_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile09c_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile10_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile10a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile11_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile11a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile11b_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile12_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile12a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile13_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile13a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile14_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile14a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile15_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile15a_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile16_Text")
    WScript.Echo GetLocalizedResource("L_Help_HELP_AddFile16a_Text")
End Sub

Function ChApp(strAppName, intOperation)
    Dim WebSvcObj
    
    On Error Resume Next

    oScriptHelper.WMIConnect
    If Err.Number Then
        WScript.Echo L_WMIConnect_ErrorMessage
        oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        ChApp = Err.Number
        Exit Function
    End If

    Set WebSvcObj = oScriptHelper.ProviderObj.get("IIsWebService='w3svc'")
    If Err.Number Then
        Select Case Err.Number
            Case &H80070005
                WScript.Echo GetLocalizedResource("L_Admin_ErrorMessage")
                WScript.Echo GetLocalizedResource("L_Adminp2_ErrorMessage")

            Case Else
                WScript.Echo GetLocalizedResource("L_GetWebSvcObj_ErrorMessage")
                oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        End Select

        ChApp = Err.Number
        Exit Function
    End If
    
    Select Case intOperation
	    Case OPER_ENAPP
            WebSvcObj.EnableApplication strAppName

	    Case OPER_ENEXT
            WebSvcObj.EnableWebServiceExtension strAppName

	    Case OPER_ENEFI
            WebSvcObj.EnableExtensionFile strAppName
 
	    Case OPER_DSEFI
            WebSvcObj.DisableExtensionFile strAppName
 
    End Select

    If Err.Number Then
		WScript.Echo L_EnApp_ErrorMessage
		WScript.Echo Err.Description
        
        Select Case intOperation
	        Case OPER_ENAPP
                WScript.Echo GetLocalizedResource("L_NoApp_ErrorMessage")
                WScript.Echo GetLocalizedResource("L_NoAppp2_ErrorMessage")

	        Case OPER_ENEXT
                WScript.Echo GetLocalizedResource("L_NoExt_ErrorMessage")

	        Case OPER_ENEFI
                WScript.Echo GetLocalizedResource("L_NoEfi_ErrorMessage")
     
	        Case OPER_DSEFI
                WScript.Echo GetLocalizedResource("L_NoEfi_ErrorMessage")
        End Select

        ChApp = Err.Number
        Exit Function
    End If
    
End Function

Function RmEfi(strAppName)
    Dim WebSvcObj, extObj, restrictions, i, bDel
    
    bDel = False

    On Error Resume Next

    oScriptHelper.WMIConnect
    If Err.Number Then
        WScript.Echo GetLocalizedResource("L_WMIConnect_ErrorMessage")
        oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        RmEfi = Err.Number
        Exit Function
    End If

    Set WebSvcObj = oScriptHelper.ProviderObj.get("IIsWebService='w3svc'")
    If Err.Number Then
        Select Case Err.Number
            Case &H80070005
                WScript.Echo GetLocalizedResource("L_Admin_ErrorMessage")
                WScript.Echo GetLocalizedResource("L_Adminp2_ErrorMessage")

            Case Else
                WScript.Echo GetLocalizedResource("L_GetWebSvcObj_ErrorMessage")
                oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        End Select

        RmEfi = Err.Number
        Exit Function
    End If
    
    Set extObj = oScriptHelper.ProviderObj.get("IIsWebServiceSetting='w3svc'")
    restrictions = extObj.WebSvcExtRestrictionList

    For i=0 to UBOUND(restrictions)
        If UCASE(restrictions(i).FilePath) = UCASE(strAppName) Then
            If restrictions(i).Deletable = 1 Then
                WebSvcObj.DeleteExtensionFileRecord strAppName
                bDel = True
            End If
        End If
    Next
 
    If Err.Number Then
		WScript.Echo GetLocalizedResource("L_EnApp_ErrorMessage")
		WScript.Echo Err.Description
        
        RmEfi = Err.Number
        Exit Function
    End If
    
    If bDel = False Then
        WScript.Echo GetLocalizedResource("L_RmEfi_ErrorMessage")
        WScript.Echo GetLocalizedResource("L_RmEfip2_ErrorMessage")
        RmEfi = 1
    End If
End Function

Function ChDep(aArgs, intOperation)
    Dim WebSvcObj, i
    
    On Error Resume Next

    oScriptHelper.WMIConnect
    If Err.Number Then
        WScript.Echo GetLocalizedResource("L_WMIConnect_ErrorMessage")
        oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        ChDep = Err.Number
        Exit Function
    End If

    Set WebSvcObj = oScriptHelper.ProviderObj.get("IIsWebService='w3svc'")
    If Err.Number Then
        Select Case Err.Number
            Case &H80070005
                WScript.Echo GetLocalizedResource("L_Admin_ErrorMessage")
                WScript.Echo GetLocalizedResource("L_Adminp2_ErrorMessage")

            Case Else
                WScript.Echo GetLocalizedResource("L_GetWebSvcObj_ErrorMessage")
                oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        End Select

        ChDep = Err.Number
        Exit Function
    End If
    
    If OPER_ADEFI = intOperation Then
        If ((aArgs(1) <> 0) And (aArgs(1) <> 1)) Then
            aArgs(1) = 0
        End If

        WebSvcObj.AddExtensionFile aArgs(0), aArgs(1), aArgs(2), aArgs(3), aArgs(4)
    Else

        If UBOUND(aArgs) < 1 Then
            WScript.Echo GetLocalizedResource("L_NotEnoughParams_ErrorMessage")
            WScript.Echo GetLocalizedResource("L_SeeHelp_Message")
            ChDep = ERR_GENERAL_FAILURE
            Exit Function
        End If

        For i=1 to UBOUND(aArgs)
     
            Select Case intOperation
	            Case OPER_ADDDP
                    WebSvcObj.AddDependency aArgs(0), aArgs(i)

	            Case OPER_REMDP
                    WebSvcObj.RemoveDependency aArgs(0), aArgs(i)
            End Select

            If Err.Number Then
		        WScript.Echo GetLocalizedResource("L_EnDep_ErrorMessage")
		        WScript.Echo Err.Description
              WScript.Echo GetLocalizedResource("L_NoDep_ErrorMessage")
              WScript.Echo GetLocalizedResource("L_NoDepp2_ErrorMessage")

              ChDep = Err.Number
              Exit Function
            End If
        Next
    
    End If

    If Err.Number Then
		WScript.Echo GetLocalizedResource("L_EnApp_ErrorMessage")
		WScript.Echo Err.Description
        
        ChDep = Err.Number
        Exit Function
    End If

End Function

Function DsExt(aArgs)
    Dim WebSvcObj, i
    
    On Error Resume Next

    oScriptHelper.WMIConnect
    If Err.Number Then
        WScript.Echo GetLocalizedResource("L_WMIConnect_ErrorMessage")
        oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        DsExt = Err.Number
        Exit Function
    End If

    Set WebSvcObj = oScriptHelper.ProviderObj.get("IIsWebService='w3svc'")
    If Err.Number Then
        Select Case Err.Number
            Case &H80070005
                WScript.Echo GetLocalizedResource("L_Admin_ErrorMessage")
                WScript.Echo GetLocalizedResource("L_Adminp2_ErrorMessage")

            Case Else
                WScript.Echo GetLocalizedResource("L_GetWebSvcObj_ErrorMessage")
                oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        End Select

        DsExt = Err.Number
        Exit Function
    End If
    
    For i=0 to UBOUND(aArgs)
 
        WebSvcObj.DisableWebServiceExtension aArgs(i)

        If Err.Number Then
		    WScript.Echo GetLocalizedResource("L_EnApp_ErrorMessage")
		    WScript.Echo Err.Description
            WScript.Echo GetLocalizedResource("L_NoExt_ErrorMessage")

            DsExt = Err.Number
            Exit Function
        End If
    Next
    
End Function

Function ShowList(intOperation)
    Dim WebSvcObj, holder, i, mylist
    
    On Error Resume Next

    oScriptHelper.WMIConnect
    If Err.Number Then
        WScript.Echo GetLocalizedResource("L_WMIConnect_ErrorMessage")
        oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        ShowList = Err.Number
        Exit Function
    End If

    Set WebSvcObj = oScriptHelper.ProviderObj.get("IIsWebService='w3svc'")
    If Err.Number Then
        Select Case Err.Number
            Case &H80070005
                WScript.Echo GetLocalizedResource("L_Admin_ErrorMessage")
                WScript.Echo GetLocalizedResource("L_Adminp2_ErrorMessage")

            Case Else
                WScript.Echo GetLocalizedResource("L_GetWebSvcObj_ErrorMessage")
                oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        End Select

        ShowList = Err.Number
        Exit Function
    End If
    
    Select Case intOperation
	    Case OPER_LSAPP
            set holder=oScriptHelper.ProviderObj.execmethod("IIsWebService='w3svc'", "ListApplications")
            mylist = holder.Applications

	    Case OPER_LSEXT
            set holder=oScriptHelper.ProviderObj.execmethod("IIsWebService='w3svc'", "ListWebServiceExtensions")
            mylist = holder.Extensions

    End Select

    If Err.Number Then
		WScript.Echo GetLocalizedResource("L_ShowList_ErrorMessage")
		WScript.Echo GetLocalizedResource("L_ShowList2_ErrorMessage")
		WScript.Echo GetLocalizedResource("L_ShowList3_ErrorMessage")
		WScript.Echo Err.Description
    
        ShowList = Err.Number
        Exit Function
    End If
    
    For i = 0 to UBOUND(mylist)
        WScript.Echo mylist(i) 
    Next

End Function

Function ShowListFile()
    Dim WebSvcObj, fileList, i
    
    On Error Resume Next

    oScriptHelper.WMIConnect
    If Err.Number Then
        WScript.Echo GetLocalizedResource("L_WMIConnect_ErrorMessage")
        oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        ShowList = Err.Number
        Exit Function
    End If

    Set WebSvcObj = oScriptHelper.ProviderObj.get("IIsWebServiceSetting='w3svc'")
    If Err.Number Then
        Select Case Err.Number
            Case &H80070005
                WScript.Echo GetLocalizedResource("L_Admin_ErrorMessage")
                WScript.Echo GetLocalizedResource("L_Adminp2_ErrorMessage")

            Case Else
                WScript.Echo GetLocalizedResource("L_GetWebSvcObj_ErrorMessage")
                oScriptHelper.vbPrintf GetLocalizedResource("L_Error_ErrorMessage"), Array(Hex(Err.Number), Err.Description)
        End Select

        ShowList = Err.Number
        Exit Function
    End If
    
    fileList = WebSvcObj.WebSvcExtRestrictionList

    
    If Err.Number Then
		WScript.Echo GetLocalizedResource("L_ShowList_ErrorMessage")
		WScript.Echo GetLocalizedResource("L_ShowList2_ErrorMessage")
		WScript.Echo GetLocalizedResource("L_ShowList3_ErrorMessage")
		WScript.Echo Err.Description
    
        ShowList = Err.Number
        Exit Function
    End If
    
    WScript.Echo GetLocalizedResource("L_Empty_Text")
    WScript.Echo GetLocalizedResource("L_ShowListFile_Message")
    WScript.Echo GetLocalizedResource("L_ShowListFile2_Message")

    For i = 0 to UBOUND(fileList)
        WScript.Echo fileList(i).Access & "  " & fileList(i).FilePath 
    Next
End Function
