windows-nt/Source/XPSP1/NT/base/win32/fusion/tools/st/wfp.cpp

194 lines
4.1 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
#include "stdinc.h"
#include "st.h"
#include "stressharness.h"
#include "wfp.h"
#define WFP_INI_SECTION (L"wfp")
#define WFP_INI_KEY_VICTIM (L"Victim")
#define WFP_INI_KEY_MODE (L"Mode")
#define WFP_INI_KEY_USE_SHORTFNAME (L"UseShortnameFile")
#define WFP_INI_KEY_USE_SHORTDNAME (L"UseShortnameDir")
#define WFP_INI_KEY_INSTALL (L"InstallManifest")
#define WFP_INI_KEY_PAUSE_AFTER (L"PauseLength")
#define WFP_INI_KEY_MODE_DELETE_FILES (L"DeleteFiles")
#define WFP_INI_KEY_MODE_TOUCH_FILES (L"TouchFiles")
#define WFP_INI_KEY_MODE_DELETE_DIR (L"DeleteDirectory")
#define WFP_INI_KEY_MODE_DELETE_MAN (L"DeleteManifest")
#define WFP_INI_KEY_MODE_DELETE_CAT (L"DeleteCatalog")
#define WFP_INI_KEY_MODE_HAVOC (L"Havoc")
#define WFP_INI_KEY_MODE_DEFAULT (WFP_INI_KEY_MODE_DELETE_FILES)
CWfpJobEntry::~CWfpJobEntry()
{
}
//
// Defaulted
//
BOOL
CWfpJobEntry::SetupSelfForRun()
{
return TRUE;
}
BOOL
CWfpJobEntry::Cleanup()
{
FN_PROLOG_WIN32
IFW32FALSE_EXIT(CStressJobEntry::Cleanup());
if ( this->m_buffManifestToInstall.Cch() != 0 )
{
//
// Uninstall the assembly that we added
//
SXS_UNINSTALLW Uninstall = { sizeof(Uninstall) };
Uninstall.dwFlags = SXS_UNINSTALL_FLAG_FORCE_DELETE;
Uninstall.lpAssemblyIdentity = this->m_buffVictimAssemblyIdentity;
IFW32FALSE_EXIT(SxsUninstallW(&Uninstall, NULL));
}
FN_EPILOG
}
BOOL
CWfpJobEntry::RunTest(
bool &rfTestSuccessful
)
{
FN_PROLOG_WIN32
//
// Our tests are always successful, because all we're doing is stressing WFP
//
rfTestSuccessful = true;
FN_EPILOG
}
CWfpJobEntry::LoadFromSettingsFile(
PCWSTR pcwszSettingsFile
)
{
FN_PROLOG_WIN32
CSmallStringBuffer buffJunk;
INT iJunk;
//
// Are we using shortnames for files?
//
IFW32FALSE_EXIT(SxspIsPrivateProfileStringEqual(
WFP_INI_SECTION,
WFP_INI_KEY_USE_SHORTFNAME,
L"no",
this->m_fUseShortnameFile,
pcwszSettingsFile));
//
// Are we using shortnames for directories?
//
IFW32FALSE_EXIT(SxspIsPrivateProfileStringEqual(
WFP_INI_SECTION,
WFP_INI_KEY_USE_SHORTDNAME,
L"no",
this->m_fUseShortnameDirectory,
pcwszSettingsFile));
//
// How long are we to wait between twiddling and uninstalling?
//
IFW32FALSE_EXIT(SxspGetPrivateProfileIntW(
WFP_INI_SECTION,
WFP_INI_KEY_PAUSE_AFTER,
5000,
iJunk,
pcwszSettingsFile));
this->m_dwPauseBetweenTwiddleAndUninstall = iJunk;
//
// The test mode
//
IFW32FALSE_EXIT(SxspGetPrivateProfileStringW(
WFP_INI_SECTION,
WFP_INI_KEY_MODE,
WFP_INI_KEY_MODE_DEFAULT,
buffJunk,
pcwszSettingsFile));
#define TEST_MODE( mds, mdn ) if (FusionpStrCmpI((WFP_INI_KEY_MODE_##mds), buffJunk) == 0) this->m_eChangeMode = mdn
TEST_MODE(DELETE_FILES, eWfpChangeDeleteFile);
TEST_MODE(TOUCH_FILES, eWfpChangeTouchFile);
TEST_MODE(DELETE_DIR, eWfpChangeDeleteDirectory);
TEST_MODE(DELETE_MAN, eWfpChangeDeleteManifest);
TEST_MODE(DELETE_CAT, eWfpChangeDeleteCatalog);
TEST_MODE(HAVOC, eWfpChangeCompleteHavoc);
//
// The victim assembly identity
//
IFW32FALSE_EXIT(SxspGetPrivateProfileStringW(
WFP_INI_SECTION,
WFP_INI_KEY_VICTIM,
L"",
m_buffVictimAssemblyIdentity,
pcwszSettingsFile));
//
// Are we installing an assembly to do this to?
//
IFW32FALSE_EXIT(SxspGetPrivateProfileStringW(
WFP_INI_SECTION,
WFP_INI_KEY_INSTALL,
L"",
this->m_buffManifestToInstall,
pcwszSettingsFile));
FN_EPILOG
}
CWfpJobManager::CWfpJobManager()
{
//
// Nothing
//
}
CWfpJobManager::~CWfpJobManager()
{
//
// Nothing
//
}
BOOL
CWfpJobManager::CreateJobEntry(
CStressJobEntry* &rpJobEntry
)
{
FN_PROLOG_WIN32
rpJobEntry = NULL;
rpJobEntry = FUSION_NEW_SINGLETON(CWfpJobEntry(this));
FN_EPILOG
}