mirror of
				https://github.com/brain-hackers/brainlilo
				synced 2025-11-04 14:38:35 +09:00 
			
		
		
		
	Detect the appropriate binary and load it
This commit is contained in:
		@@ -42,6 +42,7 @@
 | 
				
			|||||||
#define BRAINLILODRV_API __declspec(dllexport)
 | 
					#define BRAINLILODRV_API __declspec(dllexport)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "BrainLILODrv.h"
 | 
					#include "BrainLILODrv.h"
 | 
				
			||||||
 | 
					#include "models.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define FILE_DEVICE_POWER FILE_DEVICE_ACPI
 | 
					#define FILE_DEVICE_POWER FILE_DEVICE_ACPI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -185,29 +186,19 @@ __attribute__((noreturn)) static DWORD EDNA2_callKernelEntryPoint()
 | 
				
			|||||||
    EDNA2_runPhysicalInvoker();
 | 
					    EDNA2_runPhysicalInvoker();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ShowMessage(std::string msg, std::string title, UINT typ)
 | 
					static void ShowMessage(std::wstring msg, std::wstring title, UINT typ)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    void *bufMsg;
 | 
					    MessageBox(NULL, msg.c_str(), title.c_str(), typ);
 | 
				
			||||||
    void *bufTitle;
 | 
					 | 
				
			||||||
    bufMsg = LocalAlloc(LPTR, msg.length() * sizeof(wchar_t));
 | 
					 | 
				
			||||||
    bufTitle = LocalAlloc(LPTR, title.length() * sizeof(wchar_t));
 | 
					 | 
				
			||||||
    mbstowcs((wchar_t *)bufMsg, msg.c_str(), msg.length());
 | 
					 | 
				
			||||||
    mbstowcs((wchar_t *)bufTitle, title.c_str(), title.length());
 | 
					 | 
				
			||||||
    MessageBox(NULL, (wchar_t *)bufMsg, (wchar_t *)bufTitle, typ);
 | 
					 | 
				
			||||||
    LocalFree(bufMsg);
 | 
					 | 
				
			||||||
    LocalFree(bufTitle);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool doLinux()
 | 
					static bool doLinux()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wchar_t wcBuf[256] = {};
 | 
					    std::wifstream iVersion;
 | 
				
			||||||
 | 
					    std::wstring line, model;
 | 
				
			||||||
 | 
					    std::wregex modelRe(L"[A-Z]{2}-[A-Z0-9]+");
 | 
				
			||||||
 | 
					    std::wsmatch match;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::ifstream iVersion;
 | 
					    std::wstring fn(L"\\Storage Card\\loader\\");
 | 
				
			||||||
    std::string line, model;
 | 
					 | 
				
			||||||
    std::regex modelRe("[A-Z]{2}-[A-Z0-9]+");
 | 
					 | 
				
			||||||
    std::smatch match;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    std::string fn("\\Storage Card\\loader\\");
 | 
					 | 
				
			||||||
    HANDLE hUBoot;
 | 
					    HANDLE hUBoot;
 | 
				
			||||||
    DWORD wReadSize;
 | 
					    DWORD wReadSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -223,20 +214,30 @@ static bool doLinux()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (model.length() == 0)
 | 
					    if (model.length() == 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        outputDebugMessage(L"Failed to match the model name");
 | 
					        outputDebugMessage(L"BrainLILO: Failed to match the model name");
 | 
				
			||||||
        ShowMessage("Failed to match the model name", "BrainLILO", MB_ICONWARNING);
 | 
					        MessageBox(NULL, L"Failed to match the model name", L"BrainLILO", MB_ICONWARNING);
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    outputDebugMessage(L"BrainLILO: Opening Bootloader file...");
 | 
					    outputDebugMessage(L"BrainLILO: Internal model name: %s", model.c_str());
 | 
				
			||||||
    fn += model + ".bin";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mbstowcs(wcBuf, fn.c_str(), fn.length());
 | 
					    auto iter = models.find(model);
 | 
				
			||||||
    hUBoot = CreateFile(wcBuf, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 | 
					    if (iter != models.end())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        model = iter->second;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        outputDebugMessage(L"BrainLILO: Internal model name %s is unknown, falling back to u-boot.bin", model.c_str());
 | 
				
			||||||
 | 
					        model = L"u-boot.bin";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn += model;
 | 
				
			||||||
 | 
					    outputDebugMessage(L"BrainLILO: Opening Bootloader file: %s", fn.c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    hUBoot = CreateFile(fn.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 | 
				
			||||||
    if (hUBoot == INVALID_HANDLE_VALUE)
 | 
					    if (hUBoot == INVALID_HANDLE_VALUE)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        outputDebugMessage(L"Could not open the bootloader: %s", wcBuf);
 | 
					        outputDebugMessage(L"BrainLILO: Could not open the bootloader: %s", fn.c_str());
 | 
				
			||||||
        ShowMessage("Could not open the bootloader: " + fn, "BrainLILO", MB_ICONWARNING);
 | 
					        ShowMessage(L"Could not open the bootloader: " + fn, L"BrainLILO", MB_ICONWARNING);
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -249,7 +250,7 @@ static bool doLinux()
 | 
				
			|||||||
    if (!ReadFile(hUBoot, (void *)0xa0000000, FileSize, &wReadSize, NULL))
 | 
					    if (!ReadFile(hUBoot, (void *)0xa0000000, FileSize, &wReadSize, NULL))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        outputDebugMessage(L"Could not read the bootloader");
 | 
					        outputDebugMessage(L"Could not read the bootloader");
 | 
				
			||||||
        ShowMessage("Could not read the bootloader", "BrainLILO", MB_ICONWARNING);
 | 
					        ShowMessage(L"Could not read the bootloader", L"BrainLILO", MB_ICONWARNING);
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    outputDebugMessage(L"BrainLILO: Bootloader copied! Closing file handle...");
 | 
					    outputDebugMessage(L"BrainLILO: Bootloader copied! Closing file handle...");
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										74
									
								
								models.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								models.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					#include <map>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const std::map<std::wstring, std::wstring> models = {
 | 
				
			||||||
 | 
					    {L"ED-CD2",  L"gen1.bin"},   // AC880
 | 
				
			||||||
 | 
					    {L"ED-CD2D", L"gen1.bin"},   // AC830
 | 
				
			||||||
 | 
					    {L"ED-CD1",  L"gen1.bin"},   // TC980
 | 
				
			||||||
 | 
					    {L"ED-CD4",  L"gen1.bin"},   // GC590
 | 
				
			||||||
 | 
					    {L"ED-CD5",  L"gen1.bin"},   // AC890
 | 
				
			||||||
 | 
					    {L"ED-CD6",  L"gen1.bin"},   // AC900
 | 
				
			||||||
 | 
					    {L"ED-CD9",  L"gen1.bin"},   // GC610
 | 
				
			||||||
 | 
					    {L"ED-CD8",  L"gen1.bin"},   // AC910
 | 
				
			||||||
 | 
					    {L"ED-CD10", L"gen1.bin"},   // AC920
 | 
				
			||||||
 | 
					    {L"ED-NJ1",  L"gen1.bin"},   // G4000
 | 
				
			||||||
 | 
					    {L"ED-NS1",  L"gen1.bin"},   // G5000
 | 
				
			||||||
 | 
					    {L"ED-NS1",  L"gen1.bin"},   // HC1
 | 
				
			||||||
 | 
					    {L"ED-NB1",  L"gen1.bin"},   // A9000
 | 
				
			||||||
 | 
					    {L"ED-NA1",  L"gen1.bin"},   // A7000
 | 
				
			||||||
 | 
					    {L"ED-NS1P", L"gen1.bin"},   // G5100
 | 
				
			||||||
 | 
					    {L"ED-NJ2",  L"gen2.bin"},   // G4200
 | 
				
			||||||
 | 
					    {L"ED-NH2",  L"gen2.bin"},   // G5200
 | 
				
			||||||
 | 
					    {L"ED-NH2",  L"gen2.bin"},   // HC2
 | 
				
			||||||
 | 
					    {L"ED-NB2",  L"gen2.bin"},   // A9200
 | 
				
			||||||
 | 
					    {L"ED-NA2",  L"gen2.bin"},   // A7200
 | 
				
			||||||
 | 
					    {L"ED-NA3",  L"gen2.bin"},   // A7300
 | 
				
			||||||
 | 
					    {L"SD-GH1",  L"gen2.bin"},   // GX500
 | 
				
			||||||
 | 
					    {L"ED-NH3",  L"gen2.bin"},   // G5300
 | 
				
			||||||
 | 
					    {L"ED-NH3",  L"gen2.bin"},   // HC3
 | 
				
			||||||
 | 
					    {L"ED-NB3",  L"gen2.bin"},   // A9300
 | 
				
			||||||
 | 
					    {L"ED-NR3",  L"gen2.bin"},   // A9100
 | 
				
			||||||
 | 
					    {L"SD-GJ1",  L"gen2.bin"},   // GX300
 | 
				
			||||||
 | 
					    {L"ED-NQ3",  L"gen2.bin"},   // A7400
 | 
				
			||||||
 | 
					    {L"ED-SJ1",  L"gen3_1.bin"}, // SJ1
 | 
				
			||||||
 | 
					    {L"ED-SH1",  L"gen3_1.bin"}, // SH1
 | 
				
			||||||
 | 
					    {L"ED-HC4",  L"gen3_1.bin"}, // HC4
 | 
				
			||||||
 | 
					    {L"ED-SB1",  L"gen3_1.bin"}, // SB1
 | 
				
			||||||
 | 
					    {L"ED-SA1",  L"gen3_1.bin"}, // SA1
 | 
				
			||||||
 | 
					    {L"ED-SR1",  L"gen3_1.bin"}, // SR1
 | 
				
			||||||
 | 
					    {L"ED-SJ2",  L"gen3_2.bin"}, // SJ2
 | 
				
			||||||
 | 
					    {L"ED-SH2",  L"gen3_2.bin"}, // SH2
 | 
				
			||||||
 | 
					    {L"ED-HC5",  L"gen3_2.bin"}, // HC5
 | 
				
			||||||
 | 
					    {L"ED-SB2",  L"gen3_2.bin"}, // SB2
 | 
				
			||||||
 | 
					    {L"ED-SA2",  L"gen3_2.bin"}, // SA2
 | 
				
			||||||
 | 
					    {L"ED-SJ3",  L"gen3_3.bin"}, // SJ3
 | 
				
			||||||
 | 
					    {L"ED-SH3",  L"gen3_3.bin"}, // SH3
 | 
				
			||||||
 | 
					    {L"ED-HC6",  L"gen3_3.bin"}, // HC6
 | 
				
			||||||
 | 
					    {L"ED-SB3",  L"gen3_3.bin"}, // SB3
 | 
				
			||||||
 | 
					    {L"ED-SA3",  L"gen3_3.bin"}, // SA3
 | 
				
			||||||
 | 
					    {L"ED-SJ4",  L"gen3_4.bin"}, // SJ4
 | 
				
			||||||
 | 
					    {L"ED-SH4",  L"gen3_4.bin"}, // SH4
 | 
				
			||||||
 | 
					    {L"ED-H77",  L"gen3_4.bin"}, // H7700
 | 
				
			||||||
 | 
					    {L"ED-SB4",  L"gen3_4.bin"}, // SB4
 | 
				
			||||||
 | 
					    {L"ED-SA4",  L"gen3_4.bin"}, // SA4
 | 
				
			||||||
 | 
					    {L"ED-SR2",  L"gen3_4.bin"}, // SR2
 | 
				
			||||||
 | 
					    {L"ED-SJ5",  L"gen3_5.bin"}, // SJ5
 | 
				
			||||||
 | 
					    {L"ED-SH5",  L"gen3_5.bin"}, // SH5
 | 
				
			||||||
 | 
					    {L"ED-H78",  L"gen3_5.bin"}, // H7800
 | 
				
			||||||
 | 
					    {L"ED-SB5",  L"gen3_5.bin"}, // SB5
 | 
				
			||||||
 | 
					    {L"ED-SA5",  L"gen3_5.bin"}, // SA5
 | 
				
			||||||
 | 
					    {L"ED-AJ1",  L"gen3_5.bin"}, // AJ1
 | 
				
			||||||
 | 
					    {L"ED-AA1",  L"gen3_5.bin"}, // AA1
 | 
				
			||||||
 | 
					    {L"ED-SH6",  L"gen3_6.bin"}, // SH6
 | 
				
			||||||
 | 
					    {L"ED-SS6",  L"gen3_6.bin"}, // SS6
 | 
				
			||||||
 | 
					    {L"ED-H80",  L"gen3_6.bin"}, // H8000
 | 
				
			||||||
 | 
					    {L"ED-SB6",  L"gen3_6.bin"}, // SB6
 | 
				
			||||||
 | 
					    {L"ED-AJ2",  L"gen3_6.bin"}, // AJ2
 | 
				
			||||||
 | 
					    {L"ED-AA2",  L"gen3_6.bin"}, // AA2
 | 
				
			||||||
 | 
					    {L"ED-SH7",  L"gen3_7.bin"}, // SH7
 | 
				
			||||||
 | 
					    {L"ED-SS7",  L"gen3_7.bin"}, // SS7
 | 
				
			||||||
 | 
					    {L"ED-H91",  L"gen3_7.bin"}, // H9100
 | 
				
			||||||
 | 
					    {L"ED-H81",  L"gen3_7.bin"}, // H8100
 | 
				
			||||||
 | 
					    {L"ED-SB7",  L"gen3_7.bin"}, // SB7
 | 
				
			||||||
 | 
					    {L"ED-SR3",  L"gen3_7.bin"}, // SR3
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Reference in New Issue
	
	Block a user