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
)
31 DWORD value_name_length
= 256;
32 char value_name
[value_name_length
];
34 DWORD value_data_length
= 256;
35 char value_data
[value_data_length
];
39 if ( RegOpenKeyA(HKEY_LOCAL_MACHINE
, key
, &drivers_key
) != ERROR_SUCCESS
)
41 TRACE("ERROR: Could not open: HKEY_LOCAL_MACHINE\\%s\n", key
);
45 while ( RegEnumValue(drivers_key
,
52 &value_data_length
) == ERROR_SUCCESS
)
54 BOOL valid_driver
= FALSE
;
55 BOOL is_mapper
= FALSE
;
57 if ( value_type
== REG_SZ
)
59 /* We look for mappers first so they don't match
60 something else later on! */
62 if ( ! stricmp("wavemapper", value_name
) )
64 TRACE("Found a Wave-mapper: %s\n", value_data
);
69 else if ( ! stricmp("midimapper", value_name
) )
71 TRACE("Found a MIDI-mapper: %s\n", value_data
);
76 else if ( ! _strnicmp("wave", value_name
, 4) )
78 TRACE("Found a Wave driver: %s\n", value_data
);
82 else if ( ! _strnicmp("midi", value_name
, 4) )
84 TRACE("Found a MIDI driver: %s\n", value_data
);
88 else if ( ! _strnicmp("mixer", value_name
, 5) )
90 TRACE("Found a mixer driver: %s\n", value_data
);
94 else if ( ! _strnicmp("aux", value_name
, 4) )
96 TRACE("Found an aux driver: %s\n", value_data
);
102 TRACE("Not supported: %s\n", value_data
);
105 /* If we have a valid driver now, we get it "installed" in
106 winmm itself so it can be used */
110 if ( ! MMDRV_Install(value_name
, value_data
, is_mapper
) )
112 TRACE("FAILED when initializing %s\n", value_data
);
118 TRACE("Invalid data format\n");
122 value_name_length
= 256;
123 value_data_length
= 256;
124 memset(value_name
, 0, value_name_length
);
125 memset(value_data
, 0, value_data_length
);
130 TRACE("Found a total of %d drivers\n", driver_count
);