From 1f2077485e580b3b1d582298281ac6272df18d8d Mon Sep 17 00:00:00 2001 From: jbzdarkid Date: Sat, 27 Oct 2018 01:27:29 -0700 Subject: /W3 clean, add .msi installer project --- WitnessRandomizer/Memory.cpp | 14 +- WitnessRandomizer/Memory.h | 20 +- WitnessRandomizer/Panels.h | 26 +- WitnessRandomizer/WitnessRandomizer.cpp | 32 +- WitnessRandomizer/WitnessRandomizer.h | 6 +- WitnessRandomizer/WitnessRandomizer.vcxproj | 8 +- .../WitnessRandomizerInstaller.sln | 41 ++ .../WitnessRandomizerInstaller.vdproj | 697 +++++++++++++++++++++ 8 files changed, 794 insertions(+), 50 deletions(-) create mode 100644 WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln create mode 100644 WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj diff --git a/WitnessRandomizer/Memory.cpp b/WitnessRandomizer/Memory.cpp index 6077691..0afeded 100644 --- a/WitnessRandomizer/Memory.cpp +++ b/WitnessRandomizer/Memory.cpp @@ -47,30 +47,28 @@ Memory::~Memory() { CloseHandle(_handle); } -// Private methods: - void Memory::ThrowError() { std::string message(256, '\0'); - FormatMessageA(4096, NULL, GetLastError(), 1024, &message[0], static_cast(message.length()), NULL); + FormatMessageA(4096, nullptr, GetLastError(), 1024, &message[0], static_cast(message.length()), nullptr); std::cout << message.c_str() << std::endl; exit(EXIT_FAILURE); } -uintptr_t Memory::ComputeOffset(std::vector offsets) +void* Memory::ComputeOffset(std::vector offsets) { // Leave off the last offset, since it will be either read/write, and may not be of type unitptr_t. int final_offset = offsets.back(); offsets.pop_back(); uintptr_t cumulativeAddress = _baseAddress; - for (int offset : offsets) { + for (const int offset : offsets) { cumulativeAddress += offset; - auto search = _computedAddresses.find(cumulativeAddress); + const auto search = _computedAddresses.find(cumulativeAddress); if (search == std::end(_computedAddresses)) { // If the address is not yet computed, then compute it. uintptr_t computedAddress = 0; - if (!ReadProcessMemory(_handle, (LPVOID)cumulativeAddress, &computedAddress, sizeof(uintptr_t), NULL)) { + if (!ReadProcessMemory(_handle, reinterpret_cast(cumulativeAddress), &computedAddress, sizeof(uintptr_t), NULL)) { ThrowError(); } _computedAddresses[cumulativeAddress] = computedAddress; @@ -78,5 +76,5 @@ uintptr_t Memory::ComputeOffset(std::vector offsets) cumulativeAddress = _computedAddresses[cumulativeAddress]; } - return cumulativeAddress + final_offset; + return reinterpret_cast(cumulativeAddress + final_offset); } diff --git a/WitnessRandomizer/Memory.h b/WitnessRandomizer/Memory.h index 6f5b8b7..8e8bbc3 100644 --- a/WitnessRandomizer/Memory.h +++ b/WitnessRandomizer/Memory.h @@ -2,9 +2,6 @@ #include #include #include -#include -#include -using namespace std::chrono_literals; // https://github.com/erayarslan/WriteProcessMemory-Example // http://stackoverflow.com/q/32798185 @@ -16,16 +13,18 @@ public: Memory(const std::string& processName); ~Memory(); + Memory(const Memory& memory) = delete; + Memory& operator=(const Memory& other) = delete; + template - std::vector ReadData(const std::vector& offsets, int numItems) { + std::vector ReadData(const std::vector& offsets, size_t numItems) { std::vector data; data.resize(numItems); for (int i=0; i<5; i++) { - if (ReadProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * numItems, NULL)) + if (ReadProcessMemory(_handle, ComputeOffset(offsets), &data[0], sizeof(T) * numItems, nullptr)) { return data; } - // std::this_thread::sleep_for(10ms); } ThrowError(); return {}; @@ -34,10 +33,9 @@ public: template void WriteData(const std::vector& offsets, const std::vector& data) { for (int i=0; i<5; i++) { - if (WriteProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * data.size(), NULL)) { + if (WriteProcessMemory(_handle, ComputeOffset(offsets), &data[0], sizeof(T) * data.size(), nullptr)) { return; } - // std::this_thread::sleep_for(10ms); } ThrowError(); } @@ -45,9 +43,9 @@ public: private: void ThrowError(); - uintptr_t ComputeOffset(std::vector offsets); + void* ComputeOffset(std::vector offsets); std::map _computedAddresses; - uintptr_t _baseAddress; - HANDLE _handle; + uintptr_t _baseAddress = 0; + HANDLE _handle = nullptr; }; \ No newline at end of file diff --git a/WitnessRandomizer/Panels.h b/WitnessRandomizer/Panels.h index cd815bc..2995170 100644 --- a/WitnessRandomizer/Panels.h +++ b/WitnessRandomizer/Panels.h @@ -2,7 +2,7 @@ #include // Some of these (the puzzle ones) are duplicated elsewhere -std::vector lasers = { +const std::vector lasers = { 0x0360D, // Symmetry 0x03615, // Swamp 0x09DE0, // Bunker @@ -18,7 +18,7 @@ std::vector lasers = { }; // Note: Some of these (non-desert) are duplicated elsewhere -std::vector burnablePanels = { +const std::vector burnablePanels = { 0x17D9C, // Treehouse Yellow 7 0x17DC2, // Treehouse Yellow 8 0x17DC4, // Treehouse Yellow 9 @@ -63,7 +63,7 @@ std::vector burnablePanels = { // Note: Some of these (non-controls) are duplicated elsewhere // TODO: Gave up -std::vector leftRightPanels = { +const std::vector leftRightPanels = { 0x01A54, // Glass Factory Entry 0x00086, // Glass Factory Vertical Symmetry 1 0x00087, // Glass Factory Vertical Symmetry 2 @@ -77,7 +77,7 @@ std::vector leftRightPanels = { }; // Note: Some of these (non-controls) are duplicated elsewhere -std::vector upDownPanels = { +const std::vector upDownPanels = { 0x0008D, // Glass Factory Rotational Symmetry 1 0x00081, // Glass Factory Rotational Symmetry 2 0x00083, // Glass Factory Rotational Symmetry 3 @@ -100,7 +100,7 @@ std::vector upDownPanels = { }; // Note: Some of these (non-controls) are duplicated elsewhere -std::vector leftForwardRightPanels = { +const std::vector leftForwardRightPanels = { // 0x00075, // Symmetry Island Colored Dots 3 // 0x288EA, // UTM Perspective 1 // 0x288FC, // UTM Perspective 2 @@ -112,7 +112,7 @@ std::vector leftForwardRightPanels = { 0x17E52, // Treehouse Green 4 }; -std::vector pillars = { +const std::vector pillars = { 0x0383D, // Mountain 3 Left Pillar 1 0x0383F, // Mountain 3 Left Pillar 2 0x03859, // Mountain 3 Left Pillar 3 @@ -126,7 +126,7 @@ std::vector pillars = { // 0x1C319, // Challenge Right Pillar }; -std::vector mountainMultipanel = { +const std::vector mountainMultipanel = { 0x09FCC, // Mountain 2 Multipanel 1 0x09FCE, // Mountain 2 Multipanel 2 0x09FCF, // Mountain 2 Multipanel 3 @@ -135,7 +135,7 @@ std::vector mountainMultipanel = { 0x09FD2, // Mountain 2 Multipanel 6 }; -std::vector squarePanels = { +const std::vector squarePanels = { 0x00064, // Tutorial Straight 0x00182, // Tutorial Bend 0x0A3B2, // Tutorial Back Right @@ -453,7 +453,7 @@ std::vector squarePanels = { 0x09E85, // Tunnels Town Shortcut }; -std::vector shadowsPanels = { +const std::vector shadowsPanels = { 0x198B5, // Shadows Tutorial 1 0x198BD, // Shadows Tutorial 2 0x198BF, // Shadows Tutorial 3 @@ -478,7 +478,7 @@ std::vector shadowsPanels = { 0x19650, // Shadows Laser }; -std::vector monasteryPanels = { +const std::vector monasteryPanels = { 0x00B10, // Monastery Left Door 0x00290, // Monastery Exterior 1 0x00C92, // Monastery Right Door @@ -493,7 +493,7 @@ std::vector monasteryPanels = { 0x17CA4, // Monastery Laser }; -std::vector bunkerPanels = { +const std::vector bunkerPanels = { 0x09F7D, // Bunker Tutorial 1 0x09FDC, // Bunker Tutorial 2 0x09FF7, // Bunker Tutorial 3 @@ -514,7 +514,7 @@ std::vector bunkerPanels = { 0x0A079, // Bunker Elevator }; -std::vector junglePanels = { +const std::vector junglePanels = { 0x002C4, // Jungle Waves 1 0x00767, // Jungle Waves 2 0x002C6, // Jungle Waves 3 @@ -533,7 +533,7 @@ std::vector junglePanels = { }; // There might be something to do with these, I haven't decided yet. -std::vector nothingPanels = { +const std::vector nothingPanels = { // Doors & Shortcuts & Shortcut doors & Door controls 0x0C339, // Desert Surface Door 0x0A249, // Desert Pond Exit Door diff --git a/WitnessRandomizer/WitnessRandomizer.cpp b/WitnessRandomizer/WitnessRandomizer.cpp index efe18b5..d71cc21 100644 --- a/WitnessRandomizer/WitnessRandomizer.cpp +++ b/WitnessRandomizer/WitnessRandomizer.cpp @@ -1,5 +1,6 @@ /* * BUGS: + * Shipwreck vault fails, possibly because of dot_reflection? * Treehouse pivots *should* work, but I need to not copy style_flags. This seems to cause crashes when pivots appear elsewhere in the world. * FEATURES: @@ -17,23 +18,26 @@ #include #include #include +#include template -int find(const std::vector &data, T search, int startIndex = 0) { - for (int i=startIndex ; i &data, T search, size_t startIndex = 0) { + for (size_t i=startIndex ; i(0x002C2, CURSOR_SPEED_SCALE, {1.0}); } -void WitnessRandomizer::Randomize(std::vector &panels, int flags) { +void WitnessRandomizer::Randomize(const std::vector& panels, int flags) { return RandomizeRange(panels, flags, 0, panels.size()); } // Range is [start, end) -void WitnessRandomizer::RandomizeRange(std::vector &panels, int flags, size_t startIndex, size_t endIndex) { +void WitnessRandomizer::RandomizeRange(std::vector panels, int flags, size_t startIndex, size_t endIndex) { if (panels.size() == 0) return; if (startIndex >= endIndex) return; if (endIndex >= panels.size()) endIndex = panels.size(); for (size_t i = endIndex-1; i > startIndex+1; i--) { - size_t target = rand() % (i - startIndex) + startIndex; + const size_t target = rand() % (i - startIndex) + startIndex; if (i != target) { // std::cout << "Swapping panels " << std::hex << panels[i] << " and " << std::hex << panels[target] << std::endl; SwapPanels(panels[i], panels[target], flags); @@ -215,17 +219,17 @@ void WitnessRandomizer::SwapPanels(int panel1, int panel2, int flags) { } void WitnessRandomizer::ReassignTargets(const std::vector& panels, const std::vector& order) { + // This list is offset by 1, so the target of the Nth panel is in position N (aka the N+1th element) + // The first panel may not have a wire to power it, so we use the panel ID itself. std::vector targetToActivatePanel = {panels[0] + 1}; - for (int panel : panels) { + for (const int panel : panels) { int target = ReadPanelData(panel, TARGET, 1)[0]; targetToActivatePanel.push_back(target); } - for (int i=0; i(panels[order[i]], TARGET, {panelTarget}); } } diff --git a/WitnessRandomizer/WitnessRandomizer.h b/WitnessRandomizer/WitnessRandomizer.h index 0e88cee..3d748d1 100644 --- a/WitnessRandomizer/WitnessRandomizer.h +++ b/WitnessRandomizer/WitnessRandomizer.h @@ -12,13 +12,13 @@ class WitnessRandomizer { public: WitnessRandomizer(); - void Randomize(std::vector &panels, int flags); - void RandomizeRange(std::vector &panels, int flags, size_t startIndex, size_t endIndex); + void Randomize(const std::vector& panels, int flags); + void RandomizeRange(std::vector panels, int flags, size_t startIndex, size_t endIndex); void SwapPanels(int panel1, int panel2, int flags); void ReassignTargets(const std::vector& panels, const std::vector& order); template - std::vector ReadPanelData(int panel, int offset, int size) { + std::vector ReadPanelData(int panel, int offset, size_t size) { return _memory.ReadData({GLOBALS, 0x18, panel*8, offset}, size); } diff --git a/WitnessRandomizer/WitnessRandomizer.vcxproj b/WitnessRandomizer/WitnessRandomizer.vcxproj index 49bd186..a737dd3 100644 --- a/WitnessRandomizer/WitnessRandomizer.vcxproj +++ b/WitnessRandomizer/WitnessRandomizer.vcxproj @@ -81,6 +81,8 @@ false + NativeRecommendedRules.ruleset + true @@ -134,7 +136,7 @@ - Use + NotUsing Level3 MaxSpeed true @@ -143,6 +145,10 @@ NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true pch.h + stdcpp17 + true + true + 26451 Console diff --git a/WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln b/WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln new file mode 100644 index 0000000..f202990 --- /dev/null +++ b/WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2046 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "WitnessRandomizerInstaller", "WitnessRandomizerInstaller.vdproj", "{BBF9ED06-A4A7-4574-A15A-CF12489F45B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WitnessRandomizer", "..\WitnessRandomizer\WitnessRandomizer.vcxproj", "{1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Debug|x64.ActiveCfg = Debug + {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Debug|x64.Build.0 = Debug + {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Debug|x86.ActiveCfg = Debug + {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Debug|x86.Build.0 = Debug + {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Release|x64.ActiveCfg = Release + {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Release|x64.Build.0 = Release + {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Release|x86.ActiveCfg = Release + {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Release|x86.Build.0 = Release + {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Debug|x64.ActiveCfg = Debug|x64 + {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Debug|x64.Build.0 = Debug|x64 + {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Debug|x86.ActiveCfg = Debug|Win32 + {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Debug|x86.Build.0 = Debug|Win32 + {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Release|x64.ActiveCfg = Release|x64 + {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Release|x64.Build.0 = Release|x64 + {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Release|x86.ActiveCfg = Release|Win32 + {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {16A86E99-24E8-45C7-A6E2-1FA2C179A898} + EndGlobalSection +EndGlobal diff --git a/WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj b/WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj new file mode 100644 index 0000000..d655a65 --- /dev/null +++ b/WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj @@ -0,0 +1,697 @@ +"DeployProject" +{ +"VSVersion" = "3:800" +"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:WitnessRandomizerInstaller" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_99BCB0A7745940D890C011AEB10ED05F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:Debug\\WitnessRandomizerInstaller.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Release\\WitnessRandomizer.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:3" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + } + } + "File" + { + } + "FileType" + { + } + "Folder" + { + "{3C67513D-01DD-4637-8A68-80971EB9504F}:_D9D31B4A38DF41E78ABAD33DDC72CD52" + { + "DefaultLocation" = "8:[ProgramFiles64Folder][Manufacturer]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_E6EFC2A563B94B588E829ED15D2EE070" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_EC75B6D2E5304ADCACB28DC7CA4365A2" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + "RequiresElevation" = "11:FALSE" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:WitnessRandomizerInstaller" + "ProductCode" = "8:{D2ADB0EF-B7B6-431F-91A4-ED85925A290F}" + "PackageCode" = "8:{31D00A20-20C0-46B5-A0B8-FD53A27831E8}" + "UpgradeCode" = "8:{B2AF0F34-4917-4AEC-B892-FE4FD4B9584A}" + "AspNetVersion" = "8:2.0.50727.0" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:FALSE" + "DetectNewerInstalledVersion" = "11:TRUE" + "InstallAllUsers" = "11:FALSE" + "ProductVersion" = "8:1.0.0" + "Manufacturer" = "8:jbzdarkid" + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:" + "Title" = "8:WitnessRandomizerInstaller" + "Subject" = "8:" + "ARPCONTACT" = "8:jbzdarkid" + "Keywords" = "8:" + "ARPCOMMENTS" = "8:Randomizer for The Witness" + "ARPURLINFOABOUT" = "8:www.github.com/jbzdarkid/witness-randomizer" + "ARPPRODUCTICON" = "8:" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + "TargetPlatform" = "3:1" + "PreBuildEvent" = "8:" + "PostBuildEvent" = "8:" + "RunPostBuildEvent" = "3:0" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_99D49F6F3FDE47E6A28761F01AF578E1" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_3A41D7EF5BF942FAA46261A8C8A6A3E9" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_AF03DAE7450641EF9CB1A71C5F7E4DAF" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_2FE61CAEC5F04B44B9B356786AA5650E" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_17BDAE346F194FD0B84D3B6F64454455" + { + "Name" = "8:WitnessRandomizer" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_99BCB0A7745940D890C011AEB10ED05F" + "Folder" = "8:_EC75B6D2E5304ADCACB28DC7CA4365A2" + "WorkingFolder" = "8:_D9D31B4A38DF41E78ABAD33DDC72CD52" + "Icon" = "8:" + "Feature" = "8:" + } + } + "UserInterface" + { + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1D0761940F3446ECB1BF115230EEBAAD" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_246CF02A71224692AE1FCD645D0C550C" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1F1DB42220714DF3AD764FE81693D17B" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3BB25E5F9B10409982B7C4A22029DABC" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_315683E864204DC28444A9A6E1235D0F" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdUserInterface.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_31D3A86D6A484695A7AB5AB54D880CCB" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_96ED40E6C3E94DC3944345555DAC2381" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "UpdateText" + { + "Name" = "8:UpdateText" + "DisplayName" = "8:#1058" + "Description" = "8:#1158" + "Type" = "3:15" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1258" + "DefaultValue" = "8:#1258" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_43BD3ADF347E4D599B648929E79D2905" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_17CF2961248B47F1BE9F048C2821F5AA" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_75C34DD0EF274A3C961526CAE494EB05" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdBasicDialogs.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_94854F44F47B4AB68C268B55F9272AC8" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_91CB7820557245A78F2BEC28E128F5A6" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F03A13F3FD82442D9A60ABA8F387556D" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F767EFBE51C14BEEBDDDE4EE34194C2F" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_ADBB7C7C5F1C44A5BDF8196F2B399117" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_12ABE080AB25431587017EA259F5EE77" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_342FF2D8B1B84AEF99509E470D61F8DB" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "InstallAllUsersVisible" + { + "Name" = "8:InstallAllUsersVisible" + "DisplayName" = "8:#1059" + "Description" = "8:#1159" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7FA0E634601A4E15A45B2B6BB4AE5C39" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + "MergeModule" + { + } + "ProjectOutput" + { + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_99BCB0A7745940D890C011AEB10ED05F" + { + "SourcePath" = "8:x64\\Release\\WitnessRandomizer.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_D9D31B4A38DF41E78ABAD33DDC72CD52" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + } +} -- cgit 1.4.1