ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

registry.c
Go to the documentation of this file.
00001 /*
00002     MME User-Mode Driver Support
00003     (c) Andrew Greenwood, 2007.
00004 
00005     This is intended for use with WINE's winmm.dll to allow it to find
00006     and load appropriate drivers from the correct (Windows) registry keys.
00007 
00008     By default, WINE's winmm.dll will look in:
00009     HKEY_CURRENT_USER\Software\Wine\Drivers
00010 
00011     Here it determines the driver to load based on a value called "Audio".
00012 
00013     Windows NT stores a list of drivers in:
00014     HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32
00015 
00016     TODO: Handle system.ini
00017 */
00018 
00019 #include <windows.h>
00020 #include "winemm.h"
00021 #include "wine/debug.h"
00022 
00023 WINE_DEFAULT_DEBUG_CHANNEL(winmm);
00024 
00025 BOOL LoadRegistryMMEDrivers(char* key)
00026 {
00027     INT driver_count = 0;
00028     INT driver_index = 0;
00029     HKEY drivers_key;
00030 
00031     DWORD value_name_length = 256;
00032     char value_name[256];
00033 
00034     DWORD value_data_length = 256;
00035     char value_data[256];
00036 
00037     DWORD value_type;
00038 
00039     if ( RegOpenKeyA(HKEY_LOCAL_MACHINE, key, &drivers_key) != ERROR_SUCCESS )
00040     {
00041         TRACE("ERROR: Could not open: HKEY_LOCAL_MACHINE\\%s\n", key);
00042         return 0;
00043     }
00044 
00045     while ( RegEnumValue(drivers_key,
00046                          driver_index,
00047                          value_name,
00048                          &value_name_length,
00049                          NULL,
00050                          &value_type,
00051                          (LPBYTE)value_data,
00052                          &value_data_length) == ERROR_SUCCESS )
00053     {
00054         BOOL valid_driver = FALSE;
00055         BOOL is_mapper = FALSE;
00056 
00057         if ( value_type == REG_SZ )
00058         {
00059             /* We look for mappers first so they don't match
00060                something else later on! */
00061 
00062             if ( ! stricmp("wavemapper", value_name) )
00063             {
00064                 TRACE("Found a Wave-mapper: %s\n", value_data);
00065                 valid_driver = TRUE;
00066                 is_mapper = TRUE;
00067                 driver_count ++;
00068             }
00069             else if ( ! stricmp("midimapper", value_name) )
00070             {
00071                 TRACE("Found a MIDI-mapper: %s\n", value_data);
00072                 valid_driver = TRUE;
00073                 is_mapper = TRUE;
00074                 driver_count ++;
00075             }
00076             else if ( ! _strnicmp("wave", value_name, 4) )
00077             {
00078                 TRACE("Found a Wave driver: %s\n", value_data);
00079                 valid_driver = TRUE;
00080                 driver_count ++;
00081             }
00082             else if ( ! _strnicmp("midi", value_name, 4) )
00083             {
00084                 TRACE("Found a MIDI driver: %s\n", value_data);
00085                 valid_driver = TRUE;
00086                 driver_count ++;
00087             }
00088             else if ( ! _strnicmp("mixer", value_name, 5) )
00089             {
00090                 TRACE("Found a mixer driver: %s\n", value_data);
00091                 valid_driver = TRUE;
00092                 driver_count ++;
00093             }
00094             else if ( ! _strnicmp("aux", value_name, 4) )
00095             {
00096                 TRACE("Found an aux driver: %s\n", value_data);
00097                 valid_driver = TRUE;
00098                 driver_count ++;
00099             }
00100             else
00101             {
00102                 TRACE("Not supported: %s\n", value_data);
00103             }
00104 
00105             /* If we have a valid driver now, we get it "installed" in
00106                winmm itself so it can be used */
00107 
00108             if ( valid_driver )
00109             {
00110                 if ( ! MMDRV_Install(value_name, value_data, is_mapper) )
00111                 {
00112                     TRACE("FAILED when initializing %s\n", value_data);
00113                 }
00114             }
00115         }
00116         else
00117         {
00118             TRACE("Invalid data format\n");
00119         }
00120 
00121         /* Reinitialize */
00122         value_name_length = 256;
00123         value_data_length = 256;
00124         memset(value_name, 0, value_name_length);
00125         memset(value_data, 0, value_data_length);
00126 
00127         driver_index ++;
00128     }
00129 
00130     TRACE("Found a total of %d drivers\n", driver_count);
00131 
00132     return driver_count;
00133 }

Generated on Sun May 27 2012 04:17:08 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.