Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

736 lines
23 KiB

<% '==================================================
' Microsoft Server Appliance
'
' Serves task wizard/propsheet
'
' Copyright (c) Microsoft Corporation. All rights reserved.
'================================================== %>
<!-- #include file="sh_page.asp" -->
<!-- #include file="tabs.asp" -->
<!-- #include file="sh_statusbar.asp" -->
<% ' Copyright (c) Microsoft Corporation. All rights reserved.
'Task module-level variables
Dim mstrPageName ' used as page identifier, e.g., "Intro"
Dim mstrTaskTitle ' e.g., "Add User"
Dim mstrWizPageTitle ' e.g., "Add User"
Dim mstrPageTitle ' e.g., "Username and Password"
Dim mstrTaskType ' "wizard", "prop"
Dim mstrWizardPageType ' "intro", "standard", "finish"
Dim mstrMethod ' "BACK", "NEXT", "FINISH", etc
Dim mstrReturnURL ' URL to return to after ending task
Dim mstrFrmwrkFormStrings ' framework form values, list of strings to exclude
Dim mstrIconPath ' image for upper right header
Dim mstrPanelPath ' image for left panel of intro and finish pg
' Dim mintElementIndex ' index of embedded wizard page (0 - n, -1 = no extensions)
' Dim mintElementCount ' number of embedded pages in wizard
Dim mstrErrMsg ' used by SetErrMsg and GetErrMsg
Dim mstrAsyncTaskName ' Task EXE name - empty if task is synchronous
Dim mstrTabPropSheetTabs()
Dim mintTabSelected
Dim intCaptionIDTask
Dim gm_sPageTitle ' SAK 2.0 Page Title variable
Dim gm_sBannerText ' SAK 2.0 Banner Text
mintTabSelected = CInt(Request.Form("TabSelected"))
Set objLocMgr = Server.CreateObject("ServerAppliance.LocalizationManager")
strSourceName = "sakitmsg.dll"
If Err.number <> 0 Then
If ( Err.number = &H800401F3 ) Then
Response.Write("<H1>Problem:<H1>")
Response.Write("Unable to locate a software component on the Server Appliance.<BR>")
Response.Write("The Server Appliance core software components do not appear to be installed correctly.")
Else
Response.Write("<H1>Problem:<H1>")
Response.Write("Server.CreateObject(ServerAppliance.LocalizationManager) failed with error code: " + CStr(Hex(Err.Number)) + " " + Err.Description)
End If
Call SA_TraceOut("SH_TASK", "Server.CreateObject(ServerAppliance.LocalizationManager) failed with error code: " + CStr(Hex(Err.Number)) )
Response.End
End If
'-----------------------------------------------------
'START of localization content
Dim L_BACK_BUTTON
Dim L_BACKIE_BUTTON
Dim L_NEXT_BUTTON
Dim L_NEXTIE_BUTTON
Dim L_FINISH_BUTTON
Dim L_OK_BUTTON
Dim L_CANCEL_BUTTON
Dim L_BACK_ACCESSKEY
Dim L_NEXT_ACCESSKEY
Dim L_FINISH_ACCESSKEY
L_BACK_BUTTON = objLocMgr.GetString(strSourceName, "&H4001001C",varReplacementStrings)
L_BACKIE_BUTTON = objLocMgr.GetString(strSourceName, "&H4001001D",varReplacementStrings)
L_NEXT_BUTTON = objLocMgr.GetString(strSourceName, "&H4001001E",varReplacementStrings)
L_NEXTIE_BUTTON = objLocMgr.GetString(strSourceName, "&H4001001F",varReplacementStrings)
L_FINISH_BUTTON = objLocMgr.GetString(strSourceName, "&H40010020",varReplacementStrings)
L_OK_BUTTON = objLocMgr.GetString(strSourceName, "&H40010021",varReplacementStrings)
L_CANCEL_BUTTON = objLocMgr.GetString(strSourceName, "&H40010022",varReplacementStrings)
L_BACK_ACCESSKEY = objLocMgr.GetString(strSourceName, "&H40010039",varReplacementStrings)
L_NEXT_ACCESSKEY = objLocMgr.GetString(strSourceName, "&H4001003A",varReplacementStrings)
L_FINISH_ACCESSKEY = objLocMgr.GetString(strSourceName, "&H4001003B",varReplacementStrings)
'End of localization content
'-----------------------------------------------------
'Task Constants
Const PROPERTY_TASK_NICE_NAME = "TaskNiceName"
Const PROPERTY_TASK_URL = "TaskURL"
Const WBEM_E_PROVIDER_NOT_CAPABLE = "&H80041024"
Const WIZARD_TASK = "wizard"
Const PROPSHEET_TASK = "prop"
Const TAB_PROPSHEET = "TabPropSheet"
Const BODY_PAGE = "standard"
Const INTRO_PAGE = "intro"
Const FINISH_PAGE = "finish"
Const BACK_METHOD = "BACK"
Const NEXT_METHOD = "NEXT"
Const FINISH_METHOD = "FINISH"
Const CANCEL_METHOD = "CANCEL"
'Get standard task values and initialize
mstrMethod = Request.Form("Method")
mstrPageName = Request("PageName")
mstrReturnURL = Request("ReturnURL")
If mstrReturnURL = "" Then
mstrReturnURL = GetCurrentPrimaryTabURL()
End If
' mintElementIndex = -1 ' set later in ServeWizardEmbeds()
' mintElementCount = Request.Form("EmbedPageCount") ' get previous value, if any
' If mintElementCount="" Then
' mintElementCount=0
' End If
mstrFrmwrkFormStrings = "!method!pagename!pagetype!tasktype!returnurl!embedpageindex!embedpagecount!commonvalues!embedvalues0!embedvalues1!embedvalues2!embedvalues3!embedvalues4!"
Set objLocMgr = Server.CreateObject("ServerAppliance.LocalizationManager")
'----------------------------------------------------------------------------
'
' Function : SA_IsAsyncTaskBusy
'
' Synopsis : Determine if the async task is currently being executed
'
' Arguments: TaskName(IN) - async task name
'
' Returns : true/false
'
'----------------------------------------------------------------------------
Public Function SA_IsAsyncTaskBusy(ByVal TaskName)
SA_IsAsyncTaskBusy = AsyncTaskBusy(TaskName)
End Function
Private Function AsyncTaskBusy(ByVal TaskName)
Dim objTask
Set objTask = GetObject("WINMGMTS:" & SA_GetWMIConnectionAttributes() &"!\\" & GetServerName & "\root\cimv2:Microsoft_SA_Task.TaskName=" & Chr(34) & TaskName & Chr(34) )
If ( Err.Number <> 0 ) Then
Call SA_TraceOut(SA_GetScriptFileName(), "Get Microsoft_SA_Task failed: " + CStr(Hex(Err.Number)) + " " + Err.Description)
Exit Function
End If
If Not objTask.IsAvailable Then
AsyncTaskBusy = True
Else
AsyncTaskBusy = False
End If
Set objTask = Nothing
End Function
Public Function SAI_GetBannerText()
If ( SA_GetVersion() < gc_V2 ) Then
SAI_GetBannerText = mstrTaskTitle
Else
SAI_GetBannerText = gm_sBannerText
End If
End Function
Public Function SAI_GetPageTitle()
If ( SA_GetVersion() < gc_V2 ) Then
SAI_GetPageTitle = mstrTaskTitle
Else
SAI_GetPageTitle = gm_sPageTitle
End If
End Function
'----------------------------------------------------------------------------
'
' Function : SA_SetErrMsg
'
' Synopsis : Sets framework error message string
'
' Arguments: Message(IN) - error message text
'
' Returns : Nothing
'
'----------------------------------------------------------------------------
Public Function SA_SetErrMsg(ByVal Message)
mstrErrMsg = Message
End Function
Private Function SetErrMsg(ByVal Message)
mstrErrMsg = Message
End Function
'----------------------------------------------------------------------------
'
' Function : GetErrMsg
'
' Synopsis : Gets the current framework error message string
'
' Arguments: None
'
' Returns : None
'
'----------------------------------------------------------------------------
Private Function GetErrMsg()
GetErrMsg = mstrErrMsg
End Function
'----------------------------------------------------------------------------
'
' Function : ServeTaskHeader
'
' Synopsis : Serve the task header based on page type
'
' Arguments: None
'
' Returns : None
'
'----------------------------------------------------------------------------
Function ServeTaskHeader()
Dim objItem
Dim i
Dim intSlack
Response.Buffer = True
%>
<html>
<!-- Microsoft(R) Server Appliance Platform
Copyright (c) Microsoft Corporation. All rights reserved.
-------------------------------------------------
Web Framework <%=SA_TaskToPageType()%>
-------------------------------------------------
-->
<meta http-equiv="Content-Type" content="text/html; charset=<%=GetCharSet()%>">
<head>
<title><%=Server.HTMLEncode(SAI_GetPageTitle())%></title>
<script language=JavaScript src="<%=m_VirtualRoot%>sh_page.js"></script>
<script language=JavaScript>
var VirtualRoot = '<%=m_VirtualRoot%>';
function HandleClickEvent()
{
if ( IsIE() )
{
if (window.event.srcElement.tagName == "INPUT")
return true;
else
return false;
}
else return true;
}
</script>
<script language=JavaScript src="<%=m_VirtualRoot%>sh_task.js"></script>
<%
If (mstrTaskType = PROPSHEET_TASK) then
If ( SA_GetVersion() < gc_V2 ) Then
Call SA_EmitAdditionalStyleSheetReferences("")
End If
End If
%>
</head>
<BODY onload="PageInit();" onDragDrop="return false;" xoncontextmenu="return false;">
<%
If (mstrTaskType= TAB_PROPSHEET) then
If ( SA_GetVersion() < gc_V2 ) Then
Call ServeTabBar()
End If
End If
If( (mstrTaskType="wizard") AND (mstrWizardPageType="intro" OR mstrWizardPageType="finish")) Then
%>
<div class='PageBodyIndent'>
<%
Call ServeStandardHeaderBar(SAI_GetBannerText(), mstrIconPath)
%>
<br>
<TABLE width=87% height=65% border=0 cellspacing=0 cellpadding=0 ID=TASKTABLE>
<TR valign=TOP style="background-color:#FFFFFF">
<TD height=100% xwidth="10%" align="right" valign=TOP class=PageHeaderBar style="width:130px; xbackground-color: #313163" rowspan="2">
<%
If ( Len(Trim(mstrPanelPath)) > 0 ) Then
%>
<IMG width=130 border=0 src='<% =m_VirtualRoot + mstrPanelPath %>' >
<%
End If
%>
</td>
<td width=10>&nbsp;</td>
<TD valign=TOP class="TasksBody">
<div class="PageTitleText"><%=Server.HTMLEncode(mstrWizPageTitle)%></div>
<br>
<%
Else
If (mstrTaskType= TAB_PROPSHEET) Then
%>
<div class='PageBodyIndent'>
<%
Call ServeStandardHeaderBar(SAI_GetBannerText(), mstrIconPath)
%>
<br>
<div class='PageBodyInnerIndent'>
<TABLE width=87% border=0 height="65%" cellspacing=0 cellpadding=0 ID=TASKTABLE >
<TR height="100%" width="100%" valign=TOP>
<TD>
<%
If IsIE() Then
%>
<TABLE class="TabPropTabTable" height="100%" width="100%" border=0 cellspacing=0 cellpadding=0>
<%
Else
%>
<TABLE class="TabPropTabTable" height="500px" width="100%" border=0 cellspacing=0 cellpadding=0>
<%
End If
%>
<TR valign=TOP>
<TD width="20%" height=100%>
<TABLE xheight="100%" width="100%" border=0 cellspacing=0 cellpadding=0>
<%
intSlack = UBound(mstrTabPropSheetTabs) - LBound(mstrTabPropSheetTabs)
intSlack = 100 - (2 * intSlack)
If intSlack <= 0 Then
intSlack = 5
End If
For i = LBound(mstrTabPRopSheetTabs) to UBound(mstrTabPropSheetTabs)-1
Response.Write("<TR align=left height=20>"+vbCrLf)
If mintTabSelected=i Then
Response.Write("<TD nowrap class=TabPropTabSelected>"+vbCrLf)
Else
Response.Write("<TD nowrap class=TabPropTab>"+vbCrLf)
End If
'Response.Write("<a href=""javascript:if (ValidatePage()) {SetData(); top.main.document.forms['frmTask'].TabSelected.value="+ CStr(i) +"; top.main.document.forms['frmTask'].submit();}"">"+vbCrLf)
Response.Write("<a onmouseover=""window.status=''; return true;"" href=""javascript:SA_OnClickTab("+ CStr(i) +");"">")
If mintTabSelected=i Then
Response.Write("<span id='PropTab_"+CStr(i)+"' style=""overflow:visible;"" class=TabPropTabSelectedNoBorder>")
Else
Response.Write("<span id='PropTab_"+CStr(i)+"' style=""overflow:visible;"" class=TabPropTabNoBorder>")
End If
Response.Write(Server.HTMLEncode(mstrTabPropSheetTabs(i)))
Response.Write("</span>")
Response.Write("</a>"+vbCrLf)
Response.Write("</TD>"+vbCrLf)
Response.Write("</TR>"+vbCrLf)
Next
%>
</TABLE>
<TABLE height="<%=intSlack%>%" width="100%" border=0 cellspacing=0 cellpadding=0>
<TR xheight="<%=intSlack%>%">
<TD class="TabPropTab">&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD height="100%">
<div>
<%
If IsIE() Then
%>
<TABLE onClick='return HandleClickEvent();' height="100%" width="100%" border=0 cellspacing=0>
<%
Else
%>
<TABLE onClick='return HandleClickEvent();' height="500px" width="100%" border=0 cellspacing=0>
<%
End If
%>
<TR height="100%" width="100%"><TD class=TabPropTabTaskCell valign=top>
<%
'
' Wizard Page Type
'
ElseIf (mstrTaskType="wizard") Then
%>
<div class='PageBodyIndent'>
<%
Call ServeStandardHeaderBar(SAI_GetBannerText(), mstrIconPath)
%>
<div class='PageBodyInnerIndent'>
<TABLE width=100% border=0 height="58%" cellspacing=0 cellpadding=0 ID=TASKTABLE >
<TR valign=TOP height="10%" style="xbackground-color:#FFFFFF">
<TD valign=TOP>
<div class="PageTitleText"><%=Server.HTMLEncode(mstrWizPageTitle)%></div>
</TD>
</TR>
<TR height="80%" valign=TOP>
<TD valign="top" height="70%">
<table onClick='return HandleClickEvent();' width=90% class="TasksBody"><tr><td class="TasksBody" width=100% height=100%>
<%
'
' Property page
'
Else
If ( SA_GetVersion() < gc_V2 ) Then
Call SA_ServeStatusBar()
Call ServeTabBar()
End If
%>
<TABLE width=100% border=0 height="58%" cellspacing=0 cellpadding=0 ID=TASKTABLE >
<TR valign=TOP height="10%" >
<TD valign=TOP>
<div class='PageBodyIndent'>
<%
Call ServeStandardHeaderBar(SAI_GetBannerText(), mstrIconPath)
%>
<div class="PageTitleText"><% =mstrPageTitle %></div>
</div>
</TD>
</TR>
<TR height="80%" valign=TOP>
<TD valign="top" height="70%">
<div class='PageBodyIndent'>
<table onClick='return HandleClickEvent();' width=90% class="TasksBody"><tr><td class="TasksBody" width=100% height=100%>
<div class='PageBodyInnerIndent'>
<%
End If
End If
%>
<FORM name="frmTask" onSubmit="return Next();" action="<% =GetScriptFileName %>" method="POST">
<INPUT name="<%=SAI_FLD_PAGEKEY%>" type="hidden" value="<%=SAI_GetPageKey()%>">
<INPUT name="PageName" type="hidden" value="<% =mstrPageName %>">
<INPUT name="Method" type="hidden" value="<% =mstrMethod %>">
<INPUT name="ReturnURL" type="hidden" value="<% =mstrReturnURL %>">
<INPUT name="TaskType" type="hidden" value="<% =mstrTaskType %>">
<INPUT name="PageType" type="hidden" value="<% =mstrWizardPageType %>">
<INPUT name="TabSelected" type="hidden" value="<% =mintTabSelected%>">
<INPUT name="Tab1" type="hidden" value="<% =GetTab1() %>">
<INPUT name="Tab2" type="hidden" value="<% =GetTab2() %>">
<%
ServeTaskHeader = True
End Function
'----------------------------------------------------------------------------
'
' Function : ServeTaskFooter
'
' Synopsis : Serve the task footer (navigation buttons & error div)
' Note: The function relies on the following module-level variables:
' mstrTaskType - prop wizard
' mstrWizardPageType - standard intro finish failure
'
' Arguments: None
'
' Returns : None
'
'----------------------------------------------------------------------------
Function ServeTaskFooter()
dim ErrMessage
Response.write("</td></tr>")
If GetErrMsg <> "" Then
ErrMessage = "<table class='ErrMsg'><tr><td><img src='" & m_VirtualRoot & "images/critical_error.gif' border=0></td><td>" & GetErrMsg & "</td></tr></table>"
SetErrMsg ""
else
ErrMessage =""
End If
If( (mstrWizardPageType<>"intro_xxx") AND (mstrWizardPageType<>"finish_zzzz") ) Then
If (IsIE()) Then %>
<tr><td colspan=2>
<DIV name="divErrMsg" ID="divErrMsg" class="ErrMsg"><%=ErrMessage%></DIV>
</td></tr>
<% End If %>
<% If (mstrTaskType= TAB_PROPSHEET) then %>
</table>
</div>
</td></tr></table>
</td></tr></table>
</div>
</div>
<% Else %>
</table>
</td></tr></table>
</div>
</div>
<% End If %>
<% End If %>
<% If Not IsIE() Then %>
<layer name="layErrMsg" class="ErrMsg"><%=ErrMessage%></layer>
<% End If %>
<%
Response.Write "</form></BODY></HTML>"
End Function
'----------------------------------------------------------------------------
'
' Function : ServeFailurePage
'
' Synopsis : Serve the page which redirects the browser to the err_view.asp
' failure page
'
' Arguments: Message(IN) - message to be displayed by err_view.asp
' intTab(IN) - Tab to be highlighted by err_view.asp
'
' Returns : None
'
'----------------------------------------------------------------------------
Function ServeFailurePage(Message, intTab)
Call SA_ServeFailurePage(Message)
Exit Function
End Function
'----------------------------------------------------------------------------
'
' Function : ServeClose
'
' Synopsis : Redirect user to the page from which the wizard was launched
'
' Arguments: None
'
' Returns : None
'
'----------------------------------------------------------------------------
Sub ServeClose
%>
<html>
<!-- Copyright (c) Microsoft Corporation. All rights reserved.-->
<head>
<SCRIPT language=JavaScript>
function Redirect()
{
top.location='<%=EscapeQuotes(mstrReturnURL)%>';
}
</SCRIPT>
</head>
<BODY onLoad="Redirect();">
&nbsp;
</BODY>
</html>
<%
End Sub
'----------------------------------------------------------------------------
'
' Function SA_ExecuteTask
'
' Synopsis Executes an Appliance Task backend object. Normally, backend Tasks
' are executed synchronously. The bExecuteAsync parameter allows overriding
' the default behavior.
'
' If the oTaskContext object has not been created and initialized, this function
' will create a default oTaskContext and will initialize it by creating task
' parameters using all input form fields from the current Request object. This
' makes it easy to pass an HTML form to the appliance task.
'
' If an error is encountered the really is no reasonable recovery that a
' scripting client can make.
'
' Arguments [in] TaskName Name of task to execute
'
' [in] bExecuteAsync Flag indicating if Task should be executed
' synchronisly (default, FALSE) or async (TRUE).
'
' [in/out] oTaskContext TaskContext object for the appliance task. The TaskContext
' object can be used to pass input arguments to the Task.
'
' Returns:
' SA_NO_ERROR
' The call succeeded, no errors occured
'
' SA_ERROR_CREATE_OBJECT_FAILED
' Unable to create one of the required backend objects, this indicates that either the
' components were not installed correctly or that the Appliance Manager service
' is not running.
'
' SA_ERROR_INITIALIZE_OBJECT_FAILED
' The Task object encountered an unrecoverable error during it's internal initialization.
' This is probably not recoverable and likely indicates a problem with either the expected
' inputs or the current state of the Appliance task.
'
' All other cases
' The HRESULT return value recieved from the Task
'
'
' Example 1 - Create TaskContext and set input parameters:
' Dim oTaskContext
' Dim rc
'
' Set oTaskContext = CreateObject("Taskctx.TaskContext")
' If Err.Number <> 0 Then
' ' Handle the error
' Exit Function
' End If
'
' Call oTaskContext.SetParameter("Method Name", strMethodName)
' Call oTaskContext.SetParameter("LanguageID", strLANGID)
' Call oTaskContext.SetParameter("AutoConfig", "y")
'
' rc = SA_ExecuteTask("ChangeLanguage", FALSE, oTaskContext)
' If ( rc <> SA_NO_ERROR ) Then
' ' Handle the error
' End If
'
' Example 2 - Use the current input form (Request object) as input to the task
' Dim rc
' Dim oTaskContext
' Set oTaskContext = nothing
' rc = SA_ExecuteTask("MyApplianceTask", FALSE, oTaskContext)
' If ( rc <> SA_NO_ERROR ) Then
' ' Handle the error
' End If
'----------------------------------------------------------------------------
'
' Following signature has been deprecated in SAK 2.0 - See SA_ExecuteTask
Private Function ExecuteTask(ByVal TaskName, ByRef oTaskContext)
ExecuteTask = SA_ExecuteTask(TaskName, FALSE, oTaskContext)
End Function
Public Function SA_ExecuteTask(ByVal TaskName, ByVal bExecuteAsync, ByRef oTaskContext)
on error resume next
Err.Clear
Dim objAS
Dim objValue
Dim objElementCol
Dim objElement
Dim oField
Dim rc
SA_ExecuteTask = SA_NO_ERROR
'
' Create default TaskContext object if necessary
'
If (NOT IsObject(oTaskContext)) Then
Call SA_TraceOut("SH_TASK", "SA_ExecuteTask - Creating default TaskContext")
Set oTaskContext = Server.CreateObject("Taskctx.TaskContext")
If (Err.Number <> 0) Then
Call SA_TraceErrorOut(SA_GetScriptFileName(), "Server.CreateObject(Taskctx.TaskContext) failed: " + CStr(Hex(Err.Number)) + " " + Err.Description)
SA_ExecuteTask = SA_ERROR_CREATE_OBJECT_FAILED
Exit Function
End If
'
' Set default value of parameters
For Each oField in Request.Form
oTaskContext.SetParameter oField, CStr(Request.Form(oField))
Next
End If
'
' Get interface to ApplianceServices interface, the object that allows us to invoke tasks
Set objAS = Server.CreateObject("Appsrvcs.ApplianceServices")
If (Err.Number <> 0) Then
Call SA_TraceErrorOut(SA_GetScriptFileName(), "Server.CreateObject(Appsrvcs.ApplianceServices) failed: " + CStr(Hex(Err.Number)) + " " + Err.Description)
SA_ExecuteTask = SA_ERROR_CREATE_OBJECT_FAILED
Exit Function
End If
'
' Initialize ApplianceServices object
objAS.Initialize()
If (Err.Number <> 0) Then
Call SA_TraceErrorOut(SA_GetScriptFileName(), "objAS.Initialize() for object Appsrvcs.ApplianceServices failed: " + CStr(Hex(Err.Number)) + " " + Err.Description)
SA_ExecuteTask = SA_ERROR_INITIALIZE_OBJECT_FAILED
Exit Function
End If
'
' Initialize context parameters
oTaskContext.SetParameter PROPERTY_TASK_NICE_NAME, mstrTaskTitle
oTaskContext.SetParameter PROPERTY_TASK_URL, m_VirtualRoot + GetScriptPath()
Err.Clear
If ( TRUE = bExecuteAsync ) Then
'Call SA_TraceOut("SH_TASK", "Calling objAS.ExecuteTaskAsync("+TaskName+", oTaskContext)")
Call objAS.ExecuteTaskAsync(TaskName, oTaskContext)
Else
'Call SA_TraceOut("SH_TASK", "Calling objAS.ExecuteTask("+TaskName+", oTaskContext)")
Call objAS.ExecuteTask(TaskName, oTaskContext)
End If
If ( Err.Number <> 0 ) Then
SA_ExecuteTask = Err.Number
Call SA_TraceErrorOut(SA_GetScriptFileName(), "Task execution returned failure code: " + CStr(Hex(Err.Number)) + " " + Err.Description)
End If
objAS.Shutdown()
Err.Clear
Set objAS = Nothing
End Function
Private Function SA_TaskToPageType()
If ( mstrTaskType = "prop" ) Then
SA_TaskToPageType = "Property Page"
ElseIf ( mstrTaskType = TAB_PROPSHEET) Then
SA_TaskToPageType = "Tabbed Property Page"
ElseIf ( mstrTaskType = "wizard") Then
SA_TaskToPageType = "Wizard Page"
Else
SA_TaskToPageType = "Unknown Page Type"
End If
End Function
%>