diff --git a/dlls/msacm/driver.c b/dlls/msacm/driver.c
index b473f9c..f0d3bad 100644
--- a/dlls/msacm/driver.c
+++ b/dlls/msacm/driver.c
@@ -132,29 +132,38 @@
     MMRESULT mmr;
     ACMDRIVERDETAILSW	addw;
 
+    if (!padd)
+        return MMSYSERR_INVALPARAM;
+
+    if (padd->cbStruct < 4)
+        return MMSYSERR_INVALPARAM;
+
     addw.cbStruct = sizeof(addw);
     mmr = acmDriverDetailsW(hadid, &addw, fdwDetails);
     if (mmr == 0) {
-	padd->fccType = addw.fccType;
-	padd->fccComp = addw.fccComp;
-	padd->wMid = addw.wMid;
-	padd->wPid = addw.wPid;
-	padd->vdwACM = addw.vdwACM;
-	padd->vdwDriver = addw.vdwDriver;
-	padd->fdwSupport = addw.fdwSupport;
-	padd->cFormatTags = addw.cFormatTags;
-	padd->cFilterTags = addw.cFilterTags;
-	padd->hicon = addw.hicon;
-        WideCharToMultiByte( CP_ACP, 0, addw.szShortName, -1, padd->szShortName,
-                             sizeof(padd->szShortName), NULL, NULL );
-        WideCharToMultiByte( CP_ACP, 0, addw.szLongName, -1, padd->szLongName,
-                             sizeof(padd->szLongName), NULL, NULL );
-        WideCharToMultiByte( CP_ACP, 0, addw.szCopyright, -1, padd->szCopyright,
-                             sizeof(padd->szCopyright), NULL, NULL );
-        WideCharToMultiByte( CP_ACP, 0, addw.szLicensing, -1, padd->szLicensing,
-                             sizeof(padd->szLicensing), NULL, NULL );
-        WideCharToMultiByte( CP_ACP, 0, addw.szFeatures, -1, padd->szFeatures,
-                             sizeof(padd->szFeatures), NULL, NULL );
+        ACMDRIVERDETAILSA padda;
+
+        padda.fccType = addw.fccType;
+        padda.fccComp = addw.fccComp;
+        padda.wMid = addw.wMid;
+        padda.wPid = addw.wPid;
+        padda.vdwACM = addw.vdwACM;
+        padda.vdwDriver = addw.vdwDriver;
+        padda.fdwSupport = addw.fdwSupport;
+        padda.cFormatTags = addw.cFormatTags;
+        padda.cFilterTags = addw.cFilterTags;
+        padda.hicon = addw.hicon;
+        WideCharToMultiByte( CP_ACP, 0, addw.szShortName, -1, padda.szShortName,
+                             sizeof(padda.szShortName), NULL, NULL );
+        WideCharToMultiByte( CP_ACP, 0, addw.szLongName, -1, padda.szLongName,
+                             sizeof(padda.szLongName), NULL, NULL );
+        WideCharToMultiByte( CP_ACP, 0, addw.szCopyright, -1, padda.szCopyright,
+                             sizeof(padda.szCopyright), NULL, NULL );
+        WideCharToMultiByte( CP_ACP, 0, addw.szLicensing, -1, padda.szLicensing,
+                             sizeof(padda.szLicensing), NULL, NULL );
+        WideCharToMultiByte( CP_ACP, 0, addw.szFeatures, -1, padda.szFeatures,
+                             sizeof(padda.szFeatures), NULL, NULL );
+        memcpy(padd, &padda, min(padd->cbStruct, sizeof(*padd)));
     }
     return mmr;
 }
@@ -167,14 +176,22 @@
     HACMDRIVER acmDrvr;
     MMRESULT mmr;
 
+    if (!padd)
+        return MMSYSERR_INVALPARAM;
+
+    if (padd->cbStruct < 4)
+        return MMSYSERR_INVALPARAM;
+
     if (fdwDetails)
 	return MMSYSERR_INVALFLAG;
 
     mmr = acmDriverOpen(&acmDrvr, hadid, 0);
     if (mmr == MMSYSERR_NOERROR) {
-	mmr = (MMRESULT)MSACM_Message(acmDrvr, ACMDM_DRIVER_DETAILS, (LPARAM)padd,  0);
+        ACMDRIVERDETAILSW paddw;
+        mmr = (MMRESULT)MSACM_Message(acmDrvr, ACMDM_DRIVER_DETAILS, (LPARAM)&paddw,  0);
 
 	acmDriverClose(acmDrvr, 0);
+        memcpy(padd, &paddw, min(padd->cbStruct, sizeof(*padd)));
     }
 
     return mmr;
