Added cache for drivers information.
Fixed a few bugs (memory handling, version info...)
Enhanced validity checks.

diff --git a/dlls/msacm/wineacm.h b/dlls/msacm/wineacm.h
index cb43ca7..61e043b 100644
--- a/dlls/msacm/wineacm.h
+++ b/dlls/msacm/wineacm.h
@@ -307,6 +307,14 @@
     PWINE_ACMDRIVER     pACMDriverList;
     PWINE_ACMDRIVERID   pNextACMDriverID;
     PWINE_ACMDRIVERID	pPrevACMDriverID;
+    /* information about the driver itself, either gotten from registry or driver itself */
+    DWORD		cFilterTags;
+    DWORD		cFormatTags;
+    DWORD		fdwSupport;
+    struct {
+	DWORD			dwFormatTag;
+	DWORD			cbwfx;
+    }* 			aFormatTag;
 } WINE_ACMDRIVERID;
 
 /* From internal.c */
@@ -323,6 +331,7 @@
 extern PWINE_ACMOBJ MSACM_GetObj(HACMOBJ hObj, DWORD type);
 
 extern MMRESULT MSACM_Message(HACMDRIVER, UINT, LPARAM, LPARAM);
+extern BOOL MSACM_FindFormatTagInCache(WINE_ACMDRIVERID*, DWORD, LPDWORD);
 
 /* From msacm32.c */
 extern HINSTANCE MSACM_hInstance32;