From 3c03f75c02fbf9975fa696682febd4329c7d1ec7 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Fri, 13 Apr 2001 22:28:19 +0000 Subject: [PATCH] Fixed opening of some drivers. --- dlls/msacm/driver.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/dlls/msacm/driver.c b/dlls/msacm/driver.c index d703c44881f..2ef4ca9ae76 100644 --- a/dlls/msacm/driver.c +++ b/dlls/msacm/driver.c @@ -235,6 +235,7 @@ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpe { PWINE_ACMDRIVERID padid; PWINE_ACMDRIVER pad; + MMRESULT ret = MMSYSERR_ERROR; TRACE("(%p, %x, %08lu)\n", phad, hadid, fdwOpen); @@ -253,12 +254,24 @@ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpe pad->obj.dwType = WINE_ACMOBJ_DRIVER; pad->obj.pACMDriverID = padid; - - if (!(pad->hDrvr = padid->hInstModule) && padid->pszDriverAlias) - pad->hDrvr = OpenDriverA(padid->pszDriverAlias, NULL, 0); - if (!pad->hDrvr) { - HeapFree(MSACM_hHeap, 0, pad); - return MMSYSERR_ERROR; + + if (!(pad->hDrvr = padid->hInstModule) && padid->pszDriverAlias) { + ACMDRVOPENDESCW adod; + + adod.cbStruct = sizeof(adod); + adod.fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC; + adod.fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED; + adod.dwVersion = acmGetVersion(); + adod.dwFlags = fdwOpen; + adod.dwError = 0; + adod.pszSectionName = (LPCWSTR)"\0"; /* FIXME */ + adod.pszAliasName = (LPCWSTR)"\0"; /* FIXME */ + adod.dnDevNode = 0; + + if (!(pad->hDrvr = OpenDriverA(padid->pszDriverAlias, NULL, (DWORD)&adod))) { + ret = adod.dwError; + goto gotError; + } } /* insert new pad at beg of list */ @@ -269,6 +282,10 @@ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpe *phad = (HACMDRIVER)pad; TRACE("'%s' => %08lx\n", padid->pszDriverAlias, (DWORD)pad); return MMSYSERR_NOERROR; + gotError: + if (!pad->hDrvr) + HeapFree(MSACM_hHeap, 0, pad); + return ret; } /***********************************************************************