diff --git a/FFUDevelopment/Docs/BuildFFUVM_flowchart.md b/FFUDevelopment/Docs/BuildFFUVM_flowchart.md new file mode 100644 index 0000000..e4d1691 --- /dev/null +++ b/FFUDevelopment/Docs/BuildFFUVM_flowchart.md @@ -0,0 +1,128 @@ +```mermaid +graph TD + subgraph "Start & Initialization" + A[Start] --> B{Load ConfigFile?}; + B --> C[Process Parameters]; + C --> D{Validate Parameters}; + D --> E{"dirty.txt exists?"}; + E -- Yes --> F[Run Cleanup Routine]; + F --> G["Create new dirty.txt"]; + E -- No --> G; + end + + G --> H{"-InstallDrivers or -CopyDrivers?"}; + + subgraph "Pre-Build Preparations" + H -- Yes --> I{Driver Source?}; + I -- "-DriversJsonPath" --> J[Download Drivers via JSON in Parallel]; + I -- "-Make and -Model" --> K[Download Drivers for specific Make/Model]; + I -- "Local Folder" --> L[Use Existing Drivers in Drivers Folder]; + + subgraph "ADK & WinPE" + M[Check for ADK & WinPE Add-on]; + M --> N{Latest Version Installed?}; + N -- No --> O[Uninstall Old & Install Latest ADK/WinPE]; + N -- Yes --> P[Get ADK Path]; + O --> P; + end + + Q{"-InstallApps?"}; + subgraph "Application & In-VM Content Preparation" + direction LR + R[Check for existing downloaded apps]; + R --> S{Download missing WinGet apps}; + S --> T{"-InstallOffice?"}; + T -- Yes --> U[Download ODT & Office content]; + T -- No --> V[Continue]; + U --> V; + V --> W["Download in-VM updates: Defender, MSRT, etc."]; + W --> X["Create Apps.iso"]; + end + end + + J --> M; + K --> M; + L --> M; + H -- No --> M; + P --> Q; + Q -- Yes --> R; + X --> Y; + Q -- No --> Y{"-AllowVHDXCaching?"}; + + subgraph "VHDX Management" + Y -- Yes --> Z[Check for matching cached VHDX]; + Z --> AA{Cache Hit?}; + AA -- Yes --> AB[Use Cached VHDX]; + AA -- No --> AC[Create New VHDX]; + Y -- No --> AC; + + subgraph "VHDX Creation Workflow" + AC --> AD{ISOPath provided?}; + AD -- No --> AE[Download Windows ESD media]; + AD -- Yes --> AF[Use provided ISO]; + AE --> AG[Create & Partition VHDX]; + AF --> AG; + AG --> AH[Apply Base Windows Image to VHDX]; + AH --> AI{"Updates specified? (CU, dotNET, etc.)"}; + AI -- Yes --> AJ[Apply Updates to Offline VHDX]; + AJ --> AK[Run Component Cleanup]; + AI -- No --> AK; + AK --> AL{"Optional Features specified?"}; + AL -- Yes --> AM[Enable Optional Features]; + AL -- No --> AN[Finalize VHDX Setup]; + AM --> AN; + AN --> AO{"-AllowVHDXCaching?"}; + AO -- Yes --> AP[Optimize and Copy VHDX to Cache]; + AO -- No --> AQ[Continue]; + AP --> AQ; + end + end + + AB --> BA; + AQ --> BA{"-InstallApps?"}; + + subgraph "FFU Creation" + subgraph "VM-Based Capture (-InstallApps)" + direction LR + BB[Create Hyper-V VM from VHDX]; + BB --> BC["Create WinPE Capture Media iso"]; + BC --> BD[Configure network share for capture]; + BD --> BE["Start VM: Boots to Audit Mode"]; + BE --> BF[Orchestrator runs: Installs apps, syspreps, shuts down]; + BF --> BG[VM reboots from Capture Media]; + BG --> BH["CaptureFFU.ps1 runs, saves FFU to share, shuts down"]; + end + + subgraph "Direct VHDX Capture" + BI[Capture FFU directly from VHDX using DISM]; + end + end + + BA -- Yes --> BB; + BA -- No --> BI; + + subgraph "Post-Processing & Media Creation" + BK{"-InstallDrivers?"}; + BK -- Yes --> BL[Mount FFU & Inject Drivers]; + BK -- No --> BM[Continue]; + BL --> BM; + BM --> BN{"-Optimize?"}; + BN -- Yes --> BO[Optimize FFU using DISM]; + BN -- No --> BP[Continue]; + BO --> BP; + BP --> BQ{"-BuildUSBDrive?"}; + BQ -- Yes --> BR[Create WinPE Deployment Media]; + BR --> BS["Partition USB Drive(s)"]; + BS --> BT[Copy FFU, Deploy scripts & other assets to USB]; + BQ -- No --> BU[Continue]; + BT --> BU; + end + + BH --> BK; + BI --> BK; + + subgraph "Final Cleanup" + BU --> BV[Cleanup VM, VHDX, temp files]; + BV --> BW["Remove dirty.txt"]; + BW --> BX[End]; + end \ No newline at end of file