- Make registry usage a little more correct and modern
- Create home for all dplay name server functionality
- Add the framework for EnumSessions
- Documentation update

diff --git a/dlls/dplayx/dplobby.c b/dlls/dplayx/dplobby.c
index 3c6b9c7..805bb00 100644
--- a/dlls/dplayx/dplobby.c
+++ b/dlls/dplayx/dplobby.c
@@ -1,6 +1,6 @@
 /* Direct Play Lobby 2 & 3 Implementation
  *
- * Copyright 1998,1999 - Peter Hunnisett
+ * Copyright 1998,1999,2000 - Peter Hunnisett
  *
  * <presently under construction - contact hunnise@nortelnetworks.com>
  *
@@ -843,6 +843,7 @@
   LPCSTR searchSubKey    = "SOFTWARE\\Microsoft\\DirectPlay\\Service Providers";
   DWORD  dwIndex, sizeOfSubKeyName=50;
   char   subKeyName[51];
+  FILETIME filetime;
 
   TRACE(" (%p)->(%p,%p,%p,0x%08lx)\n", This, lpEnumAddressTypeCallback, guidSP, lpContext, dwFlags );
 
@@ -863,7 +864,7 @@
 
     /* Need to loop over the service providers in the registry */
     if( RegOpenKeyExA( HKEY_LOCAL_MACHINE, searchSubKey,
-                         0, KEY_ENUMERATE_SUB_KEYS, &hkResult ) != ERROR_SUCCESS )
+                         0, KEY_READ, &hkResult ) != ERROR_SUCCESS )
     {
       /* Hmmm. Does this mean that there are no service providers? */
       ERR(": no service providers?\n");
@@ -872,8 +873,9 @@
 
     /* Traverse all the service providers we have available */
     for( dwIndex=0;
-         RegEnumKeyA( hkResult, dwIndex, subKeyName, sizeOfSubKeyName ) != ERROR_NO_MORE_ITEMS;
-         ++dwIndex )
+         RegEnumKeyExA( hkResult, dwIndex, subKeyName, &sizeOfSubKeyName,
+                        NULL, NULL, NULL, &filetime ) != ERROR_NO_MORE_ITEMS;
+         ++dwIndex, sizeOfSubKeyName=50 )
     {
 
       HKEY     hkServiceProvider, hkServiceProviderAt;
@@ -885,12 +887,13 @@
       DWORD    dwAtIndex;
       LPSTR    atKey = "Address Types";
       LPSTR    guidDataSubKey   = "Guid";
+      FILETIME filetime;
 
 
       TRACE(" this time through: %s\n", subKeyName );
 
       /* Get a handle for this particular service provider */
-      if( RegOpenKeyExA( hkResult, subKeyName, 0, KEY_QUERY_VALUE,
+      if( RegOpenKeyExA( hkResult, subKeyName, 0, KEY_READ,
                          &hkServiceProvider ) != ERROR_SUCCESS )
       {
          ERR(": what the heck is going on?\n" );
@@ -918,17 +921,18 @@
       }
 
       /* Get a handle for this particular service provider */
-      if( RegOpenKeyExA( hkServiceProvider, atKey, 0, KEY_QUERY_VALUE,
+      if( RegOpenKeyExA( hkServiceProvider, atKey, 0, KEY_READ,
                          &hkServiceProviderAt ) != ERROR_SUCCESS )
       {
-        WARN(": No Address Types registry data sub key/members\n" );
+        TRACE(": No Address Types registry data sub key/members\n" );
         break;
       }
 
       /* Traverse all the address type we have available */
       for( dwAtIndex=0;
-           RegEnumKeyA( hkServiceProviderAt, dwAtIndex, atSubKey, sizeOfSubKeyName ) != ERROR_NO_MORE_ITEMS;
-           ++dwAtIndex )
+           RegEnumKeyExA( hkServiceProviderAt, dwAtIndex, atSubKey, &sizeOfSubKeyName,
+                          NULL, NULL, NULL, &filetime ) != ERROR_NO_MORE_ITEMS;
+           ++dwAtIndex, sizeOfSubKeyName=50 )
       {
         TRACE( "Found Address Type GUID %s\n", atSubKey );
 
@@ -997,6 +1001,7 @@
   LPSTR guidDataSubKey   = "Guid";
   DWORD dwIndex, sizeOfSubKeyName=50;
   char subKeyName[51];
+  FILETIME filetime;
 
   TRACE("(%p)->(%p,%p,0x%08lx)\n", This, lpEnumLocalAppCallback, lpContext, dwFlags );
 
@@ -1012,7 +1017,7 @@
 
   /* Need to loop over the service providers in the registry */
   if( RegOpenKeyExA( HKEY_LOCAL_MACHINE, searchSubKey,
-                     0, KEY_ENUMERATE_SUB_KEYS, &hkResult ) != ERROR_SUCCESS )
+                     0, KEY_READ, &hkResult ) != ERROR_SUCCESS )
   {
     /* Hmmm. Does this mean that there are no service providers? */
     ERR(": no service providers?\n");
@@ -1021,8 +1026,8 @@
 
   /* Traverse all registered applications */
   for( dwIndex=0;
-       RegEnumKeyA( hkResult, dwIndex, subKeyName, sizeOfSubKeyName ) != ERROR_NO_MORE_ITEMS;
-       ++dwIndex )
+       RegEnumKeyExA( hkResult, dwIndex, subKeyName, &sizeOfSubKeyName, NULL, NULL, NULL, &filetime ) != ERROR_NO_MORE_ITEMS;
+       ++dwIndex, sizeOfSubKeyName=50 )
   {
 
     HKEY       hkServiceProvider;
@@ -1035,7 +1040,7 @@
     TRACE(" this time through: %s\n", subKeyName );
 
     /* Get a handle for this particular service provider */
-    if( RegOpenKeyExA( hkResult, subKeyName, 0, KEY_QUERY_VALUE,
+    if( RegOpenKeyExA( hkResult, subKeyName, 0, KEY_READ,
                        &hkServiceProvider ) != ERROR_SUCCESS )
     {
        ERR(": what the heck is going on?\n" );