I think that will not unload the last driver. Looking at MMDRV_Install, MMDrvsHi is the index of the first free array field and its incremented each time MMDRV_Install is called. The assert in line 465 is wrong. It should be "<". The for () loop in line 432 is also wrong Your change starts with MMDrvsHi - 1, the last used index, then decrements i by one before doing anything else.
Am 17.10.2011 18:35, schrieb jgardou@svn.reactos.org:
Author: jgardou Date: Mon Oct 17 16:35:10 2011 New Revision: 54179
URL: http://svn.reactos.org/svn/reactos?rev=54179&view=rev Log: [WinMM]
- avoid buffer overrun.
- do not try to unload uninitialized driver.
See issue #6343 for more details.
Modified: trunk/reactos/dll/win32/winmm/lolvldrv.c
Modified: trunk/reactos/dll/win32/winmm/lolvldrv.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/winmm/lolvldrv.c?... ============================================================================== --- trunk/reactos/dll/win32/winmm/lolvldrv.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/winmm/lolvldrv.c [iso-8859-1] Mon Oct 17 16:35:10 2011 @@ -634,7 +634,7 @@ }
/* unload driver, in reverse order of loading */
- i = sizeof(MMDrvs) / sizeof(MMDrvs[0]);
- i = MMDrvsHi - 1; while (i--> 0) { MMDRV_ExitPerType(&MMDrvs[i], MMDRV_AUX);