Hi OSR community… the weirdest thing!
our driver, In DriverEntry, calls RtlGetVersion.
On systems that were upgraded from windows 10 19041 to newer builds of windows 10 (e.g. 19044), RtlGetVersion returns 19041 if the driver has a service start type of SERVICE_BOOT_START or SERVICE_SYSTEM_START.
After research, I found that RtlGetVersion gets the build number from Nt!NtBuildNumber and that the system later calls nt!CmpSetVersionData to change it:
Child-SP RetAddr Call Site
00 fffffd896105a630 fffff806
61b928d0 nt!CmpSetVersionData+0xbebe0
01 fffffd896105a8a0 fffff806
61755a15 nt!CmpFinishSystemHivesLoad+0x6e0
02 fffffd896105ac10 fffff806
617fec78 nt!PspSystemThreadStartup+0x55
03 fffffd896105ac60 00000000
00000000 nt!KiStartSystemThread+0x28
So… does anyone have an idea of a different way to retrieve the correct build number before CmpSetVersionData is called? Or are all boot_start and system_start driver doomed to hold wrong information?