Windows 7 Forums
Welcome to Windows 7 Forums. Our forum is dedicated to helping you find support and solutions for any problems regarding your Windows 7 PC be it Dell, HP, Acer, Asus or a custom build. We also provide an extensive Windows 7 tutorial section that covers a wide range of tips and tricks.

Windows 7: How to change boot animation in Windows 7

14 Mar 2011   #681

Windows 7 Ultimate x64

Do u think it's worth testing? I don't know to test this sort of stuff, so I am at the mercy of you and Joakim

My System SpecsSystem Spec
14 Mar 2011   #682

Windows 7 Ultimate x32

Main problem is that x,y position of animation in pixels is still hardcoded in ntoskrnl, thus if you'll want it to be not moved down-right with lower resolution and to keep it centered, you'll still need to modify ntoskrnl. I suppose this is the reason why MS disabled animation on 800x600 resolution mode (this mode can be force-enabled by bcdedit command, btw).
My System SpecsSystem Spec
14 Mar 2011   #683


A smaller sized image will not affect the screen resolution, however I suppose the resolution should be able to be forced somehow, by modifying code. Just don't know how right now.

I think a forced SOS printing could be a nice addition. What I did:
1. Create a basic template like;
<xsl:template match="osload-sos">
<body background-color="RXBI" foreground-color="XXXX">
<p pad-left="8" pad-right="8">
<textarea name="file-info" scroll="true" width="68" height="1"/>
2. At 004014CC write 90909090909090909090 (x10). This will force a spoofed SOS switch and display the driver printings. It will thus allow for the kernel to play the animation as well since the 26000091 parameter is not brought further to the loaderblock, unless you actually booted with the SOS on in your BCD (can be resolved though, but don't think it's necessary).

3. Next trick is to inject the background image after the first layer (background) of the xml stuff is drawn, so that the driver printing is on top of the image and not the boring xsl drawing. At 004014E0 (right after the call to BlXmiWrite in OslpMain) make a jump to your bitmapdrawing function. Since I also wanted a custom copyright message on top of the bitmap, a added code right after you bitmapdrawing function to first call bitmapdrawing and then the copyrightdrawing, before jumping back into OslpMain. Now the osload-sos template is shown only as specified with width and height in you body. For the sake of the test I also drew a custom startup text on an empty black screen before the background image, but the copyright/startuptext stuff was added after the video was uploaded..

But don't seem to get any transparency with the alpha channel on my copyright. It is like transparency don't work and FF is forced on.
My System SpecsSystem Spec

15 Mar 2011   #684

Windows 7 Ultimate

If the resulution of the animation images went from 200x200 to 100x100 will that make the animation smaller or will it crash?
My System SpecsSystem Spec
15 Mar 2011   #685


Quote   Quote: Originally Posted by RBCC View Post
If the resulution of the animation images went from 200x200 to 100x100 will that make the animation smaller or will it crash?
I don't know, only tried with bigger ones.
My System SpecsSystem Spec
15 Mar 2011   #686

Windows 7 Ultimate x64

or you could just make a smaller animation on the standard animation strip, giving the impression the animation is actually smaller, but there would be no hacks nessicary, thaimin wouldnt have to add any more hacks, which would be easier in the long run
My System SpecsSystem Spec
15 Mar 2011   #687

Windows 7 Pro 64 / 7 Pro 64 / 7 Home Prem 64

I don't know about forced SOS, but make it so that if SOS is also enabled, it looks good. So no step 2, but I will have to reread your step 3 with the code in front of me to think about that more. In any case, not going to be supported for the next version (coming in a few days). Sad to hear about the alpha channel.

If you use my program, it will only save the "proper" animation size, regardless of what you give it. If you were to manually do it, and speculating from joakim's previous work with larger images, you would see four frames in a square for each 'standard' frame. Then at about frame 26 it would probably crash.

I know people were having problems with integrating the modified files into install.wim / boot.wim. Well, if you could, I would like you to try out a new tool I made.

The tool allows you to self-sign things, generating a custom certificate for you. It then lets you install this custom certificate into the registry of the to-be-installed computer. I think that the installer just wants those modified files to be signed. If this is true, I will add a cleaner system for this situation, but for now, please test this out.


To use it:
  • Download the signer (or signer64 and rename to signer)
  • Download the example script and extract it
  • Open the example script in Notepad
  • Edit the "locale" and "name" in the script (close to the top)
  • Set the "root" to the mounted folder of the WIM, or alternatively run the program from the command line with the mounted folder as an argument
  • Repeat last step for both boot.wim images and the desired install.wim image
  • Each time you should see 5 notifications that it successfully signed the files and 2 notifications that it installed the certificate
Please tell me if this makes it work! Thanks!
My System SpecsSystem Spec
15 Mar 2011   #688

Windows 7 Ultimate

besides the books aforementioned, could someone give ideas of any books that could help me get up to speed on this? There is no way to reposition the animation?

Is this doing this:

Set the position to draw at 0, 0 and get a pointer to the “POINT” structure
and [ebp+EC], 0 ; 83 65 [EC] [00]
and [ebp+F0], 0 ; 83 65 [F0] [00]
lea eax, [ebp+EC] ; 8D 45 [EC]

Or which file helps in this matter?

My System SpecsSystem Spec
15 Mar 2011   #689


Thaimin you are right. It is much better to not force it on, and let the user choose it in the bootmenu. Instead we can modify the code slightly inside OslDisplayInitialize (this is necessary), by changing this
.text:004061A6                 push    26000091h (68 91 00 00 26)
to something invalid like
.text:004061A6                 push    99999999h (68 99 99 99 99)
But we still need to make a jump to some custom code at 4014e0. Original code;

