|
|
//
// 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<IEnumPackage, PACKAGEDISPINFO>(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<IEnumPackage, PACKAGEDISPINFO>(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; }
|