diff --git a/image_creator/os_type/windows/__init__.py b/image_creator/os_type/windows/__init__.py
index a79f8f43f2c18e22b3c6f131127a43d93707e551..2267aac8d701ea014b890f543d346df64a33c4c9 100644
--- a/image_creator/os_type/windows/__init__.py
+++ b/image_creator/os_type/windows/__init__.py
@@ -563,36 +563,72 @@ class Windows(OSBase):
                          % retries)
 
     def _virtio_state(self):
-        """Check if the virtio drivers are install and return the version of
-        the installed driver
+        """Check if the virtio drivers are install and return the information
+        about the installed driver
         """
 
-        catalogfile_entry = re.compile(r'^\s*CatalogFile\s*=')
-        driverver_entry = re.compile(r'^\s*DriverVer\s*=')
         inf_path = self.image.g.case_sensitive_path("%s/inf" % self.systemroot)
 
         state = {}
         for driver in VIRTIO:
-            state[driver] = []
-
-        def examine_inf(filename):
-            catalogFile = None
-            driverVer = None
+            state[driver] = {}
+
+        def parse_inf(filename):
+            """Parse a Windows INF file and fetch all information found in the
+            Version section.
+            """
+            version = {}  # The 'Version' section
+            strings = {}  # The 'Strings' section
+            section = ""
+            current = None
+            prev_line = ""
             fullpath = "%s/%s" % (inf_path, filename)
             for line in self.image.g.cat(fullpath).splitlines():
-                if catalogfile_entry.match(line):
-                    catalogFile = line.split("=")[1].strip().lower()
-                elif driverver_entry.match(line):
-                    driverVer = line.split("=")[1].strip()
-
+                line = prev_line + line.strip().split(';')[0].strip()
+                prev_line = ""
+
+                if not len(line):
+                    continue
+
+                if line[-1] == "\\":
+                    prev_line = line
+                    continue
+
+                # Does the line denote a section?
+                if line.startswith('[') and line.endswith(']'):
+                    section = line[1:-1].lower()
+                    if section == 'version':
+                        current = version
+                    if section == 'strings':
+                        current = strings
+
+                # We only care about 'version' and 'string' sections
+                if section not in ('version', 'strings'):
+                    continue
+
+                # We only care about param = value lines
+                if line.find('=') < 0:
+                    continue
+
+                param, value = line.split('=', 1)
+                current[param.strip()] = value.strip()
+
+            # Replace all strkey tokens with their actual value
+            for k, v in version.items():
+                if v.startswith('%') and v.endswith('%'):
+                    strkey = v[1:-1]
+                    if strkey in strings:
+                        version[k] = strings[strkey]
+
+            cat = version['CatalogFile'] if 'CatalogFile' in version else ""
             for driver in VIRTIO:
-                if catalogFile == "%s.cat" % driver:
-                    state[driver].append((filename, driverVer))
+                if cat.lower() == "%s.cat" % driver:
+                    state[driver][filename] = version
 
         oem = re.compile(r'^oem\d+\.inf', flags=re.IGNORECASE)
         for f in self.image.g.readdir(inf_path):
             if oem.match(f['name']):
-                examine_inf(f['name'])
+                parse_inf(f['name'])
 
         return state