windows-nt/Source/XPSP1/NT/com/ole32/cs/csdrt/csdrtad.cxx
2020-09-26 16:20:57 +08:00

896 lines
28 KiB
C++

//
// 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;
}