From 29752be51c3b11fe7cfdd215e65d10c009c5ce56 Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Mon, 25 Nov 2024 17:38:41 +0100 Subject: [PATCH] refs #1166 add ogWindowsRegisterPartition() --- client/lib/engine/bin/BootLib.py | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/client/lib/engine/bin/BootLib.py b/client/lib/engine/bin/BootLib.py index dddc291..a8ce397 100644 --- a/client/lib/engine/bin/BootLib.py +++ b/client/lib/engine/bin/BootLib.py @@ -6,6 +6,7 @@ #@warning License: GNU GPLv3+ #*/ +import os import re import tempfile import subprocess @@ -16,6 +17,7 @@ import FileSystemLib import RegistryLib import DiskLib import InventoryLib +import FileLib #/** # ogBoot int_ndisk int_nfilesys [ NVRAMPERM ] [str_kernel str_initrd str_krnlparams] @@ -312,6 +314,51 @@ boot_entry=Herramienta de diagnstico de memoria de Windows #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. #*/ ## +#ogWindowsRegisterPartition ("1", "1", "c:", "1", "1") +def ogWindowsRegisterPartition (registered_disk, registered_par, registered_vol, disk, par): + registered_vol = registered_vol[0].upper() + tmpfile = tempfile.NamedTemporaryFile (prefix='ogWBP-', mode='w').name + + if not DiskLib.ogDiskToDev (registered_disk, registered_par): + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, 'particion a registrar') + return + + if not DiskLib.ogDiskToDev (disk, par): + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, 'particion de windows') + return + + t = InventoryLib.ogGetOsType (disk, par) + if 'Windows' not in t: + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTOS, 'no es windows') + return + + v = InventoryLib.ogGetOsVersion (disk, par) + + if FileLib.ogGetPath (src=f'{disk} {par}', file='WINDOWS'): + systemroot = 'Windows' + elif FileLib.ogGetPath (src=f'{disk} {par}', file='WINNT'): + systemroot = 'winnt' + else: + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTOS, '') + return + + FileSystemLib.ogUnmount (disk, par) + disk0 = str (int (disk) - 1) + registered_disk0 = str (int (registered_disk) - 1) + + with open (tmpfile, 'w') as fd: + fd.write (f"""windows_disk={disk0} +windows_main_part={par} +windows_dir={systemroot} +disk={registered_disk0} +main_part={registered_par} +;ext_part +part_letter={registered_vol} +""") + subprocess.run (['timeout', '--foreground', '--signal=SIGKILL', '5s', 'spartlnx.run', '-cui', '-nm', '-w', '-f', tmpfile], stdin=subprocess.DEVNULL) + + os.remove (tmpfile) + #/** # ogGrubInstallMbr int_disk_GRUBCFG int_partition_GRUBCFG