Convert NtQueryKey and NtEnumerateKey to the new request mechanism.
Fixed a few bugs.

diff --git a/server/trace.c b/server/trace.c
index bc3e4ff..b9e02a8 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -94,7 +94,7 @@
     fprintf( stderr, "{code=%lx,flags=%lx,rec=%p,addr=%p,params={",
              rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionRecord,
              rec->ExceptionAddress );
-    for (i = 0; i < rec->NumberParameters; i++)
+    for (i = 0; i < min(rec->NumberParameters,EXCEPTION_MAXIMUM_PARAMETERS); i++)
     {
         if (i) fputc( ',', stderr );
         fprintf( stderr, "%lx", rec->ExceptionInformation[i] );
@@ -156,12 +156,12 @@
 static size_t dump_varargs_unicode_len_str( const void *req )
 {
     const WCHAR *str = get_data(req);
-    WCHAR len = *str++;
+    int len = *str++ + sizeof(WCHAR);
     len = min( len, get_size(req) );
     fprintf( stderr, "L\"" );
-    dump_strW( str, len / sizeof(WCHAR), stderr, "\"\"" );
+    if (len >= sizeof(WCHAR)) dump_strW( str, (len / sizeof(WCHAR)) - 1, stderr, "\"\"" );
     fputc( '\"', stderr );
-    return len + sizeof(WCHAR);
+    return len;
 }
 
 static size_t dump_varargs_unicode_str( const void *req )
@@ -1184,26 +1184,12 @@
 static void dump_enum_key_request( const struct enum_key_request *req )
 {
     fprintf( stderr, " hkey=%d,", req->hkey );
-    fprintf( stderr, " index=%d", req->index );
+    fprintf( stderr, " index=%d,", req->index );
+    fprintf( stderr, " full=%d", req->full );
 }
 
 static void dump_enum_key_reply( const struct enum_key_request *req )
 {
-    fprintf( stderr, " modif=%ld,", req->modif );
-    fprintf( stderr, " name=" );
-    dump_path_t( req, &req->name );
-    fprintf( stderr, "," );
-    fprintf( stderr, " class=" );
-    dump_unicode_string( req, req->class );
-}
-
-static void dump_query_key_info_request( const struct query_key_info_request *req )
-{
-    fprintf( stderr, " hkey=%d", req->hkey );
-}
-
-static void dump_query_key_info_reply( const struct query_key_info_request *req )
-{
     fprintf( stderr, " subkeys=%d,", req->subkeys );
     fprintf( stderr, " max_subkey=%d,", req->max_subkey );
     fprintf( stderr, " max_class=%d,", req->max_class );
@@ -1212,10 +1198,10 @@
     fprintf( stderr, " max_data=%d,", req->max_data );
     fprintf( stderr, " modif=%ld,", req->modif );
     fprintf( stderr, " name=" );
-    dump_path_t( req, &req->name );
-    fprintf( stderr, "," );
+    cur_pos += dump_varargs_unicode_len_str( req );
+    fputc( ',', stderr );
     fprintf( stderr, " class=" );
-    dump_unicode_string( req, req->class );
+    cur_pos += dump_varargs_unicode_str( req );
 }
 
 static void dump_set_key_value_request( const struct set_key_value_request *req )
@@ -1574,7 +1560,6 @@
     (dump_func)dump_open_key_request,
     (dump_func)dump_delete_key_request,
     (dump_func)dump_enum_key_request,
-    (dump_func)dump_query_key_info_request,
     (dump_func)dump_set_key_value_request,
     (dump_func)dump_get_key_value_request,
     (dump_func)dump_enum_key_value_request,
@@ -1686,7 +1671,6 @@
     (dump_func)dump_open_key_reply,
     (dump_func)0,
     (dump_func)dump_enum_key_reply,
-    (dump_func)dump_query_key_info_reply,
     (dump_func)0,
     (dump_func)dump_get_key_value_reply,
     (dump_func)dump_enum_key_value_reply,
@@ -1798,7 +1782,6 @@
     "open_key",
     "delete_key",
     "enum_key",
-    "query_key_info",
     "set_key_value",
     "get_key_value",
     "enum_key_value",