Sometimes, you might need to patch a file using grub4dos - i.e. replace some bytes in a file with different bytes.
Here is an example of how to do this.
This example patches the boot sector that is created when you run XP Setup winnt.exe. This boot sector is used on the first boot to XP Setup after the Winnt files have been installed to the hard disk.
set OS=
set BT=
if exist (hd0,0)/$WIN_NT$.~BT/BOOTSECT.DAT set BT=(hd0,0)/$WIN_NT$.~BT/BOOTSECT.DAT
if exist (hd1,0)/$WIN_NT$.~BT/BOOTSECT.DAT set BT=(hd1,0)/$WIN_NT$.~BT/BOOTSECT.DAT
if exist (hd1,1)/$WIN_NT$.~BT/BOOTSECT.DAT set BT=(hd1,1)/$WIN_NT$.~BT/BOOTSECT.DAT
if exist (hd1,2)/$WIN_NT$.~BT/BOOTSECT.DAT set BT=(hd1,2)/$WIN_NT$.~BT/BOOTSECT.DAT
if "%BT%"=="" pause --wait=3 Cannot find /$WIN_NT$.~BT/BOOTSECT.DAT && configfile /menu.lst
# detect OS
cat --skip=3 --length=0x52 --locate=FAT32 %BT% > nul && set OS=FAT32
cat --skip=3 --length=8 --locate=MSWIN4.1 %BT% > nul && set OS=FAT32
cat --skip=3 --length=8 --locate=MSDOS5.0 %BT% > nul && set OS=FAT32
cat --skip=3 --length=4 --locate=NTFS %BT% > nul && set OS=NTFS
if "%OS%"=="" pause --wait=3 Sorry - can't determine OS of BOOTSECT.DAT && configfile /menu.lst
echo FOUND %OS% at %BT%
cat --hex --length=0xf0 %BT%
set /p ASK=Press Y to patch file (Y/N):
if not /i "%ASK%"=="Y" configfile /menu.lst || echo -e \n\r
echo Patched file is now...
if "%OS%"=="FAT32" cat --skip=0xe6 --locate=\x0f\x82\x4a\x00 --replace=\x90\x90\x90\x90 %BT% > nul
if "%OS%"=="NTFS" cat --skip=0xd9 --locate=\x0f\x82\x3a\x00 --replace=\x90\x90\x90\x90 %BT% > nul
if not "%OS%"=="" cat --hex --length=0xf0 %BT%
echo Finished - press a key to continue...
pause
Note that if run under QEMU or some other emulators, the patch may not work if the volume is marked as 'read-only' by the emulator. For this reason you need to boot and run this grub4dos menu on real hardware.