WIM Meta Daten ändern

  • Hi,
    ich möchte die meta daten eines wim files bearbeiten und zwar die, die imagex nicht unterstützt. <Display Name>Test</Display Name> und <Display Description>Test</Display Description>.

    Ich weiß, dass GImageX diese Funktion hat, aber ich muss wissen wie es das macht!

    Ich habs zuerst mit der Wimgapi UDF versucht
    Dort gibt es ja die Funktion _WIM_SetImageInformation($hImage, $sXML)

    $hImage ist ein handle und $sXML ist "A string representing a Unicode XML file that contains information about the volume image."

    [autoit]

    $swimfile = ;path zum wim file

    [/autoit][autoit][/autoit][autoit]

    SetData($swimfile, "Windows Test", "Windows Test", $WIM_COMPRESS_NONE);
    Set;-----------------------------
    Func SetData($sWimFile, $sImageName, $sImageDesc, $Compress)
    ; first we open the .wim file
    $hWim = _WIM_CreateFile($sWimFile, $WIM_GENERIC_WRITE, $WIM_OPEN_EXISTING, 0, $Compress, 0)
    If $hWim = 0 Then
    MsgBox(48, $ProgramName, "Error: Failed to load wim file. (" & $hWim & "," & @error & "," & @extended & ")")
    Cleanup()
    Exit (252) ; image load failed
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; set our temp path
    $tmpPath = _WIM_SetTemporaryPath($hWim, @TempDir)

    ; start load the image
    $hImage = _WIM_LoadImage($hWim, 4) ; Image Index 4 (Ultimate)
    If @error Then
    MsgBox(48, $ProgramName, "Error: Failed to capture image. (" & $hImage & "," & @error & "," & @extended & " GetLast " & _WinAPI_GetLastError() & ")")
    Cleanup()
    Exit (251) ; image capture failed
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; add our name and description to the XML data - ChrW(65279) is the BOM
    $sXML = ChrW(65279) & "<IMAGE><NAME>" & $sImageName & "</NAME><DESCRIPTION>" & $sImageDesc & "</DESCRIPTION></IMAGE>"

    [/autoit][autoit][/autoit][autoit]

    MsgBox(48, "gfdsg", $sXML)

    [/autoit][autoit][/autoit][autoit]

    _WIM_SetImageInformation($hImage, $sXML)
    ; _WIM_SetBootImage($hWim, 1)

    [/autoit][autoit][/autoit][autoit]

    Cleanup() ; free resources

    [/autoit][autoit][/autoit][autoit]

    EndFunc ;==>SetData

    [/autoit]


    Der Quellcode hab ich von hier und dann abgewandelt.
    http://www.autoitscript.com/forum/topic/127075-wimgapi-udf/


    Inhalt der $sxml ist :

    Zitat

    <IMAGE><NAME>Windows Test</NAME><DESCRIPTION>Windows Test</DESCRIPTION></IMAGE>


    Die Funktion updatet dann auch diesen tag, löscht dafür aber alle anderen tags innerhalb des <Image Index=4></Image> tags. Ansicht ist dann wie in Bild1. Klar kann ich die anderen tags hinzufügen, indem ich $sXML um die anderen tags erweitere (z.B. <Version> etc., siehe Bild2), aber die Funktion setzt in meinem example immer zuerst die tags, die ich im $sXML definiert habe, die tags fürs "Modifizieren" werden darunter angehangen. GImageX schafft es, die Reihenfolge korrekt einzuhalten.

    Würde _WIM_SetImageInformation($hImage, $sXML) nicht die "Modify" tags generieren wäre alles gut, dann könnte ich eine vollständige xml reinladen. Sau blöd, das es keine Update Funktion gibt, die nur den tag setzt und diesen direkt ins wim file schreibt -.-

    Mounten ist keine Lösung, da das xml file ([1].xml, liegt im install.wim) im wim liegt und nicht in den images. 7zip UDF kann nicht aus wim extrahieren. 7zip commandline kann nur extrahieren aber nicht hinzufügen (7zip hat kein support dafür) und eine anderen Möglichkeit kenne ich leider nicht. GImageX "changed" die daten innerhalb von 5 sekunden.

    Hat bitte einer eine Idee!?
    Vielen Dank