Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenregistry.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
1.7.6.1
|