.text:004014E0                 lea     eax, [ebp+arg_0]  (8D 45 08)
.text:004014E3                 push    eax               (50)
.text:004014E4                 push    ebx               (53)
changed to;
.text:004014E0                 jmp     loc_4573B7 (E9 D2 5E 05 00)
and the custom code was placed right behind your bitmapdrawing function;
.text:004573B7                 call    sub_457370   (new bitmap function)
.text:004573BC                 call    sub_443823   (copyright)
.text:004573C1                 lea     eax, [ebp+arg_0]
.text:004573C4                 push    eax
.text:004573C5                 push    ebx
.text:004573C6                 jmp     loc_4014E5  (back to OslpMain to load SYSTEM hive)
I don't know how many times I have to tell you this, but you have to read the first post. There you will find information on how to reposition the animation. The code you refer to is for the coordinates of the bitmap as drawn by winload.exe. You really need to do some studying to understand how reverse engineering works. Besides that you also might want to know the internals of the Windows boot process. Since you have recognized the links you also have a reference for the best book about that. Regarding reverse engineering, you really have to start learning using hex editors, disassemblers, debuggers, pe editors, and assembler. I am not at all a pro, but it still took me quite some time (years). It is simply not done over a weekend. For testing you need to start using virtualization like VMware Workstation or Player, else it will take about forever to test all mods on real hardware. Relevant part of first post;
Animation parameters:
Some animation parameters can also be tweaked (thanks to AlexYM). As the actual animation is played by the kernel we must patch it to modify these values.
The relevant function is ResFwpGetProgressIndicatorAnimation and this how it looks like in IDA for ntkrnlpa.exe;
PAGEBGFX:00748C97                 mov     eax, 0C8h
PAGEBGFX:00748C9C                 lea     edi, [esi+0Ch]
PAGEBGFX:00748C9F                 mov     dword ptr [esi], 1
PAGEBGFX:00748CA5                 mov     dword ptr [esi+4], 19Ch
PAGEBGFX:00748CAC                 mov     dword ptr [esi+8], 11Ch
PAGEBGFX:00748CB3                 mov     [esi+10h], eax
PAGEBGFX:00748CB6                 mov     [edi], eax
PAGEBGFX:00748CB8                 mov     dword ptr [esi+18h], 0Fh
PAGEBGFX:00748CBF                 mov     dword ptr [esi+1Ch], 69h
PAGEBGFX:00748CC6                 mov     dword ptr [esi+24h], 3Ch
Explanation after converting from hex to decimal:

At 00748C97 we find the frame's width and height as C8 = 200.
At 00748CA5 we find the x position of the frame as 19C = 412.
At 00748CAC we find the y position of the frame as 11C = 284.
At 00748CB8 we find the framerate (per sec) as 0F = 15.
At 00748CBF we find the total number of frames as 69 = 105.
At 00748CC6 we find the number of first unlooping frames as 3C = 60
So I made another stupid animation hack that is more annoying than elegant. Setting framerate to 78 (4e) and the number of first looping frames to 57 (39) will let you see the crystal balls start flying and when they are done (before they melt together) it will start over again. Really annoying to look at, especially when this repeates itself 19 times!
It is the stuff about x and y position you are asking about. If you have not figured out by now, you will need to modify the kernel, for instance ntoskrnl.exe. Good luck!

My System SpecsSystem Spec
15 Mar 2011   #690

Windows 7 Pro 64 / 7 Pro 64 / 7 Home Prem 64

I just noticed something about that code. It may be possible to set width and height independent of each other.

mov     eax, 0C8h
lea     edi, [esi+0Ch]
mov     [esi+10h], eax
mov     [edi], eax
which is essentially

mov     [esi+10h], 0C8h
mov     [esi+0Ch], 0C8h
Thus it looks like the width and height could be set separately from one another (although it isn't an easy drop-in replacement anymore).
My System SpecsSystem Spec

 How to change boot animation in Windows 7

Thread Tools

Similar help and support threads
Thread Forum
How di I change boot animation and text?
Hey! So I have been wanting to change my boot/startup logo from the default windows logo with "starting windows" and Microsoft text. So after many google attempts i have stumbled upon an application, BootUpdater. This program supposedly can easily change the windows animations and is exactly...
How do I change windows7 boot animation when resolution 800X600
Hello , I already know change windows7 boot animation need access bootres.dll and winload.exe.mui. But if resolution below 1024X768 it seem different. Can anybody teach me which file need be change, Thank you a lot! Ps. I know my English is terrible , I hope it can be understood.
Boot screen Animation Change?
I don't know if this one can be done. I know how to turn off the ding sound it makes when my computer boots up but does anyone know how to change the boot screen animation? I would like to put one of my own animations on there instead of the windows logo popping up from 4 little lights.
Windows 7 Home premium 64bit won't boot, just plays boot animation
My Windows 7 has stopped booting after a restart, the system would just endlessly play the boot animation and not boot properly... system restore won't work, startup repair won't work, chdsk and sfc won't work. I have yet to try and see whether a Registry fix works. Windows loads the WRE VERY...
BSOD Help and Support
How to change the boot screen animation?
Has anyone figured out how to change the boot animation? John

Our Sites

Site Links

About Us

Find Us

Windows 7 Forums is an independent web site and has not been authorized, sponsored, or otherwise approved by Microsoft Corporation. "Windows 7" and related materials are trademarks of Microsoft Corp.

© Designer Media Ltd

All times are GMT -5. The time now is 03:28.
Twitter Facebook Google+