For lines that contain a single field, the field is also the line key
(thanks to Aric Stewart).

diff --git a/dlls/setupapi/parser.c b/dlls/setupapi/parser.c
index 3fc74e6..a2205c0 100644
--- a/dlls/setupapi/parser.c
+++ b/dlls/setupapi/parser.c
@@ -537,6 +537,21 @@
 }
 
 
+/* close the current line and prepare for parsing a new one */
+static void close_current_line( struct parser *parser )
+{
+    struct line *cur_line = parser->line;
+
+    if (cur_line)
+    {
+        /* if line has a single field and no key, the field is the key too */
+        if (cur_line->nb_fields == 1 && cur_line->key_field == -1)
+            cur_line->key_field = cur_line->first_field;
+    }
+    parser->line = NULL;
+}
+
+
 /* handler for parser LINE_START state */
 static const WCHAR *line_start_state( struct parser *parser, const WCHAR *pos )
 {
@@ -548,7 +563,7 @@
         {
         case '\n':
             parser->line_pos++;
-            parser->line = NULL;  /* start a new line */
+            close_current_line( parser );
             break;
         case ';':
             push_state( parser, LINE_START );
@@ -568,6 +583,7 @@
             break;
         }
     }
+    close_current_line( parser );
     return NULL;
 }