mirror of
https://github.com/reactos/reactos.git
synced 2025-05-28 13:38:19 +00:00
Modified WINE's winmm.dll to support loading of user-installable drivers
from the registry 'Drivers' and 'Drivers32' keys, as Windows does. Also silenced the beep-MIDI driver (which is supported by winmm! - but doesn't seem to do much, at least under vmware.) Added some Drivers32 entries to be loaded by default, to the hivesft.inf file. svn path=/trunk/; revision=29011
This commit is contained in:
parent
48345d7b1d
commit
b453ee14e3
7 changed files with 169 additions and 6 deletions
|
@ -25,6 +25,12 @@ HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
|
|||
;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\soffice.exe","GlobalFlag",0x00000000,"0x00000002"
|
||||
;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\tlstest.exe","GlobalFlag",0x00000000,"0x00000002"
|
||||
|
||||
; MME - TODO: Should not require full paths!
|
||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midimapper",0x00000000,"c:\reactos\system32\midimap.dll"
|
||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wavemapper",0x00000000,"c:\reactos\system32\msacm32.dll"
|
||||
;HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wave",0x00000000,"sndblst.dll"
|
||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midi",0x00000000,"c:\reactos\system32\beepmidi.dll"
|
||||
|
||||
; Mesa OpenGL Driver
|
||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers","DefaultDriver",0x00000000,"Mesa"
|
||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Version",0x00010001,0x00000002
|
||||
|
|
|
@ -251,6 +251,7 @@ dll\win32\ws2help\ws2help.dll 1
|
|||
dll\win32\wshirda\wshirda.dll 1
|
||||
dll\win32\wsock32\wsock32.dll 1
|
||||
dll\win32\wtsapi32\wtsapi32.dll 1
|
||||
dll\win32\beepmidi\beepmidi.dll 1
|
||||
|
||||
|
||||
; Drivers
|
||||
|
|
|
@ -51,8 +51,8 @@
|
|||
#include <mmddk.h>
|
||||
#include <mmsystem.h>
|
||||
|
||||
#define DPRINT printf
|
||||
//#define DPRINT //
|
||||
/*#define DPRINT printf*/
|
||||
#define DPRINT FakePrintf
|
||||
|
||||
/* A few MIDI command categories */
|
||||
#define MIDI_NOTE_OFF 0x80
|
||||
|
|
|
@ -620,7 +620,7 @@ static BOOL MMDRV_InitPerType(LPWINE_MM_DRIVER lpDrv, UINT type, UINT wMsg)
|
|||
/**************************************************************************
|
||||
* MMDRV_Install [internal]
|
||||
*/
|
||||
static BOOL MMDRV_Install(LPCSTR drvRegName, LPCSTR drvFileName, BOOL bIsMapper)
|
||||
BOOL MMDRV_Install(LPCSTR drvRegName, LPCSTR drvFileName, BOOL bIsMapper)
|
||||
{
|
||||
int i, count = 0;
|
||||
LPWINE_MM_DRIVER lpDrv = &MMDrvs[MMDrvsHi];
|
||||
|
@ -723,6 +723,8 @@ static BOOL MMDRV_Install(LPCSTR drvRegName, LPCSTR drvFileName, BOOL bIsMapper)
|
|||
*/
|
||||
BOOL MMDRV_Init(void)
|
||||
{
|
||||
/* Redundant code, keeping this for reference only (for now) */
|
||||
#if 0
|
||||
HKEY hKey;
|
||||
char driver_buffer[256];
|
||||
char mapper_buffer[256];
|
||||
|
@ -743,13 +745,21 @@ BOOL MMDRV_Init(void)
|
|||
strcpy(driver_buffer, WINE_DEFAULT_WINMM_DRIVER);
|
||||
}
|
||||
|
||||
// AG: TESTING:
|
||||
ret |= MMDRV_Install("mmdrv.dll", "mmdrv.dll", FALSE);
|
||||
ret |= MMDRV_Install("beepmidi.dll", "beepmidi.dll", FALSE);
|
||||
|
||||
ret |= MMDRV_Install("wavemapper", WINE_DEFAULT_WINMM_MAPPER, TRUE);
|
||||
ret |= MMDRV_Install("midimapper", WINE_DEFAULT_WINMM_MIDI, TRUE);
|
||||
return ret;
|
||||
#else
|
||||
INT driver_count = 0;
|
||||
|
||||
driver_count += LoadRegistryMMEDrivers(NT_MME_DRIVERS_KEY);
|
||||
driver_count += LoadRegistryMMEDrivers(NT_MME_DRIVERS32_KEY);
|
||||
|
||||
/* Explorer doesn't like us failing */
|
||||
return TRUE;
|
||||
// return ( driver_count > 0 );
|
||||
#endif
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
|
|
134
reactos/dll/win32/winmm/registry.c
Normal file
134
reactos/dll/win32/winmm/registry.c
Normal file
|
@ -0,0 +1,134 @@
|
|||
/*
|
||||
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;
|
||||
BOOL ret;
|
||||
|
||||
DWORD value_name_length = 256;
|
||||
char value_name[value_name_length];
|
||||
|
||||
DWORD value_data_length = 256;
|
||||
char value_data[value_data_length];
|
||||
|
||||
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,
|
||||
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;
|
||||
}
|
|
@ -315,3 +315,14 @@ extern void (WINAPI *pFnRestoreThunkLock)(DWORD);
|
|||
*/
|
||||
#define WINE_GDF_EXIST 0x80000000
|
||||
#define WINE_GDF_16BIT 0x10000000
|
||||
|
||||
/* Modification to take into account Windows NT's registry format */
|
||||
|
||||
#define NT_MME_DRIVERS32_KEY \
|
||||
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32"
|
||||
|
||||
#define NT_MME_DRIVERS_KEY \
|
||||
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers"
|
||||
|
||||
INT LoadRegistryMMEDrivers(char* key);
|
||||
BOOL MMDRV_Install(LPCSTR drvRegName, LPCSTR drvFileName, BOOL bIsMapper);
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
<file>playsound.c</file>
|
||||
<file>time.c</file>
|
||||
<file>winmm.c</file>
|
||||
<file>registry.c</file>
|
||||
<file>winmm_res.rc</file>
|
||||
<file>winmm.spec</file>
|
||||
</module>
|
||||
</group>
|
||||
</group>
|
||||
|
|
Loading…
Reference in a new issue