// // Author: DebiM // Date: March 97 // File: csdrtad.cxx // // Class Store DRTs // // This source file contains DRTs for // CClassContainer::IClassAdmin // // // It tests the following Class Store functionality // // Admin Interfaces // // //--------------------------------------------------------------------- #include "csdrt.hxx" extern BOOL fVerbose; extern BOOL fMultiStore; extern IClassAdmin *pIClassAdmin; extern IClassAdmin *pIClassAdmin2; extern IClassAccess *pIClassAccess; Sname TestFileExt1, TestFileExt2, TestFileExt4, TestProgId1, TestClassDesc1; Sname TestOtherProgID1, TestOtherProgID2; Sname TestMimeType2, TestClassDesc2; Sname TestProgId3; Sname TestVendor; Sname TestPackName1, TestProduct1, TestPackagePath1; Sname TestPackName2, TestPackagePath2; Sname TestPackName4, TestPackagePath4, TestProduct4; Sname TestPackName5, TestPackName6, TestPackName7, TestProduct2; Sname RefreshPackName3; Sname TestFailFileExt1, TestFailMimeType1, TestFailProgId1; Sname TestHelpUrl1, TestHelpUrl2, TestHelpUrl3; Sname TestAppCat1, TestAppCat2; Sname RenTestPackName2; LPOLESTR ConstTestFileExt1 = L".ex1-"; LPOLESTR ConstTestFileExt2 = L".ex2-"; LPOLESTR ConstTestProgId1 = L"Really Long Long Long ProgId1-"; LPOLESTR ConstTestMimeType2 = L"MimeType2-"; LPOLESTR ConstTestProgId3 = L"ProgId3-"; LPOLESTR ConstTestFileExt4 = L".ex4-"; LPOLESTR ConstTestPackName1 = L"CSDRT Pkg1-DRW-PUBL-VIS-AUTO(CLSID1-Ext4-Cat1)-"; LPOLESTR ConstTestProduct1 = L"CS DRT Product1-"; LPOLESTR ConstTestPackagePath1 = L"p1-"; LPOLESTR ConstTestPackName2 = L"Wrong Pkg2-DRW-PUBL-HIDDEN-AUTO(CLSID1-Cat2)-"; LPOLESTR ConstRenTestPackName2 = L"CSDRT Pkg2-DRW-PUBL-HIDDEN-AUTO(CLSID1-Cat2)-"; LPOLESTR ConstTestPackagePath2 = L"p2-"; LPOLESTR ConstTestOtherProgID1 = L"Really Long Long Long OtherProgId1-"; LPOLESTR ConstTestOtherProgID2 = L"OtherProgId2-"; LPOLESTR ConstTestPackName4 = L"CSDRT Pkg3-DRW-ASSG-VIS-AUTO(Ext4-Cat2)-"; LPOLESTR ConstTestPackagePath4 = L"p4-"; LPOLESTR ConstTestProduct2 = L"CS DRT Product2-"; LPOLESTR ConstTestProduct4 = L"CS DRT Product4-"; LPOLESTR ConstTestPackName5 = L"CS DRT pkg 5(Tlb2)-"; LPOLESTR ConstTestPackName6 = L"CS DRT pkg 6 Cls 3 4-"; LPOLESTR ConstTestPackName7 = L"CS DRT Tlb 7(CLS4)-"; LPOLESTR ConstRefreshPackName3 = L"CS DRT Refresh Package 3(Clsid3)-"; LPOLESTR ConstTestFailFileExt1 = L"fai"; LPOLESTR ConstTestFailMimeType1 = L"FailMimeType"; LPOLESTR ConstTestFailProgId1 = L"Expected Failure Prog ID"; LPOLESTR ConstTestHelpUrl = L"http://junk"; LPOLESTR ConstTestAppCat1 = L"Test App Cat Id-1"; LPOLESTR ConstTestAppCat2 = L"Test App Cat Id-2"; //-------------- // {Fa11ed00-c151-d000-0000-000000000000} GUID TestFailClsid1 = { 0xfa11ed00, 0xc151, 0xd000, { 0x00, 0x00, 0x0, 0x00, 0x00, 0x0, 0x00, 0x00 } }; //--------------- DWORD gData1 = 0; GUID TestClsid1; GUID TestClsid2; GUID TestClsid3; GUID TestClsid4; GUID TestClsid5; GUID TestClsid6; GUID TestIid1; GUID TestIid2; GUID TestTlbId1; GUID TestAppCatId1, TestAppCatId2; PACKAGEDISPINFO PackageDisp[3]; void CreateGuid(GUID *pGuid) { CoCreateGuid(pGuid); pGuid->Data2 = 0xabcd; gData1 = pGuid->Data1; } void ReleaseObj(PACKAGEDISPINFO obj) { ReleasePackageInfo(&obj); } void CreateUnique (WCHAR *VName, WCHAR *ConstName) { swprintf (VName, L"%s%x", ConstName, gData1); } void InitTempNames() { // // Create all GUIDs // CreateGuid(&TestClsid1); CreateGuid(&TestClsid2); CreateGuid(&TestClsid3); CreateGuid(&TestIid1); CreateGuid(&TestIid2); CreateGuid(&TestTlbId1); CreateGuid(&TestAppCatId1); CreateGuid(&TestAppCatId2); if (fMultiStore) { CreateGuid(&TestClsid4); CreateGuid(&TestClsid5); CreateGuid(&TestClsid6); } // // Create Unique Package Names, File Ext, ProgID // CreateUnique (TestFileExt1, ConstTestFileExt1); CreateUnique (TestFileExt2, ConstTestFileExt2); CreateUnique (TestProgId1, ConstTestProgId1); CreateUnique (TestOtherProgID1, ConstTestOtherProgID1); CreateUnique (TestOtherProgID2, ConstTestOtherProgID2); CreateUnique (TestMimeType2, ConstTestMimeType2); CreateUnique (TestProgId3, ConstTestProgId3); CreateUnique (TestFileExt4, ConstTestFileExt4); CreateUnique (TestPackName1, ConstTestPackName1); CreateUnique (TestProduct1, ConstTestProduct1); CreateUnique (TestPackagePath1, ConstTestPackagePath1); CreateUnique (TestPackName2, ConstTestPackName2); CreateUnique (RenTestPackName2, ConstRenTestPackName2); CreateUnique (TestPackagePath2, ConstTestPackagePath2); CreateUnique (TestProduct2, ConstTestProduct2); CreateUnique (RefreshPackName3, ConstRefreshPackName3); CreateUnique (TestPackName4, ConstTestPackName4); CreateUnique (TestPackagePath4, ConstTestPackagePath4); CreateUnique (TestProduct4, ConstTestProduct4); CreateUnique (TestPackName5, ConstTestPackName5); CreateUnique (TestPackName6, ConstTestPackName6); CreateUnique (TestPackName7, ConstTestPackName7); CreateUnique (TestFailFileExt1, ConstTestFailFileExt1); CreateUnique (TestFailProgId1, ConstTestFailProgId1); CreateUnique(TestHelpUrl1, ConstTestHelpUrl); CreateUnique(TestHelpUrl2, ConstTestHelpUrl); CreateUnique(TestHelpUrl3, ConstTestHelpUrl); CreateUnique(TestAppCat1, ConstTestAppCat1); CreateUnique(TestAppCat2, ConstTestAppCat2); } HRESULT AddRandomPackage(PACKAGEDETAIL &PackageDetail, int i) { HRESULT hr = S_OK; WCHAR szPackageName[_MAX_PATH]; // activation flag to be set outside. wsprintf(szPackageName, L"LogonTestPackage-%d", i); PackageDetail.pInstallInfo->PathType = DrwFilePath; PackageDetail.pActInfo->cShellFileExt = 2; PackageDetail.pActInfo->prgShellFileExt = (LPOLESTR *)CoTaskMemAlloc(sizeof(LPOLESTR)*2); PackageDetail.pActInfo->prgShellFileExt[0] = TestFileExt4; PackageDetail.pActInfo->prgShellFileExt[1] = TestFileExt1; PackageDetail.pActInfo->prgPriority = (UINT *)CoTaskMemAlloc(sizeof(UINT)*2); PackageDetail.pActInfo->prgPriority[0] = 1; PackageDetail.pActInfo->prgPriority[1] = 2; PackageDetail.pActInfo->cInterfaces = 1; PackageDetail.pActInfo->prgInterfaceId = (IID *)CoTaskMemAlloc(sizeof(IID)); PackageDetail.pActInfo->prgInterfaceId[0] = TestIid2; PackageDetail.pActInfo->cTypeLib = 1; PackageDetail.pActInfo->prgTlbId = (GUID *)CoTaskMemAlloc(sizeof(GUID)); PackageDetail.pActInfo->prgTlbId[0] = TestTlbId1; PackageDetail.pPlatformInfo->cPlatforms = 1; PackageDetail.pPlatformInfo->prgPlatform = (CSPLATFORM *)CoTaskMemAlloc(sizeof(CSPLATFORM)); GetDefaultPlatform(&PackageDetail.pPlatformInfo->prgPlatform[0]); PackageDetail.pPlatformInfo->cLocales = 2; PackageDetail.pPlatformInfo->prgLocale = (LCID *)CoTaskMemAlloc(sizeof(LCID)*2); PackageDetail.pPlatformInfo->prgLocale[0] = 0x409; PackageDetail.pPlatformInfo->prgLocale[1] = 0x410; PackageDetail.pInstallInfo->pszScriptPath = TestPackagePath1; PackageDetail.pInstallInfo->pszSetupCommand = TestPackagePath1; PackageDetail.pInstallInfo->pszUrl = TestHelpUrl1; PackageDetail.cSources = 1; PackageDetail.pszSourceList = (LPOLESTR *)CoTaskMemAlloc(sizeof(LPOLESTR)); PackageDetail.pszSourceList[0] = TestPackagePath1; PackageDetail.cCategories = 1; PackageDetail.rpCategory = (GUID *)CoTaskMemAlloc(sizeof(GUID)); PackageDetail.rpCategory[0] = TestAppCatId1; #if 0 PackageDetail.pInstallInfo->cScriptLen = 160 + (GetTickCount() % 11783); PackageDetail.pInstallInfo->pScript = (BYTE *) CoTaskMemAlloc (PackageDetail.pInstallInfo->cScriptLen); for (UINT i=0; i < PackageDetail.pInstallInfo->cScriptLen; i++) { PackageDetail.pInstallInfo->pScript[i] = i%128; } #endif hr = pIClassAdmin->AddPackage(szPackageName, &PackageDetail); if (!SUCCEEDED(hr)) { printf ("ERROR! AddPackage() returned 0x%x.\n", hr); return hr; } return hr; } HRESULT AddPackage1(PACKAGEDETAIL &PackageDetail) { HRESULT hr = S_OK; PackageDetail.pActInfo->cShellFileExt = 2; PackageDetail.pActInfo->prgShellFileExt = (LPOLESTR *)CoTaskMemAlloc(sizeof(LPOLESTR)*2); PackageDetail.pActInfo->prgShellFileExt[0] = TestFileExt4; PackageDetail.pActInfo->prgShellFileExt[1] = TestFileExt1; PackageDetail.pActInfo->prgPriority = (UINT *)CoTaskMemAlloc(sizeof(UINT)*2); PackageDetail.pActInfo->prgPriority[0] = 1; PackageDetail.pActInfo->prgPriority[1] = 2; PackageDetail.pActInfo->cInterfaces = 1; PackageDetail.pActInfo->prgInterfaceId = (IID *)CoTaskMemAlloc(sizeof(IID)); PackageDetail.pActInfo->prgInterfaceId[0] = TestIid2; PackageDetail.pActInfo->cTypeLib = 1; PackageDetail.pActInfo->prgTlbId = (GUID *)CoTaskMemAlloc(sizeof(GUID)); PackageDetail.pActInfo->prgTlbId[0] = TestTlbId1; PackageDetail.pPlatformInfo->cPlatforms = 1; PackageDetail.pPlatformInfo->prgPlatform = (CSPLATFORM *)CoTaskMemAlloc(sizeof(CSPLATFORM)); GetDefaultPlatform(&PackageDetail.pPlatformInfo->prgPlatform[0]); PackageDetail.pPlatformInfo->cLocales = 2; PackageDetail.pPlatformInfo->prgLocale = (LCID *)CoTaskMemAlloc(sizeof(LCID)*2); PackageDetail.pPlatformInfo->prgLocale[0] = 0x409; PackageDetail.pPlatformInfo->prgLocale[1] = 0x410; PackageDetail.pInstallInfo->dwActFlags = ACTFLG_Published + // Published ACTFLG_UserInstall + // Visible ACTFLG_OnDemandInstall + // AutoInstall 256; // Hack. Script Present PackageDetail.pInstallInfo->PathType = DrwFilePath; PackageDetail.pInstallInfo->pszScriptPath = TestPackagePath1; // PackageDetail.pInstallInfo->pszSetupCommand = TestPackagePath1; PackageDetail.pInstallInfo->Mvipc = TestClsid1; PackageDetail.pInstallInfo->ProductCode = TestClsid1; PackageDetail.pInstallInfo->pszUrl = TestHelpUrl1; PackageDetail.pInstallInfo->InstallUiLevel = 42; PackageDetail.pInstallInfo->cUpgrades = 1; PackageDetail.pInstallInfo->prgUpgradeScript = (LPOLESTR *)CoTaskMemAlloc(sizeof(LPOLESTR)); PackageDetail.pInstallInfo->prgUpgradeScript[0] = TestPackagePath1; PackageDetail.pInstallInfo->prgUpgradeFlag = (DWORD *)CoTaskMemAlloc(sizeof(DWORD)); PackageDetail.pInstallInfo->prgUpgradeFlag[0] = UPGFLG_NoUninstall; PackageDetail.pInstallInfo->cScriptLen = 0; //160 + (GetTickCount() % 11783); /* PackageDetail.pInstallInfo->pScript = (BYTE *) CoTaskMemAlloc (PackageDetail.pInstallInfo->cScriptLen); for (UINT i=0; i < PackageDetail.pInstallInfo->cScriptLen; i++) { PackageDetail.pInstallInfo->pScript[i] = i%128; } */ PackageDetail.cSources = 1; PackageDetail.pszSourceList = (LPOLESTR *)CoTaskMemAlloc(sizeof(LPOLESTR)); PackageDetail.pszSourceList[0] = TestPackagePath1; PackageDetail.cCategories = 1; PackageDetail.rpCategory = (GUID *)CoTaskMemAlloc(sizeof(GUID)); PackageDetail.rpCategory[0] = TestAppCatId1; hr = pIClassAdmin->AddPackage(TestPackName1, &PackageDetail); if (!SUCCEEDED(hr)) { printf ("ERROR! NewPackage() returned 0x%x.\n", hr); return hr; } //CoTaskMemFree(PackageDetail.pInstallInfo->pScript); //PackageDetail.pInstallInfo->pScript = NULL; return hr; } HRESULT AddPackage2(PACKAGEDETAIL &PackageDetail) { HRESULT hr = S_OK; PackageDetail.pInstallInfo->dwActFlags = ACTFLG_Published + // Published ACTFLG_UserInstall + // Visible ACTFLG_OnDemandInstall; // AutoInstall PackageDetail.pInstallInfo->PathType = DrwFilePath; PackageDetail.pActInfo->cInterfaces = 1; PackageDetail.pActInfo->prgInterfaceId = (IID *)CoTaskMemAlloc(sizeof(IID)); PackageDetail.pActInfo->prgInterfaceId[0] = TestIid1; PackageDetail.pActInfo->cTypeLib = 1; PackageDetail.pActInfo->prgTlbId = (GUID *)CoTaskMemAlloc(sizeof(GUID)); PackageDetail.pActInfo->prgTlbId[0] = TestTlbId1; PackageDetail.pPlatformInfo->cPlatforms = 1; PackageDetail.pPlatformInfo->prgPlatform = (CSPLATFORM *)CoTaskMemAlloc(sizeof(CSPLATFORM)); GetDefaultPlatform(&PackageDetail.pPlatformInfo->prgPlatform[0]); PackageDetail.pPlatformInfo->cLocales = 2; PackageDetail.pPlatformInfo->prgLocale = (LCID *)CoTaskMemAlloc(sizeof(LCID)*2); PackageDetail.pPlatformInfo->prgLocale[0] = 0x409; PackageDetail.pPlatformInfo->prgLocale[1] = 0x410; PackageDetail.pInstallInfo->pszScriptPath = TestPackagePath2; PackageDetail.pInstallInfo->pszSetupCommand = TestPackagePath2; PackageDetail.pInstallInfo->pszUrl = TestHelpUrl2; PackageDetail.cSources = 1; PackageDetail.pszSourceList = (LPOLESTR *)CoTaskMemAlloc(sizeof(LPOLESTR)); PackageDetail.pszSourceList[0] = TestPackagePath2; PackageDetail.cCategories = 1; PackageDetail.rpCategory = (GUID *)CoTaskMemAlloc(sizeof(GUID)); PackageDetail.rpCategory[0] = TestAppCatId2; // smaller scripts for this package #if 0 PackageDetail.pInstallInfo->cScriptLen = (GetTickCount() % 3423); PackageDetail.pInstallInfo->pScript = (BYTE *) CoTaskMemAlloc (PackageDetail.pInstallInfo->cScriptLen); for (UINT i=0; i < PackageDetail.pInstallInfo->cScriptLen; i++) { PackageDetail.pInstallInfo->pScript[i] = i%128; } #endif hr = pIClassAdmin->AddPackage(TestPackName2, &PackageDetail); if (!SUCCEEDED(hr)) { printf ("ERROR! NewPackage() returned 0x%x.\n", hr); return hr; } return hr; } HRESULT AddPackage3(PACKAGEDETAIL &PackageDetail) { HRESULT hr = S_OK; PackageDetail.pInstallInfo->dwActFlags = ACTFLG_Assigned + // Assigned ACTFLG_UserInstall + // Visible ACTFLG_OnDemandInstall; // AutoInstall PackageDetail.pInstallInfo->PathType = DrwFilePath; PackageDetail.pActInfo->cShellFileExt = 1; PackageDetail.pActInfo->prgShellFileExt = (LPOLESTR *)CoTaskMemAlloc(sizeof(LPOLESTR)*1); PackageDetail.pActInfo->prgShellFileExt[0] = TestFileExt4; PackageDetail.pActInfo->prgPriority = (UINT *)CoTaskMemAlloc(sizeof(UINT)); PackageDetail.pActInfo->prgPriority[0] = 1; PackageDetail.pActInfo->cInterfaces = 1; PackageDetail.pActInfo->prgInterfaceId = (IID *)CoTaskMemAlloc(sizeof(IID)); PackageDetail.pActInfo->prgInterfaceId[0] = TestIid2; PackageDetail.pActInfo->cTypeLib = 1; PackageDetail.pActInfo->prgTlbId = (GUID *)CoTaskMemAlloc(sizeof(GUID)); PackageDetail.pActInfo->prgTlbId[0] = TestTlbId1; PackageDetail.pPlatformInfo->cPlatforms = 1; PackageDetail.pPlatformInfo->prgPlatform = (CSPLATFORM *)CoTaskMemAlloc(sizeof(CSPLATFORM)); GetDefaultPlatform(&PackageDetail.pPlatformInfo->prgPlatform[0]); PackageDetail.pPlatformInfo->cLocales = 2; PackageDetail.pPlatformInfo->prgLocale = (LCID *)CoTaskMemAlloc(sizeof(LCID)*2); PackageDetail.pPlatformInfo->prgLocale[0] = 0x409; PackageDetail.pPlatformInfo->prgLocale[1] = 0x410; PackageDetail.pInstallInfo->pszScriptPath = TestPackagePath4; PackageDetail.pInstallInfo->pszSetupCommand = TestPackagePath4; PackageDetail.pInstallInfo->pszUrl = TestHelpUrl3; PackageDetail.cSources = 1; PackageDetail.pszSourceList = (LPOLESTR *)CoTaskMemAlloc(sizeof(LPOLESTR)); PackageDetail.pszSourceList[0] = TestPackagePath4; PackageDetail.cCategories = 1; PackageDetail.rpCategory = (GUID *)CoTaskMemAlloc(sizeof(GUID)); PackageDetail.rpCategory[0] = TestAppCatId2; #if 0 // smaller scripts for this package PackageDetail.pInstallInfo->cScriptLen = (GetTickCount() % 26423); PackageDetail.pInstallInfo->pScript = (BYTE *) CoTaskMemAlloc (PackageDetail.pInstallInfo->cScriptLen); for (UINT i=0; i < PackageDetail.pInstallInfo->cScriptLen; i++) { PackageDetail.pInstallInfo->pScript[i] = i%128; } #endif hr = pIClassAdmin->AddPackage(TestPackName4, &PackageDetail); if (!SUCCEEDED(hr)) { printf ("ERROR! NewPackage() returned 0x%x.\n", hr); return hr; } return hr; } void VerbosePrintObj(PACKAGEDISPINFO If) { VerbosePrint("Package Name %S\n", If.pszPackageName); } HRESULT GetPackageStructures(LPOLESTR PackName, PACKAGEDETAIL PackageDetail) { PACKAGEDETAIL PackageDetailFetched; PLATFORMINFO PlatformInfo; HRESULT hr = S_OK; hr = pIClassAdmin->GetPackageDetails(PackName, &PackageDetailFetched); if (!SUCCEEDED(hr)) { printf ("ERROR! GetPackageDetails() returned 0x%x.\n", hr); return hr; } if (!(Compare(PackageDetailFetched, PackageDetail))) { hr = E_FAIL; } ReleasePackageDetail(&PackageDetailFetched); return hr; } CLASSDETAIL ClassDetail[3]; HRESULT InitPackages(ULONG *pcPkgCount, PACKAGEDETAIL &PackageDetail1, PACKAGEDETAIL &PackageDetail2, PACKAGEDETAIL &PackageDetail3) { HRESULT hr = S_OK; memset (&ClassDetail[0], NULL, sizeof (CLASSDETAIL)); memcpy (&ClassDetail[0].Clsid, &TestClsid1, sizeof (GUID)); ClassDetail[0].cProgId = 3; ClassDetail[0].prgProgId = (LPWSTR *) CoTaskMemAlloc(3 * sizeof (LPWSTR)); ClassDetail[0].prgProgId[0] = TestProgId1; ClassDetail[0].prgProgId[1] = TestOtherProgID1; ClassDetail[0].prgProgId[2] = TestOtherProgID2; memset (&ClassDetail[1], NULL, sizeof (CLASSDETAIL)); memcpy (&ClassDetail[1].Clsid, &TestClsid2, sizeof (GUID)); memcpy (&ClassDetail[1].TreatAs, &TestClsid3, sizeof (GUID)); memset (&ClassDetail[2], NULL, sizeof (CLASSDETAIL)); memcpy (&ClassDetail[2].Clsid, &TestClsid3, sizeof (GUID)); ClassDetail[2].cProgId = 1; ClassDetail[2].prgProgId = (LPWSTR *) CoTaskMemAlloc(1 * sizeof (LPWSTR)); ClassDetail[2].prgProgId[0] = TestProgId3; // // Add Package 1 // PackageDetail1.pActInfo->cClasses = 2; PackageDetail1.pActInfo->pClasses = (CLASSDETAIL *)CoTaskMemAlloc(sizeof(CLASSDETAIL)*2); PackageDetail1.pActInfo->pClasses[0] = ClassDetail[0]; PackageDetail1.pActInfo->pClasses[1] = ClassDetail[1]; hr = AddPackage1(PackageDetail1); if (SUCCEEDED(hr)) { (*pcPkgCount)++; } // // Add Package 2 // PackageDetail2.pActInfo->cClasses = 2; PackageDetail2.pActInfo->pClasses = (CLASSDETAIL *)CoTaskMemAlloc(sizeof(CLASSDETAIL)*2); PackageDetail2.pActInfo->pClasses[0] = ClassDetail[0]; PackageDetail2.pActInfo->pClasses[1] = ClassDetail[2]; hr = AddPackage2(PackageDetail2); if (SUCCEEDED(hr)) { (*pcPkgCount)++; } // // Add Package 3 // hr = AddPackage3(PackageDetail3); if (SUCCEEDED(hr)) { (*pcPkgCount)++; } // // Test rename // Rename Pkg2 // hr = pIClassAdmin->ChangePackageProperties(TestPackName2, RenTestPackName2, NULL, NULL, NULL, NULL); if (!SUCCEEDED(hr)) { printf ("ERROR! ChangePackageProperties(rename) returned 0x%x.\n", hr); return hr; } // // Test changing properties - flags // DWORD dwActFlags = ACTFLG_Published + ACTFLG_OnDemandInstall; // Not visible hr = pIClassAdmin->ChangePackageProperties(RenTestPackName2, NULL, &dwActFlags, NULL, NULL, NULL); if (!SUCCEEDED(hr)) { printf ("ERROR! ChangePackageProperties(flags) returned 0x%x.\n", hr); return hr; } PackageDetail2.pInstallInfo->dwActFlags = dwActFlags; // // Test changing properties - scriptpath // hr = pIClassAdmin->ChangePackageProperties(RenTestPackName2, NULL, NULL, NULL, L"foo.bar", NULL); if (!SUCCEEDED(hr)) { printf ("ERROR! ChangePackageProperties(ScriptPath) returned 0x%x.\n", hr); return hr; } PackageDetail2.pInstallInfo->pszScriptPath = L"foo.bar"; // // Test changing fileext priority // hr = pIClassAdmin->SetPriorityByFileExt(TestPackName1, TestFileExt4, 12); if (!SUCCEEDED(hr)) { printf ("ERROR! SetPriorityByFileExt() returned 0x%x.\n", hr); return hr; } PackageDetail1.pActInfo->prgPriority[0] = 12; // we know that the corresp ext in in the first place. return hr; } HRESULT DoAdminEnumTests() { HRESULT hr; IEnumPackage *pEnum = NULL; VerbosePrint("Testing Enumerator with file ext %S\n", TestFileExt4); hr = pIClassAdmin->EnumPackages(TestFileExt4, NULL, 0, NULL, NULL, &pEnum); if (!SUCCEEDED(hr)) { printf ("ERROR! EnumPackages() returned 0x%x.\n", hr); return hr; } EnumTests(pEnum, 2, NULL, PackageDisp, 3, TRUE); if (!SUCCEEDED(hr)) { return hr; } hr = pIClassAdmin->EnumPackages(NULL, &TestAppCatId2, 0, NULL, NULL, &pEnum); if (!SUCCEEDED(hr)) { printf ("ERROR! EnumPackages() returned 0x%x.\n", hr); return hr; } hr = EnumTests(pEnum, 2, NULL, PackageDisp, 3, TRUE); if (!SUCCEEDED(hr)) { return hr; } return hr; } PACKAGEDETAIL PackageDetail1, PackageDetail2, PackageDetail3, PackageDetail4; HRESULT DoAdminTest (ULONG *pcPkgCount) { HRESULT hr = S_OK; APPCATEGORYINFO AppCategory1, AppCategory2; APPCATEGORYINFOLIST RecdAppCategoryInfoList; memset(&PackageDetail1, NULL, sizeof(PACKAGEDETAIL)); memset(&PackageDetail2, NULL, sizeof(PACKAGEDETAIL)); memset(&PackageDetail3, NULL, sizeof(PACKAGEDETAIL)); PackageDetail1.pInstallInfo = (INSTALLINFO *) CoTaskMemAlloc (sizeof(INSTALLINFO)); memset (PackageDetail1.pInstallInfo, 0, sizeof(INSTALLINFO)); PackageDetail1.pPlatformInfo = (PLATFORMINFO *) CoTaskMemAlloc (sizeof(PLATFORMINFO)); memset (PackageDetail1.pPlatformInfo, 0, sizeof(PLATFORMINFO)); PackageDetail1.pActInfo = (ACTIVATIONINFO *) CoTaskMemAlloc (sizeof(ACTIVATIONINFO)); memset (PackageDetail1.pActInfo, 0, sizeof(ACTIVATIONINFO)); PackageDetail2.pInstallInfo = (INSTALLINFO *) CoTaskMemAlloc (sizeof(INSTALLINFO)); memset (PackageDetail2.pInstallInfo, 0, sizeof(INSTALLINFO)); PackageDetail2.pPlatformInfo = (PLATFORMINFO *) CoTaskMemAlloc (sizeof(PLATFORMINFO)); memset (PackageDetail2.pPlatformInfo, 0, sizeof(PLATFORMINFO)); PackageDetail2.pActInfo = (ACTIVATIONINFO *) CoTaskMemAlloc (sizeof(ACTIVATIONINFO)); memset (PackageDetail2.pActInfo, 0, sizeof(ACTIVATIONINFO)); PackageDetail3.pInstallInfo = (INSTALLINFO *) CoTaskMemAlloc (sizeof(INSTALLINFO)); memset (PackageDetail3.pInstallInfo, 0, sizeof(INSTALLINFO)); PackageDetail3.pPlatformInfo = (PLATFORMINFO *) CoTaskMemAlloc (sizeof(PLATFORMINFO)); memset (PackageDetail3.pPlatformInfo, 0, sizeof(PLATFORMINFO)); PackageDetail3.pActInfo = (ACTIVATIONINFO *) CoTaskMemAlloc (sizeof(ACTIVATIONINFO)); memset (PackageDetail3.pActInfo, 0, sizeof(ACTIVATIONINFO)); *pcPkgCount = 0; memset((void *)PackageDisp, 0, sizeof(PACKAGEDISPINFO)*3); hr = InitPackages(pcPkgCount, PackageDetail1, PackageDetail2, PackageDetail3); if (FAILED(hr)) return hr; if (pIClassAdmin2 != NULL) { // // If MultiStore tests in progress } hr = GetPackageStructures(TestPackName1, PackageDetail1); if (!SUCCEEDED(hr)) { return hr; } hr = GetPackageStructures(RenTestPackName2, PackageDetail2); if (!SUCCEEDED(hr)) { // // Properties in the package detail structure has been updated. return hr; } hr = GetPackageStructures(TestPackName4, PackageDetail3); if (!SUCCEEDED(hr)) { return hr; } PackageDisp[0].pszPackageName = TestPackName1; PackageDisp[0].dwActFlags = PackageDetail1.pInstallInfo->dwActFlags; PackageDisp[0].PathType = PackageDetail1.pInstallInfo->PathType; PackageDisp[0].pszScriptPath = PackageDetail1.pInstallInfo->pszScriptPath; PackageDisp[0].cScriptLen = PackageDetail1.pInstallInfo->cScriptLen; PackageDisp[0].Usn = PackageDetail1.pInstallInfo->Usn; PackageDisp[0].dwVersionHi = PackageDetail1.pInstallInfo->dwVersionHi; PackageDisp[0].dwVersionLo = PackageDetail1.pInstallInfo->dwVersionLo; PackageDisp[0].cUpgrades = PackageDetail1.pInstallInfo->cUpgrades; PackageDisp[0].prgUpgradeScript = PackageDetail1.pInstallInfo->prgUpgradeScript; PackageDisp[0].prgUpgradeFlag = PackageDetail1.pInstallInfo->prgUpgradeFlag; PackageDisp[1].pszPackageName = RenTestPackName2; PackageDisp[1].dwActFlags = PackageDetail2.pInstallInfo->dwActFlags; PackageDisp[1].PathType = PackageDetail2.pInstallInfo->PathType; PackageDisp[1].pszScriptPath = PackageDetail2.pInstallInfo->pszScriptPath; PackageDisp[1].cScriptLen = PackageDetail2.pInstallInfo->cScriptLen; PackageDisp[1].Usn = PackageDetail2.pInstallInfo->Usn; PackageDisp[1].dwVersionHi = PackageDetail2.pInstallInfo->dwVersionHi; PackageDisp[1].dwVersionLo = PackageDetail2.pInstallInfo->dwVersionLo; PackageDisp[1].cUpgrades = PackageDetail2.pInstallInfo->cUpgrades; PackageDisp[1].prgUpgradeScript = PackageDetail2.pInstallInfo->prgUpgradeScript; PackageDisp[1].prgUpgradeFlag = PackageDetail2.pInstallInfo->prgUpgradeFlag; PackageDisp[2].pszPackageName = TestPackName4; PackageDisp[2].dwActFlags = PackageDetail3.pInstallInfo->dwActFlags; PackageDisp[2].PathType = PackageDetail3.pInstallInfo->PathType; PackageDisp[2].pszScriptPath = PackageDetail3.pInstallInfo->pszScriptPath; PackageDisp[2].cScriptLen = PackageDetail3.pInstallInfo->cScriptLen; PackageDisp[2].Usn = PackageDetail3.pInstallInfo->Usn; PackageDisp[2].dwVersionHi = PackageDetail3.pInstallInfo->dwVersionHi; PackageDisp[2].dwVersionLo = PackageDetail3.pInstallInfo->dwVersionLo; PackageDisp[2].cUpgrades = PackageDetail3.pInstallInfo->cUpgrades; PackageDisp[2].prgUpgradeScript = PackageDetail3.pInstallInfo->prgUpgradeScript; PackageDisp[2].prgUpgradeFlag = PackageDetail3.pInstallInfo->prgUpgradeFlag; hr = DoAdminEnumTests(); if (!SUCCEEDED(hr)) { return hr; } memset(&AppCategory1, 0, sizeof(APPCATEGORYINFO)); memset(&AppCategory2, 0, sizeof(APPCATEGORYINFO)); AppCategory1.Locale = AppCategory2.Locale = 0x409; AppCategory1.pszDescription = TestAppCat1; AppCategory2.pszDescription = TestAppCat2; AppCategory1.AppCategoryId = TestAppCatId1; AppCategory2.AppCategoryId = TestAppCatId2; hr = pIClassAdmin->RegisterAppCategory(&AppCategory1); if (!SUCCEEDED(hr)) { printf("RegisterAppCategory 1 returned 0x%x\n", hr); return hr; } hr = pIClassAdmin->RegisterAppCategory(&AppCategory2); if (!SUCCEEDED(hr)) { printf("RegisterAppCategory 2 returned 0x%x\n", hr); return hr; } //hr = pIClassAdmin->GetAppCategories (0x409, &RecdAppCategoryInfoList); hr = CsGetAppCategories (&RecdAppCategoryInfoList); if (SUCCEEDED(hr)) { printf("CsGetAppCategories returned: %d items\n", RecdAppCategoryInfoList.cCategory); for (UINT k=0; k < RecdAppCategoryInfoList.cCategory; k++) printf (" Category: %S.\n", (RecdAppCategoryInfoList.pCategoryInfo[k]).pszDescription); } if ((hr != S_OK) || (RecdAppCategoryInfoList.cCategory < 2)) { printf("CsGetAppCategories failed. 0x%x\n", hr); } ReleaseAppCategoryInfoList(&RecdAppCategoryInfoList); // ReleasePackageDetail(&PackageDetail1, TRUE); // ReleasePackageDetail(&PackageDetail2, TRUE); // ReleasePackageDetail(&PackageDetail3, TRUE); return S_OK; } HRESULT DoRemoveTest (ULONG *pcPkgCount) { HRESULT hr, hr1 = S_OK; *pcPkgCount = 0; VerbosePrint("Removing Packages %S\n", TestPackName1); hr = pIClassAdmin->RemovePackage(TestPackName1, 0); if (SUCCEEDED(hr)) (*pcPkgCount)++; else { printf("Remove Package returned 0x%x\n", hr); hr1 = hr; } VerbosePrint("Removing Packages %S\n", TestPackName2); hr = pIClassAdmin->RemovePackage(TestPackName2, 0); if (SUCCEEDED(hr)) (*pcPkgCount)++; else { printf("Remove Package returned 0x%x\n", hr); hr1 = hr; } VerbosePrint("Removing Packages %S\n", TestPackName4); hr = pIClassAdmin->RemovePackage(TestPackName4, 0); if (SUCCEEDED(hr)) (*pcPkgCount)++; else { printf("Remove Package returned 0x%x\n", hr); hr1 = hr; } hr = pIClassAdmin->UnregisterAppCategory(&TestAppCatId1); if (!SUCCEEDED(hr)) { printf("RegisterAppCategory 1 returned 0x%x\n", hr); return hr; } hr = pIClassAdmin->UnregisterAppCategory(&TestAppCatId2); if (!SUCCEEDED(hr)) { printf("RegisterAppCategory 1 returned 0x%x\n", hr); return hr; } return hr; } HRESULT RefreshTest() { return S_OK; }