@@ -216,9 +233,6 @@
 {
     PWINE_ACMOBJ pao;
 
-    if (!phadid)
-	return MMSYSERR_INVALPARAM;
-
     if (fdwDriverID)
 	return MMSYSERR_INVALFLAG;
 
@@ -226,6 +240,9 @@
     if (!pao)
 	return MMSYSERR_INVALHANDLE;
 
+    if (!phadid)
+        return MMSYSERR_INVALPARAM;
+
     *phadid = (HACMDRIVERID) pao->pACMDriverID;
 
     return MMSYSERR_NOERROR;
diff --git a/dlls/msacm/format.c b/dlls/msacm/format.c
index acdf7cf..7a116ba 100644
--- a/dlls/msacm/format.c
+++ b/dlls/msacm/format.c
@@ -411,6 +411,12 @@
     ACMFORMATDETAILSW		afdw;
     struct MSACM_FormatEnumWtoA_Instance afei;
 
+    if (!pafda)
+        return MMSYSERR_INVALPARAM;
+
+    if (pafda->cbStruct < sizeof(*pafda))
+        return MMSYSERR_INVALPARAM;
+
     memset(&afdw, 0, sizeof(afdw));
     afdw.cbStruct = sizeof(afdw);
     afdw.dwFormatIndex = pafda->dwFormatIndex;
@@ -489,7 +495,11 @@
     TRACE("(%p, %p, %p, %ld, %ld)\n",
 	  had, pafd, fnCallback, dwInstance, fdwEnum);
 
-    if (pafd->cbStruct < sizeof(*pafd)) return MMSYSERR_INVALPARAM;
+    if (!pafd)
+        return MMSYSERR_INVALPARAM;
+
+    if (pafd->cbStruct < sizeof(*pafd))
+        return MMSYSERR_INVALPARAM;
 
     if (fdwEnum & (ACM_FORMATENUMF_WFORMATTAG|ACM_FORMATENUMF_NCHANNELS|
 		   ACM_FORMATENUMF_NSAMPLESPERSEC|ACM_FORMATENUMF_WBITSPERSAMPLE|
diff --git a/dlls/msacm/msacm32_main.c b/dlls/msacm/msacm32_main.c
index 6ca97e9..dde962a 100644
--- a/dlls/msacm/msacm32_main.c
+++ b/dlls/msacm/msacm32_main.c
@@ -120,6 +120,7 @@
 	/* fall through */
     case ACM_METRIC_COUNT_LOCAL_DRIVERS:
 	if (hao) return MMSYSERR_INVALHANDLE;
+        if (!pMetric) return MMSYSERR_INVALPARAM;
 	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
 	    if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid))
 		val++;
@@ -131,6 +132,7 @@
 	/* fall through */
     case ACM_METRIC_COUNT_LOCAL_CODECS:
 	if (hao) return MMSYSERR_INVALHANDLE;
+        if (!pMetric) return MMSYSERR_INVALPARAM;
 	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
 	    if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
 		(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) &&
@@ -144,6 +146,7 @@
 	/* fall through */
     case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
 	if (hao) return MMSYSERR_INVALHANDLE;
+        if (!pMetric) return MMSYSERR_INVALPARAM;
 	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
 	    if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
 		 (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER) &&
@@ -157,6 +160,7 @@
 	/* fall through */
     case ACM_METRIC_COUNT_LOCAL_FILTERS:
 	if (hao) return MMSYSERR_INVALHANDLE;
+        if (!pMetric) return MMSYSERR_INVALPARAM;
 	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
 	    if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
 		(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER) &&
@@ -170,6 +174,7 @@
 	/* fall through */
     case ACM_METRIC_COUNT_LOCAL_DISABLED:
 	if (hao) return MMSYSERR_INVALHANDLE;
+        if (!pMetric) return MMSYSERR_INVALPARAM;
 	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
 	    if ((padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid))
 		val++;
@@ -204,10 +209,17 @@
 	} else {
 	    return MMSYSERR_INVALHANDLE;
 	}
+        if (!pMetric) return MMSYSERR_INVALPARAM;
 	*(LPDWORD)pMetric = val;
         break;
 
     case ACM_METRIC_COUNT_HARDWARE:
+        if (hao) return MMSYSERR_INVALHANDLE;
+        if (!pMetric) return MMSYSERR_INVALPARAM;
+        *(LPDWORD)pMetric = 0;
+        FIXME("ACM_METRIC_COUNT_HARDWARE not implemented\n");
+        break;
+
     case ACM_METRIC_HARDWARE_WAVE_INPUT:
     case ACM_METRIC_HARDWARE_WAVE_OUTPUT:
     case ACM_METRIC_MAX_SIZE_FILTER:
