Check that no version string appear in the final ROM.

The check simulates nt!CmpGetBiosVersion() in order to ensure that
Windows sees the correct versions.

For reference implementation of nt!CmpGetBiosVersion(), see ReactOS:
https://doxygen.reactos.org/d5/dd2/i386_2cmhardwr_8c.html

Reviewed-by: Konrad Rzeszutek Wilk <[email protected]>
Reviewed-by: Arbel Moshe <[email protected]>
Signed-off-by: Sam Eiderman <[email protected]>
Signed-off-by: Liran Alon <[email protected]>
---
 scripts/checkrom.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/scripts/checkrom.py b/scripts/checkrom.py
index 98cdfa7f..a09203fe 100755
--- a/scripts/checkrom.py
+++ b/scripts/checkrom.py
@@ -34,6 +34,31 @@ def check_windows_bios_date(rawdata):
         print("Warning!  No dates were detected in rom.")
         print("   This may cause Windows OS to report incorrect date.")
 
+def check_windows_bios_version(rawdata):
+    versions = []
+    for i in xrange(len(rawdata)):
+        if (rawdata[i+0].isdigit() and
+                rawdata[i+1] == '.' and
+                rawdata[i+2].isdigit()):
+            p = i-1
+            while ((p >= 0) and (p > i+2-127)
+                   and ord(rawdata[p]) >= ord(' ')
+                   and rawdata[p] != '$'):
+                p -= 1
+            version = rawdata[p+1:i+3]
+            for s in ["Ver", "Rev", "Rel",
+                      "v0", "v1", "v2", "v3", "v4",
+                      "v5", "v6", "v7", "v8", "v9",
+                      "v 0", "v 1", "v 2", "v 3", "v 4",
+                      "v 5", "v 6", "v 7", "v 8", "v 9"]:
+                if s in version:
+                    versions.append((rawdata[p+1:i+3], i))
+                    break
+    if len(versions) > 0:
+        print("Warning!  Version strings were detected in rom.")
+        print("   This may cause Windows OS to report incorrect version:")
+        print("   %s" % (versions, ))
+
 def main():
     # Get args
     objinfo, finalsize, rawfile, outfile = sys.argv[1:]
@@ -64,6 +89,7 @@ def main():
 
     # Sanity checks
     check_windows_bios_date(rawdata)
+    check_windows_bios_version(rawdata)
 
     start = symbols['code32flat_start'].offset
     end = symbols['code32flat_end'].offset
-- 
2.13.3
_______________________________________________
SeaBIOS mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to