Multipurpose utility for managing Games for Windows - LIVE installs and content. (Mirrored from https://github.com/InvoxiPlayGames/GfWLUtility)

title name db, code cleanup

+1
ExportForm.Designer.cs
··· 140 140 this.cancelButton.TabIndex = 3; 141 141 this.cancelButton.Text = "Cancel"; 142 142 this.cancelButton.UseVisualStyleBackColor = true; 143 + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); 143 144 // 144 145 // statusLabel 145 146 //
+5
ExportForm.cs
··· 144 144 145 145 Close(); 146 146 } 147 + 148 + private void cancelButton_Click(object sender, EventArgs e) 149 + { 150 + Close(); 151 + } 147 152 } 148 153 }
+60 -60
MainWindow.Designer.cs
··· 41 41 this.manageMarketplaceButton = new System.Windows.Forms.Button(); 42 42 this.marketplaceLogoPicture = new System.Windows.Forms.PictureBox(); 43 43 this.marketplaceInstallLabel = new System.Windows.Forms.Label(); 44 - this.installMarketplaceButton = new GfWLUtility.ElevatedButton(); 45 44 this.marketplaceVersionLabel = new System.Windows.Forms.Label(); 46 45 this.wlidGroup = new System.Windows.Forms.GroupBox(); 47 46 this.wlidLogoPicture = new System.Windows.Forms.PictureBox(); 48 47 this.wlidInstallLabel = new System.Windows.Forms.Label(); 49 - this.installWLIDButton = new GfWLUtility.ElevatedButton(); 50 48 this.wlidInfoLabel = new System.Windows.Forms.Label(); 51 49 this.runtimeGroup = new System.Windows.Forms.GroupBox(); 52 50 this.manageRuntimeButton = new System.Windows.Forms.Button(); 53 51 this.gfwlLogoPicture = new System.Windows.Forms.PictureBox(); 54 52 this.runtimeInstallLabel = new System.Windows.Forms.Label(); 55 - this.installRuntimeButton = new GfWLUtility.ElevatedButton(); 56 53 this.runtimeVersionLabel = new System.Windows.Forms.Label(); 57 54 this.accountsTab = new System.Windows.Forms.TabPage(); 58 55 this.onlineXuidLabel = new System.Windows.Forms.Label(); ··· 80 77 this.connBlockGroup = new System.Windows.Forms.GroupBox(); 81 78 this.blockLiveInfoLabel = new System.Windows.Forms.Label(); 82 79 this.blockServicesInfoLabel = new System.Windows.Forms.Label(); 83 - this.blockServicesButton = new GfWLUtility.ElevatedButton(); 84 - this.blockLiveButton = new GfWLUtility.ElevatedButton(); 85 80 this.dataExportGroup = new System.Windows.Forms.GroupBox(); 86 81 this.dataExportInfoLabel = new System.Windows.Forms.Label(); 87 82 this.dataImportButton = new System.Windows.Forms.Button(); ··· 89 84 this.label1 = new System.Windows.Forms.Label(); 90 85 this.githubLinkLabel = new System.Windows.Forms.LinkLabel(); 91 86 this.appVersionLabel = new System.Windows.Forms.Label(); 87 + this.installMarketplaceButton = new GfWLUtility.ElevatedButton(); 88 + this.installWLIDButton = new GfWLUtility.ElevatedButton(); 89 + this.installRuntimeButton = new GfWLUtility.ElevatedButton(); 90 + this.blockServicesButton = new GfWLUtility.ElevatedButton(); 91 + this.blockLiveButton = new GfWLUtility.ElevatedButton(); 92 92 this.mainTabControl.SuspendLayout(); 93 93 this.runtimeTab.SuspendLayout(); 94 94 this.systemInfoGroup.SuspendLayout(); ··· 240 240 this.marketplaceInstallLabel.TabIndex = 0; 241 241 this.marketplaceInstallLabel.Text = "Marketplace installed placeholder"; 242 242 // 243 - // installMarketplaceButton 244 - // 245 - this.installMarketplaceButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 246 - this.installMarketplaceButton.Location = new System.Drawing.Point(6, 73); 247 - this.installMarketplaceButton.Name = "installMarketplaceButton"; 248 - this.installMarketplaceButton.Size = new System.Drawing.Size(227, 23); 249 - this.installMarketplaceButton.TabIndex = 8; 250 - this.installMarketplaceButton.Text = "Install marketplace"; 251 - this.installMarketplaceButton.UseVisualStyleBackColor = true; 252 - this.installMarketplaceButton.Click += new System.EventHandler(this.installMarketplaceButton_Click); 253 - // 254 243 // marketplaceVersionLabel 255 244 // 256 245 this.marketplaceVersionLabel.AutoSize = true; ··· 291 280 this.wlidInstallLabel.TabIndex = 5; 292 281 this.wlidInstallLabel.Text = "WLID installed placeholder"; 293 282 // 294 - // installWLIDButton 295 - // 296 - this.installWLIDButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 297 - this.installWLIDButton.Location = new System.Drawing.Point(6, 73); 298 - this.installWLIDButton.Name = "installWLIDButton"; 299 - this.installWLIDButton.Size = new System.Drawing.Size(177, 23); 300 - this.installWLIDButton.TabIndex = 9; 301 - this.installWLIDButton.Text = "Install sign-in assistant"; 302 - this.installWLIDButton.UseVisualStyleBackColor = true; 303 - this.installWLIDButton.Click += new System.EventHandler(this.installWLIDButton_Click); 304 - // 305 283 // wlidInfoLabel 306 284 // 307 285 this.wlidInfoLabel.AutoSize = true; ··· 352 330 this.runtimeInstallLabel.Size = new System.Drawing.Size(145, 13); 353 331 this.runtimeInstallLabel.TabIndex = 0; 354 332 this.runtimeInstallLabel.Text = "Runtime installed placeholder"; 355 - // 356 - // installRuntimeButton 357 - // 358 - this.installRuntimeButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 359 - this.installRuntimeButton.Location = new System.Drawing.Point(6, 73); 360 - this.installRuntimeButton.Name = "installRuntimeButton"; 361 - this.installRuntimeButton.Size = new System.Drawing.Size(227, 23); 362 - this.installRuntimeButton.TabIndex = 8; 363 - this.installRuntimeButton.Text = "Install runtime"; 364 - this.installRuntimeButton.UseVisualStyleBackColor = true; 365 - this.installRuntimeButton.Click += new System.EventHandler(this.installRuntimeButton_Click); 366 333 // 367 334 // runtimeVersionLabel 368 335 // ··· 647 614 this.blockServicesInfoLabel.TabIndex = 3; 648 615 this.blockServicesInfoLabel.Text = "Blocks GfWL marketplace services to speed up loading.\r\n(Recommended)"; 649 616 // 650 - // blockServicesButton 651 - // 652 - this.blockServicesButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 653 - this.blockServicesButton.Location = new System.Drawing.Point(6, 19); 654 - this.blockServicesButton.Name = "blockServicesButton"; 655 - this.blockServicesButton.Size = new System.Drawing.Size(124, 23); 656 - this.blockServicesButton.TabIndex = 1; 657 - this.blockServicesButton.Text = "Block Services"; 658 - this.blockServicesButton.UseVisualStyleBackColor = true; 659 - this.blockServicesButton.Click += new System.EventHandler(this.blockServicesButton_Click); 660 - // 661 - // blockLiveButton 662 - // 663 - this.blockLiveButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 664 - this.blockLiveButton.Location = new System.Drawing.Point(6, 53); 665 - this.blockLiveButton.Name = "blockLiveButton"; 666 - this.blockLiveButton.Size = new System.Drawing.Size(124, 23); 667 - this.blockLiveButton.TabIndex = 0; 668 - this.blockLiveButton.Text = "Block LIVE"; 669 - this.blockLiveButton.UseVisualStyleBackColor = true; 670 - this.blockLiveButton.Click += new System.EventHandler(this.blockLiveButton_Click); 671 - // 672 617 // dataExportGroup 673 618 // 674 619 this.dataExportGroup.Controls.Add(this.dataExportInfoLabel); ··· 738 683 this.appVersionLabel.Size = new System.Drawing.Size(107, 13); 739 684 this.appVersionLabel.TabIndex = 3; 740 685 this.appVersionLabel.Text = "version 1.0.0.0-beta1"; 686 + // 687 + // installMarketplaceButton 688 + // 689 + this.installMarketplaceButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 690 + this.installMarketplaceButton.Location = new System.Drawing.Point(6, 73); 691 + this.installMarketplaceButton.Name = "installMarketplaceButton"; 692 + this.installMarketplaceButton.Size = new System.Drawing.Size(227, 23); 693 + this.installMarketplaceButton.TabIndex = 8; 694 + this.installMarketplaceButton.Text = "Install marketplace"; 695 + this.installMarketplaceButton.UseVisualStyleBackColor = true; 696 + this.installMarketplaceButton.Click += new System.EventHandler(this.installMarketplaceButton_Click); 697 + // 698 + // installWLIDButton 699 + // 700 + this.installWLIDButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 701 + this.installWLIDButton.Location = new System.Drawing.Point(6, 73); 702 + this.installWLIDButton.Name = "installWLIDButton"; 703 + this.installWLIDButton.Size = new System.Drawing.Size(177, 23); 704 + this.installWLIDButton.TabIndex = 9; 705 + this.installWLIDButton.Text = "Install sign-in assistant"; 706 + this.installWLIDButton.UseVisualStyleBackColor = true; 707 + this.installWLIDButton.Click += new System.EventHandler(this.installWLIDButton_Click); 708 + // 709 + // installRuntimeButton 710 + // 711 + this.installRuntimeButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 712 + this.installRuntimeButton.Location = new System.Drawing.Point(6, 73); 713 + this.installRuntimeButton.Name = "installRuntimeButton"; 714 + this.installRuntimeButton.Size = new System.Drawing.Size(227, 23); 715 + this.installRuntimeButton.TabIndex = 8; 716 + this.installRuntimeButton.Text = "Install runtime"; 717 + this.installRuntimeButton.UseVisualStyleBackColor = true; 718 + this.installRuntimeButton.Click += new System.EventHandler(this.installRuntimeButton_Click); 719 + // 720 + // blockServicesButton 721 + // 722 + this.blockServicesButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 723 + this.blockServicesButton.Location = new System.Drawing.Point(6, 19); 724 + this.blockServicesButton.Name = "blockServicesButton"; 725 + this.blockServicesButton.Size = new System.Drawing.Size(124, 23); 726 + this.blockServicesButton.TabIndex = 1; 727 + this.blockServicesButton.Text = "Block Services"; 728 + this.blockServicesButton.UseVisualStyleBackColor = true; 729 + this.blockServicesButton.Click += new System.EventHandler(this.blockServicesButton_Click); 730 + // 731 + // blockLiveButton 732 + // 733 + this.blockLiveButton.FlatStyle = System.Windows.Forms.FlatStyle.System; 734 + this.blockLiveButton.Location = new System.Drawing.Point(6, 53); 735 + this.blockLiveButton.Name = "blockLiveButton"; 736 + this.blockLiveButton.Size = new System.Drawing.Size(124, 23); 737 + this.blockLiveButton.TabIndex = 0; 738 + this.blockLiveButton.Text = "Block LIVE"; 739 + this.blockLiveButton.UseVisualStyleBackColor = true; 740 + this.blockLiveButton.Click += new System.EventHandler(this.blockLiveButton_Click); 741 741 // 742 742 // MainWindow 743 743 //
+1
README.md
··· 43 43 * [Legacy Update](https://legacyupdate.net) for providing mirrors for some assets 44 44 * [Free60 Wiki](https://free60.org/) 45 45 * [NeKzor's Xlive reversing from Tron Evolution](https://github.com/NeKzor/tem/blob/master/doc/src/reversed/xlive.md) 46 + * [XLiveLessNess](https://gitlab.com/GlitchyScripts/xlivelessness)
+268
TitleManager.cs
··· 32 32 33 33 internal class TitleManager 34 34 { 35 + // list from XLiveLessNess 36 + // https://gitlab.com/GlitchyScripts/xlln-data/-/blob/main/XLiveLessNess/hub/titles.json?ref_type=heads 37 + public static Dictionary<uint, string> TitleNameDatabase = new Dictionary<uint, string>() 38 + { 39 + { 0x33390FA0, "7 Wonders 3" }, 40 + { 0x33390FA1, "Chainz 2: Relinked" }, 41 + { 0x35530FA0, "Cubis Gold" }, 42 + { 0x35530FA1, "Cubis Gold 2" }, 43 + { 0x35530FA2, "Ranch Rush 2" }, 44 + { 0x355A0FA0, "Mahjongg Dimensions" }, 45 + { 0x36590FA0, "TextTwist 2" }, 46 + { 0x36590FA1, "Super TextTwist" }, 47 + { 0x41560829, "007: Quantum of Solace" }, 48 + { 0x41560FA0, "Call of Duty 4" }, 49 + { 0x41560FA1, "Call of Duty: WaW" }, 50 + { 0x41560FA2, "Singularity" }, 51 + { 0x41560FA3, "Transformers: WFC" }, 52 + { 0x41560FA4, "Blur" }, 53 + { 0x41560FA5, "[PROTOTYPE]" }, 54 + { 0x41560FA6, "007: Blood Stone" }, 55 + { 0x415807D5, "BlazBlue: Calamity Trigger" }, 56 + { 0x425307D6, "Fallout 3" }, 57 + { 0x42530FA0, "Hunted Demon's Forge" }, 58 + { 0x425607F3, "TRON: Evolution" }, 59 + { 0x42560FA0, "LEGO Pirates of the Caribbean: The Video Game" }, 60 + { 0x434307DE, "Lost Planet: Extreme Condition: Colonies Edition" }, 61 + { 0x434307F4, "Street Fighter IV" }, 62 + { 0x434307F7, "Resident Evil 5" }, 63 + { 0x43430803, "Dark Void" }, 64 + { 0x43430808, "Lost Planet 2" }, 65 + { 0x4343080E, "Dead Rising 2" }, 66 + { 0x43430FA0, "Super Street Fighter IV: Arcade Edition" }, 67 + { 0x43430FA1, "Resident Evil: Operation Raccoon City" }, 68 + { 0x43430FA2, "Dead Rising 2: Off the Record" }, 69 + { 0x43430FA5, "Street Fighter X Tekken" }, 70 + { 0x434D0820, "DiRT 2" }, 71 + { 0x434D082F, "FUEL" }, 72 + { 0x434D0831, "F1 2010" }, 73 + { 0x434D083E, "Operation Flashpoint: Red River" }, 74 + { 0x434D0FA0, "DiRT 3" }, 75 + { 0x434D0FA1, "F1 2011" }, 76 + { 0x44540FA0, "Crash Time 4: The Syndicate" }, 77 + { 0x44540FA1, "Crash Time 4 Demo" }, 78 + { 0x4541091C, "Dragon Age: Awakening" }, 79 + { 0x4541091F, "Battlefield: Bad Co. 2" }, 80 + { 0x45410920, "Mass Effect 2" }, 81 + { 0x45410921, "Dragon Age: Origins" }, 82 + { 0x45410935, "Bulletstorm" }, 83 + { 0x45410FA1, "Medal of Honor" }, 84 + { 0x45410FA2, "Need for Speed SHIFT" }, 85 + { 0x45410FA3, "Dead Space 2" }, 86 + { 0x45410FA4, "Bulletstrom DEMO" }, 87 + { 0x45410FA5, "Dragon Age 2" }, 88 + { 0x45410FA8, "Crysis 2" }, 89 + { 0x45410FAB, "The Sims 3" }, 90 + { 0x45410FAC, "The Sims 3 Late Night" }, 91 + { 0x45410FAD, "The Sims 3 Ambitions" }, 92 + { 0x45410FAE, "World Adventures" }, 93 + { 0x45410FAF, "The Sims Medieval" }, 94 + { 0x45410FB1, "Darkspore" }, 95 + { 0x45410FB2, "NFS SHIFT 2 Unleashed" }, 96 + { 0x45410FB3, "Spore" }, 97 + { 0x45410FB4, "The Sims 3 Generations" }, 98 + { 0x45410FB5, "Alice: Madness Returns" }, 99 + { 0x45410FB6, "Harry Potter (DH2)" }, 100 + { 0x45410FB7, "The Sims Medieval Pirates & Nobles" }, 101 + { 0x45410FB8, "Tiger Woods PGA TOUR 12: The Masters" }, 102 + { 0x454D07D4, "Flatout Ultimate Carnage" }, 103 + { 0x46450FA0, "Divinity II - DKS" }, 104 + { 0x46450FA1, "Cities XL 2011" }, 105 + { 0x46450FA2, "The Next Big Thing" }, 106 + { 0x46450FA3, "Faery" }, 107 + { 0x46450FA4, "Pro Cycling Manager" }, 108 + { 0x46550FA0, "Jewel Quest 5" }, 109 + { 0x46550FA1, "Family Feud Dream Home" }, 110 + { 0x48450FA0, "AFL Live" }, 111 + { 0x48450FA1, "Rugby League Live 2" }, 112 + { 0x49470FA1, "Test Drive Ferrari Racing Legend" }, 113 + { 0x4B590FA0, "Tropico 3 Gold Edition" }, 114 + { 0x4B590FA1, "Patrician IV" }, 115 + { 0x4B590FA3, "Commandos Complete" }, 116 + { 0x4B590FA5, "Dungeons" }, 117 + { 0x4B590FA8, "Patrician: RoaD" }, 118 + { 0x4B590FA9, "Elements of War" }, 119 + { 0x4B590FAA, "The First Templar" }, 120 + { 0x4C4107EB, "Star Wars: The Clone Wars - Republic Heroes" }, 121 + { 0x4D5307D6, "Shadowrun" }, 122 + { 0x4D53080F, "Halo 2 Vista" }, 123 + { 0x4D530841, "Viva Piñata" }, 124 + { 0x4D530842, "Gears of War" }, 125 + { 0x4D5308D2, "Microsoft Flight" }, 126 + { 0x4D5308D3, "Firebird Project" }, 127 + { 0x4D530901, "Game Room" }, 128 + { 0x4D53090A, "Fable 3" }, 129 + { 0x4D530935, "Flight Simulator X" }, 130 + { 0x4D530936, "Age of Empires III" }, 131 + { 0x4D530937, "Fable: TLC" }, 132 + { 0x4D530942, "AoE Online - Beta" }, 133 + { 0x4D530FA0, "Zoo Tycoon 2" }, 134 + { 0x4D530FA2, "Toy Soldiers" }, 135 + { 0x4D530FA3, "Age of Empires Online" }, 136 + { 0x4D530FA4, "Toy Soldiers: Cold War" }, 137 + { 0x4D530FA5, "Ms. Splosion Man" }, 138 + { 0x4D530FA6, "Skulls of the Shogun" }, 139 + { 0x4D530FA7, "Insanely Twisted Shadow Planet" }, 140 + { 0x4D530FA8, "Iron Brigade" }, 141 + { 0x4D530FA9, "MGS Pinball FX2 GFWL Games For Windows Live" }, 142 + { 0x4D530FAA, "MGS Vodka PC" }, 143 + { 0x4D5388B0, "BugBash 2" }, 144 + { 0x4E4D0FA1, "Dark Souls: Prepare to Die Edition" }, 145 + { 0x4E4D0FA2, "ACE COMBAT ASSAULT HORIZON: Enhanced Edition" }, 146 + { 0x4E4E0FA0, "Trainz Simulator 2010" }, 147 + { 0x4E4E0FA1, "Settle and Carlisle" }, 148 + { 0x4E4E0FA2, "Classic Cabon City" }, 149 + { 0x4E4E0FA3, "TS 2010: Blue Comet" }, 150 + { 0x4E4E0FA4, "Trainz Simulator 12" }, 151 + { 0x4F420FA0, "BubbleTown" }, 152 + { 0x4F430FA0, "King's Bounty Platinum" }, 153 + { 0x50470FA1, "Bejeweled 2" }, 154 + { 0x50470FA3, "Bookworm" }, 155 + { 0x50470FA4, "Plants vs. Zombies" }, 156 + { 0x50470FA5, "Zuma's Revenge" }, 157 + { 0x50470FA6, "Bejeweled 3" }, 158 + { 0x50580FA0, "Europa Universalis III" }, 159 + { 0x50580FA1, "Hearts of Iron III" }, 160 + { 0x50580FA2, "King Arthur" }, 161 + { 0x50580FA3, "Mount & Blade Warband" }, 162 + { 0x50580FA4, "Victoria 2" }, 163 + { 0x50580FA6, "EU 3: Divine Wind" }, 164 + { 0x50580FA7, "EU3:Heir to the Throne" }, 165 + { 0x50580FA8, "King Arthur The Druids" }, 166 + { 0x50580FA9, "King Arthur The Saxons" }, 167 + { 0x50580FAB, "Cities in Motion" }, 168 + { 0x50580FAC, "Cities in Motion" }, 169 + { 0x50580FAD, "EU 3: Chronicles" }, 170 + { 0x50580FAE, "Darkest Hour" }, 171 + { 0x50580FAF, "MnB: With Fire & Sword" }, 172 + { 0x50580FB0, "King Arthur Collection" }, 173 + { 0x50580FB1, "Supreme Ruler Cold War" }, 174 + { 0x50580FB2, "Pirates of Black Cove" }, 175 + { 0x51320FA0, "Poker Superstars III" }, 176 + { 0x51320FA1, "Slingo Deluxe" }, 177 + { 0x534307EB, "Kane & Lynch: Dead Men" }, 178 + { 0x534307FA, "Battlestations: Pacific" }, 179 + { 0x534307FF, "Batman: Arkham Asylum" }, 180 + { 0x53430800, "Battlestations: Pacific" }, 181 + { 0x5343080C, "Batman: AA GOTY" }, 182 + { 0x53430813, "ChampionshipManager 10" }, 183 + { 0x53430814, "Tomb Raider Underworld" }, 184 + { 0x534507F0, "Universe at War: Earth Assault" }, 185 + { 0x534507F6, "The Club" }, 186 + { 0x53450826, "Stormrise" }, 187 + { 0x5345082C, "Vancouver 2010" }, 188 + { 0x53450849, "Alpha Protocol" }, 189 + { 0x5345084E, "Football Manager 2010" }, 190 + { 0x53450854, "Rome: Total War" }, 191 + { 0x53450FA0, "Football Manager 2011" }, 192 + { 0x53450FA1, "Dreamcast Collection" }, 193 + { 0x53450FA2, "Virtua Tennis 4" }, 194 + { 0x53460FA0, "A Vampyre Story" }, 195 + { 0x53460FA1, "Ankh 2" }, 196 + { 0x53460FA2, "Ankh 3" }, 197 + { 0x53460FA3, "Rise of Flight: ICE" }, 198 + { 0x535007E3, "Section 8" }, 199 + { 0x53510FA0, "Deus Ex: GotY" }, 200 + { 0x53510FA1, "Deus Ex: Invisible War" }, 201 + { 0x53510FA2, "Hitman: Blood Money" }, 202 + { 0x53510FA3, "Thief: Deadly Shadows" }, 203 + { 0x53510FA4, "Hitman 2: SA" }, 204 + { 0x53510FA5, "MINI NINJAS" }, 205 + { 0x53510FA6, "Tomb Raider:Legend" }, 206 + { 0x53510FA7, "Tomb Raider: Anniv." }, 207 + { 0x53510FA8, "Battlestations: Midway" }, 208 + { 0x53510FA9, "Conflict: Denied Ops" }, 209 + { 0x53510FAA, "Project: Snowblind" }, 210 + { 0x544707D4, "Section 8: Prejudice" }, 211 + { 0x5451081F, "Juiced 2: Hot Import Nights" }, 212 + { 0x5451082D, "Warhammer 40,000: Dawn of War 2: Chaos Rising" }, 213 + { 0x54510837, "Red Faction: Guerrilla" }, 214 + { 0x54510868, "DoW II: Chaos Rising" }, 215 + { 0x54510871, "Saints Row 2" }, 216 + { 0x54510872, "S.T.A.L.K.E.R." }, 217 + { 0x5451087F, "Dawn of War" }, 218 + { 0x54510880, "DoW - Dark Crusade" }, 219 + { 0x54510881, "Supreme Commander" }, 220 + { 0x54510882, "Supreme Commander: Forged Alliance" }, 221 + { 0x5454083B, "Grand Theft Auto IV" }, 222 + { 0x5454085C, "BioShock 2" }, 223 + { 0x5454086E, "GTA IV: EFLC" }, 224 + { 0x54540873, "Borderlands" }, 225 + { 0x54540874, "Civ IV: Complete" }, 226 + { 0x54540876, "GTA San Andreas" }, 227 + { 0x54540877, "GTA: Vice City" }, 228 + { 0x54540878, "Max Payne 2" }, 229 + { 0x54540879, "Max Payne" }, 230 + { 0x5454087B, "BioShock" }, 231 + { 0x54540880, "Bully Scholarship Ed." }, 232 + { 0x54540881, "Grand Theft Auto III" }, 233 + { 0x54590FA0, "RIFT" }, 234 + { 0x54590FA1, "RIFT CE" }, 235 + { 0x54590FA2, "RIFT AoH CE" }, 236 + { 0x554C0FA0, "4 Elements" }, 237 + { 0x554C0FA1, "Gardenscapes" }, 238 + { 0x554C0FA2, "Call of Atlantis" }, 239 + { 0x554C0FA3, "Around the World in 80" }, 240 + { 0x554C0FA4, "Fishdom: Spooky Splash" }, 241 + { 0x55530855, "Prince of Persia: TFS" }, 242 + { 0x55530856, "Assassin's Creed II" }, 243 + { 0x55530857, "SplinterCellConviction" }, 244 + { 0x55530859, "Prince of Persia: WW" }, 245 + { 0x5553085A, "Prince of Persia: SoT" }, 246 + { 0x5553085B, "The Settlers 7" }, 247 + { 0x5553085E, "Assassin's Creed" }, 248 + { 0x5553085F, "World In Conflict" }, 249 + { 0x55530860, "Dawn of Discovery Gold" }, 250 + { 0x55530861, "Prince of Persia" }, 251 + { 0x55530862, "TC's RainbowSix Vegas2" }, 252 + { 0x55530864, "GRAW 2" }, 253 + { 0x55530865, "Far Cry 2" }, 254 + { 0x55530866, "Silent Hunter 5" }, 255 + { 0x55530FA0, "Prince of Persia: TT" }, 256 + { 0x55530FA1, "Tom Clancy's H.A.W.X.2" }, 257 + { 0x55530FA2, "Shaun White Skate" }, 258 + { 0x55530FA3, "AC Brotherhood" }, 259 + { 0x55530FA4, "AC Brotherhood Deluxe" }, 260 + { 0x55530FA6, "From Dust" }, 261 + { 0x57520806, "F.E.A.R. 2" }, 262 + { 0x57520808, "LEGO Batman" }, 263 + { 0x57520809, "LEGO Harry Potter: Years 1-4" }, 264 + { 0x57520FA0, "Batman: Arkham City" }, 265 + { 0x57520FA1, "LEGO Universe" }, 266 + { 0x57520FA2, "Mortal Kombat Arcade Kollection" }, 267 + { 0x57520FA3, "Gotham City Impostors" }, 268 + { 0x584109EB, "Tinker" }, 269 + { 0x584109F0, "World of Goo" }, 270 + { 0x584109F1, "Mahjong Wisdom" }, 271 + { 0x58410A01, "Where's Waldo" }, 272 + { 0x58410A10, "Osmos" }, 273 + { 0x58410A1C, "Carneyvale Showtime" }, 274 + { 0x58410A6D, "Blacklight: Tango Down" }, 275 + { 0x585207D1, "XLive" }, 276 + { 0x5A450FA0, "Battle vs. Chess" }, 277 + { 0x5A450FA1, "Two Worlds II" }, 278 + { 0x5A500FA1, "Kona's Crate" } 279 + }; 280 + 35 281 public static Dictionary<uint, KnownTitle> KnownTitles = new Dictionary<uint, KnownTitle>(); 36 282 37 283 public static void FoundTitleExists(uint titleID) 38 284 { 39 285 if (!KnownTitles.ContainsKey(titleID)) 40 286 KnownTitles[titleID] = new KnownTitle(titleID); 287 + if (TitleNameDatabase.ContainsKey(titleID)) 288 + KnownTitles[titleID].Name = TitleNameDatabase[titleID]; 41 289 } 42 290 43 291 public static void FoundTitleName(uint titleID, string name) ··· 114 362 } 115 363 } 116 364 return null; 365 + } 366 + 367 + public static void WriteConfigSector(uint titleID, int sectorID, byte[] data) 368 + { 369 + byte[] sector = new byte[0x1EC]; 370 + Buffer.BlockCopy(data, 0, sector, 0, data.Length); 371 + 372 + byte[] protectedSector = new byte[0x400]; 373 + byte[] protectedSectorBytes = ProtectedData.Protect(sector, null, DataProtectionScope.CurrentUser); 374 + Buffer.BlockCopy(protectedSectorBytes, 0, protectedSector, 0, protectedSectorBytes.Length); 375 + 376 + string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), 377 + $"Microsoft\\Xlive\\Titles\\{titleID:X8}\\config.bin"); 378 + byte[] configData = null; 379 + if (File.Exists(configPath)) 380 + configData = File.ReadAllBytes(configPath); 381 + else 382 + configData = new byte[0x5000]; 383 + Buffer.BlockCopy(protectedSector, 0, configData, sectorID * 0x400, protectedSector.Length); 384 + File.WriteAllBytes(configPath, configData); 117 385 } 118 386 } 119 387 }