-/*\r
- MME User-Mode Driver Support\r
- (c) Andrew Greenwood, 2007.\r
-\r
- This is intended for use with WINE's winmm.dll to allow it to find\r
- and load appropriate drivers from the correct (Windows) registry keys.\r
-\r
- By default, WINE's winmm.dll will look in:\r
- HKEY_CURRENT_USER\Software\Wine\Drivers\r
-\r
- Here it determines the driver to load based on a value called "Audio".\r
-\r
- Windows NT stores a list of drivers in:\r
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32\r
-\r
- TODO: Handle system.ini\r
-*/\r
-\r
-#include <windows.h>\r
-#include "winemm.h"\r
-#include "wine/debug.h"\r
-\r
-WINE_DEFAULT_DEBUG_CHANNEL(winmm);\r
-\r
-BOOL LoadRegistryMMEDrivers(char* key)\r
-{\r
- INT driver_count = 0;\r
- INT driver_index = 0;\r
- HKEY drivers_key;\r
- BOOL ret;\r
-\r
- DWORD value_name_length = 256;\r
- char value_name[value_name_length];\r
-\r
- DWORD value_data_length = 256;\r
- char value_data[value_data_length];\r
-\r
- DWORD value_type;\r
-\r
- if ( RegOpenKeyA(HKEY_LOCAL_MACHINE, key, &drivers_key) != ERROR_SUCCESS )\r
- {\r
- TRACE("ERROR: Could not open: HKEY_LOCAL_MACHINE\\%s\n", key);\r
- return 0;\r
- }\r
-\r
- while ( RegEnumValue(drivers_key,\r
- driver_index,\r
- value_name,\r
- &value_name_length,\r
- NULL,\r
- &value_type,\r
- value_data,\r
- &value_data_length) == ERROR_SUCCESS )\r
- {\r
- BOOL valid_driver = FALSE;\r
- BOOL is_mapper = FALSE;\r
-\r
- if ( value_type == REG_SZ )\r
- {\r
- /* We look for mappers first so they don't match\r
- something else later on! */\r
-\r
- if ( ! stricmp("wavemapper", value_name) )\r
- {\r
- TRACE("Found a Wave-mapper: %s\n", value_data);\r
- valid_driver = TRUE;\r
- is_mapper = TRUE;\r
- driver_count ++;\r
- }\r
- else if ( ! stricmp("midimapper", value_name) )\r
- {\r
- TRACE("Found a MIDI-mapper: %s\n", value_data);\r
- valid_driver = TRUE;\r
- is_mapper = TRUE;\r
- driver_count ++;\r
- }\r
- else if ( ! strnicmp("wave", value_name, 4) )\r
- {\r
- TRACE("Found a Wave driver: %s\n", value_data);\r
- valid_driver = TRUE;\r
- driver_count ++;\r
- }\r
- else if ( ! strnicmp("midi", value_name, 4) )\r
- {\r
- TRACE("Found a MIDI driver: %s\n", value_data);\r
- valid_driver = TRUE;\r
- driver_count ++;\r
- }\r
- else if ( ! strnicmp("mixer", value_name, 5) )\r
- {\r
- TRACE("Found a mixer driver: %s\n", value_data);\r
- valid_driver = TRUE;\r
- driver_count ++;\r
- }\r
- else if ( ! strnicmp("aux", value_name, 4) )\r
- {\r
- TRACE("Found an aux driver: %s\n", value_data);\r
- valid_driver = TRUE;\r
- driver_count ++;\r
- }\r
- else\r
- {\r
- TRACE("Not supported: %s\n", value_data);\r
- }\r
-\r
- /* If we have a valid driver now, we get it "installed" in\r
- winmm itself so it can be used */\r
-\r
- if ( valid_driver )\r
- {\r
- if ( ! MMDRV_Install(value_name, value_data, is_mapper) )\r
- {\r
- TRACE("FAILED when initializing %s\n", value_data);\r
- }\r
- }\r
- }\r
- else\r
- {\r
- TRACE("Invalid data format\n");\r
- }\r
-\r
- /* Reinitialize */\r
- value_name_length = 256;\r
- value_data_length = 256;\r
- memset(value_name, 0, value_name_length);\r
- memset(value_data, 0, value_data_length);\r
-\r
- driver_index ++;\r
- }\r
-\r
- TRACE("Found a total of %d drivers\n", driver_count);\r
-\r
- return driver_count;\r
-}\r
+/*
+ MME User-Mode Driver Support
+ (c) Andrew Greenwood, 2007.
+
+ This is intended for use with WINE's winmm.dll to allow it to find
+ and load appropriate drivers from the correct (Windows) registry keys.
+
+ By default, WINE's winmm.dll will look in:
+ HKEY_CURRENT_USER\Software\Wine\Drivers
+
+ Here it determines the driver to load based on a value called "Audio".
+
+ Windows NT stores a list of drivers in:
+ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32
+
+ TODO: Handle system.ini
+*/
+
+#include <windows.h>
+#include "winemm.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(winmm);
+
+BOOL LoadRegistryMMEDrivers(char* key)
+{
+ INT driver_count = 0;
+ INT driver_index = 0;
+ HKEY drivers_key;
+
+ DWORD value_name_length = 256;
+ char value_name[256];
+
+ DWORD value_data_length = 256;
+ char value_data[256];
+
+ DWORD value_type;
+
+ if ( RegOpenKeyA(HKEY_LOCAL_MACHINE, key, &drivers_key) != ERROR_SUCCESS )
+ {
+ TRACE("ERROR: Could not open: HKEY_LOCAL_MACHINE\\%s\n", key);
+ return 0;
+ }
+
+ while ( RegEnumValue(drivers_key,
+ driver_index,
+ value_name,
+ &value_name_length,
+ NULL,
+ &value_type,
+ (LPBYTE)value_data,
+ &value_data_length) == ERROR_SUCCESS )
+ {
+ BOOL valid_driver = FALSE;
+ BOOL is_mapper = FALSE;
+
+ if ( value_type == REG_SZ )
+ {
+ /* We look for mappers first so they don't match
+ something else later on! */
+
+ if ( ! stricmp("wavemapper", value_name) )
+ {
+ TRACE("Found a Wave-mapper: %s\n", value_data);
+ valid_driver = TRUE;
+ is_mapper = TRUE;
+ driver_count ++;
+ }
+ else if ( ! stricmp("midimapper", value_name) )
+ {
+ TRACE("Found a MIDI-mapper: %s\n", value_data);
+ valid_driver = TRUE;
+ is_mapper = TRUE;
+ driver_count ++;
+ }
+ else if ( ! _strnicmp("wave", value_name, 4) )
+ {
+ TRACE("Found a Wave driver: %s\n", value_data);
+ valid_driver = TRUE;
+ driver_count ++;
+ }
+ else if ( ! _strnicmp("midi", value_name, 4) )
+ {
+ TRACE("Found a MIDI driver: %s\n", value_data);
+ valid_driver = TRUE;
+ driver_count ++;
+ }
+ else if ( ! _strnicmp("mixer", value_name, 5) )
+ {
+ TRACE("Found a mixer driver: %s\n", value_data);
+ valid_driver = TRUE;
+ driver_count ++;
+ }
+ else if ( ! _strnicmp("aux", value_name, 4) )
+ {
+ TRACE("Found an aux driver: %s\n", value_data);
+ valid_driver = TRUE;
+ driver_count ++;
+ }
+ else
+ {
+ TRACE("Not supported: %s\n", value_data);
+ }
+
+ /* If we have a valid driver now, we get it "installed" in
+ winmm itself so it can be used */
+
+ if ( valid_driver )
+ {
+ if ( ! MMDRV_Install(value_name, value_data, is_mapper) )
+ {
+ TRACE("FAILED when initializing %s\n", value_data);
+ }
+ }
+ }
+ else
+ {
+ TRACE("Invalid data format\n");
+ }
+
+ /* Reinitialize */
+ value_name_length = 256;
+ value_data_length = 256;
+ memset(value_name, 0, value_name_length);
+ memset(value_data, 0, value_data_length);
+
+ driver_index ++;
+ }
+
+ TRACE("Found a total of %d drivers\n", driver_count);
+
+ return driver_count;
+}