HRESULT ScaWebDirsInstall(IMSAdminBase* piMetabase, SCA_WEBDIR* pswdList, SCA_APPPOOL * psapList) { HRESULT hr = S_OK; SCA_WEBDIR* pswd = pswdList; int i; while (pswd) { // On reinstall, we have to uninstall the old application, otherwise a duplicate will be created if (WcaIsReInstalling(pswd->isInstalled, pswd->isAction)) { if (pswd->fHasApplication) { hr = ScaDeleteApp(piMetabase, pswd->wzWebDirRoot); ExitOnFailure(hr, "Failed to remove application for WebDir as part of a reinstall"); } } // if we are installing the web site if (WcaIsInstalling(pswd->isInstalled, pswd->isAction)) { hr = ScaCreateMetabaseKey(piMetabase, pswd->wzWebDirRoot, L""); ExitOnFailure(hr, "Failed to create key for WebDir"); hr = ScaWriteMetabaseValue(piMetabase, pswd->wzWebDirRoot, L"", MD_KEY_TYPE, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, STRING_METADATA, (LPVOID)L"IIsWebDirectory"); ExitOnFailure(hr, "Failed to write key type for for WebDir"); i = 0x4000003e; // 1073741886: default directory browsing rights hr = ScaWriteMetabaseValue(piMetabase, pswd->wzWebDirRoot, L"", MD_DIRECTORY_BROWSING, METADATA_INHERIT, IIS_MD_UT_FILE, DWORD_METADATA, (LPVOID)((DWORD_PTR)i)); ExitOnFailure(hr, "Failed to set directory browsing for WebDir"); // get the security information for this web if (pswd->fHasProperties) { ScaWriteWebDirProperties(piMetabase, pswd->wzWebDirRoot, &pswd->swp); ExitOnFailure(hr, "Failed to write properties for WebDir"); } // get the application information for this web directory if (pswd->fHasApplication) { hr = ScaWriteWebApplication(piMetabase, pswd->wzWebDirRoot, &pswd->swapp, psapList); ExitOnFailure(hr, "Failed to write application for WebDir"); } } pswd = pswd->pswdNext; } LExit: return hr; }
HRESULT ScaFiltersInstall(IMSAdminBase* piMetabase, SCA_FILTER* psfList) { HRESULT hr = S_OK; SCA_FILTER* psf = psfList; while (psf) { if (WcaIsInstalling(psf->isInstalled, psf->isAction)) { hr = ScaCreateMetabaseKey(piMetabase, psf->wzFilterRoot, psf->wzKey); ExitOnFailure1(hr, "Failed to create key for filter '%S'", psf->wzKey); hr = ScaWriteMetabaseValue(piMetabase, psf->wzFilterRoot, psf->wzKey, MD_KEY_TYPE, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, STRING_METADATA, (LPVOID)L"IIsFilter"); ExitOnFailure1(hr, "Failed to write key type for filter '%S'", psf->wzKey); // filter path hr = ScaWriteMetabaseValue(piMetabase, psf->wzFilterRoot, psf->wzKey, MD_FILTER_IMAGE_PATH, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, STRING_METADATA, (LPVOID)psf->wzPath); ExitOnFailure1(hr, "Failed to write Path for filter '%S'", psf->wzKey); // filter description hr = ScaWriteMetabaseValue(piMetabase, psf->wzFilterRoot, psf->wzKey, MD_FILTER_DESCRIPTION, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, STRING_METADATA, (LPVOID)psf->wzDescription); ExitOnFailure1(hr, "Failed to write Description for filter ''%S", psf->wzKey); // filter flags if (MSI_NULL_INTEGER != psf->iFlags) { hr = ScaWriteMetabaseValue(piMetabase, psf->wzFilterRoot, psf->wzKey, MD_FILTER_FLAGS, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, DWORD_METADATA, (LPVOID)((DWORD_PTR)psf->iFlags)); ExitOnFailure1(hr, "Failed to write Flags for filter '%S'", psf->wzKey); } // filter load order if (MSI_NULL_INTEGER != psf->iLoadOrder) { hr = ScaAddFilterToLoadOrder(piMetabase, psf->wzFilterRoot, psf->wzKey, psf->iLoadOrder); ExitOnFailure1(hr, "Failed to add filter '%S' to load order", psf->wzKey); } } psf = psf->psfNext; } LExit: return hr; }
HRESULT ScaVirtualDirsInstall( __in IMSAdminBase* piMetabase, __in SCA_VDIR* psvdList, __in SCA_APPPOOL * psapList ) { Assert(piMetabase); HRESULT hr = S_OK; SCA_VDIR* psvd = psvdList; int i; while (psvd) { // On reinstall, we have to uninstall the old application, otherwise a duplicate will be created if (WcaIsReInstalling(psvd->isInstalled, psvd->isAction)) { if (psvd->fHasApplication) { hr = ScaDeleteApp(piMetabase, psvd->wzVDirRoot); ExitOnFailure(hr, "Failed to remove application for WebVDir as part of a reinstall"); } } if (WcaIsInstalling(psvd->isInstalled, psvd->isAction)) { hr = ScaCreateMetabaseKey(piMetabase, psvd->wzVDirRoot, L""); ExitOnFailure(hr, "Failed to create key for VirtualDir"); hr = ScaWriteMetabaseValue(piMetabase, psvd->wzVDirRoot, L"", MD_KEY_TYPE, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, STRING_METADATA, (LPVOID)L"IIsWebVirtualDir"); ExitOnFailure(hr, "Failed to write key type for for VirtualDir"); i = 0x4000003e; // 1073741886; // default directory browsing rights hr = ScaWriteMetabaseValue(piMetabase, psvd->wzVDirRoot, L"", MD_DIRECTORY_BROWSING, METADATA_INHERIT, IIS_MD_UT_FILE, DWORD_METADATA, (LPVOID)((DWORD_PTR)i)); ExitOnFailure(hr, "Failed to set directory browsing for VirtualDir"); hr = ScaWriteMetabaseValue(piMetabase, psvd->wzVDirRoot, L"", MD_VR_PATH, METADATA_INHERIT, IIS_MD_UT_FILE, STRING_METADATA, (LPVOID)psvd->wzDirectory); ExitOnFailure(hr, "Failed to write Directory for VirtualDir"); if (psvd->fHasProperties) { ScaWriteWebDirProperties(piMetabase, psvd->wzVDirRoot, &psvd->swp); ExitOnFailure(hr, "Failed to write directory properties for VirtualDir"); } if (psvd->fHasApplication) { hr = ScaWriteWebApplication(piMetabase, psvd->wzVDirRoot, &psvd->swapp, psapList); ExitOnFailure(hr, "Failed to write application for VirtualDir"); } if (psvd->psmm) { hr = ScaWriteMimeMap(piMetabase, psvd->wzVDirRoot, psvd->psmm); ExitOnFailure(hr, "Failed to write mimemap for VirtualDir"); } if (psvd->pshh) { hr = ScaWriteHttpHeader(piMetabase, psvd->wzVDirRoot, psvd->pshh); ExitOnFailure(hr, "Failed to write custom HTTP headers for VirtualDir"); } if (psvd->pswe) { hr = ScaWriteWebError(piMetabase, weptVDir, psvd->wzVDirRoot, psvd->pswe); ExitOnFailure(hr, "Failed to write custom web errors for VirtualDir"); } } psvd = psvd->psvdNext; } LExit: return hr; }