2 MME User-Mode Driver Support
3 (c) Andrew Greenwood, 2007.
5 This is intended for use with WINE's winmm.dll to allow it to find
6 and load appropriate drivers from the correct (Windows) registry keys.
8 By default, WINE's winmm.dll will look in:
9 HKEY_CURRENT_USER\Software\Wine\Drivers
11 Here it determines the driver to load based on a value called "Audio".
13 Windows NT stores a list of drivers in:
14 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32
16 TODO: Handle system.ini
21 #include "wine/debug.h"
23 WINE_DEFAULT_DEBUG_CHANNEL(winmm
);
25 BOOL
LoadRegistryMMEDrivers(char* key
)
32 DWORD value_name_length
= 256;
33 char value_name
[value_name_length
];
35 DWORD value_data_length
= 256;
36 char value_data
[value_data_length
];
40 if ( RegOpenKeyA(HKEY_LOCAL_MACHINE
, key
, &drivers_key
) != ERROR_SUCCESS
)
42 TRACE("ERROR: Could not open: HKEY_LOCAL_MACHINE\\%s\n", key
);
46 while ( RegEnumValue(drivers_key
,
53 &value_data_length
) == ERROR_SUCCESS
)
55 BOOL valid_driver
= FALSE
;
56 BOOL is_mapper
= FALSE
;
58 if ( value_type
== REG_SZ
)
60 /* We look for mappers first so they don't match
61 something else later on! */
63 if ( ! stricmp("wavemapper", value_name
) )
65 TRACE("Found a Wave-mapper: %s\n", value_data
);
70 else if ( ! stricmp("midimapper", value_name
) )
72 TRACE("Found a MIDI-mapper: %s\n", value_data
);
77 else if ( ! strnicmp("wave", value_name
, 4) )
79 TRACE("Found a Wave driver: %s\n", value_data
);
83 else if ( ! strnicmp("midi", value_name
, 4) )
85 TRACE("Found a MIDI driver: %s\n", value_data
);
89 else if ( ! strnicmp("mixer", value_name
, 5) )
91 TRACE("Found a mixer driver: %s\n", value_data
);
95 else if ( ! strnicmp("aux", value_name
, 4) )
97 TRACE("Found an aux driver: %s\n", value_data
);
103 TRACE("Not supported: %s\n", value_data
);
106 /* If we have a valid driver now, we get it "installed" in
107 winmm itself so it can be used */
111 if ( ! MMDRV_Install(value_name
, value_data
, is_mapper
) )
113 TRACE("FAILED when initializing %s\n", value_data
);
119 TRACE("Invalid data format\n");
123 value_name_length
= 256;
124 value_data_length
= 256;
125 memset(value_name
, 0, value_name_length
);
126 memset(value_data
, 0, value_data_length
);
131 TRACE("Found a total of %d drivers\n", driver_count
);