Microsoft Audio Compression Manager API
Jump to navigation
Jump to search
- Company: Microsoft
Microsoft's Audio Compression Manager (ACM) API is the audio analog of their Video for Windows (VfW) API.
An ACM-compliant codec DLL exports a single function named DriverProc that takes a message and a few other parameters. The messages specify an action that the decoder is to perform.
The DriverProc usually consists of a switch statement. The main target in reverse engineering the decoding algorithm is the ACMDM_STREAM_CONVERT message, 0x604F.
The first parameter is the following structure:
typedef struct _ACMDRVSTREAMINSTANCE { DWORD cbStruct; // 0x00 PWAVEFORMATEX pwfxSrc; // 0x04 PWAVEFORMATEX pwfxDst; // 0x08 PWAVEFILTER pwfltr; // 0x0C DWORD dwCallback; // 0x10 DWORD dwInstance; // 0x14 DWORD fdwOpen; // 0x18 DWORD fdwDriver; // 0x1C DWORD dwDriver; // 0x20 HACMSTREAM has; // 0x24 } ACMDRVSTREAMINSTANCE, *PACMDRVSTREAMINSTANCE;
The second parameter is the following structure:
typedef struct _ACMDRVSTREAMHEADER { DWORD cbStruct; // 0x00 DWORD fdwStatus; // 0x04 DWORD dwUser; // 0x08 LPBYTE pbSrc; // 0x0C DWORD cbSrcLength; // 0x10 DWORD cbSrcLengthUsed; // 0x14 DWORD dwSrcUser; // 0x18 LPBYTE pbDst; // 0x1C DWORD cbDstLength; // 0x20 DWORD cbDstLengthUsed; // 0x24 DWORD dwDstUser; // 0x28 DWORD fdwConvert; // 0x2C PACMDRVSTREAMHEADER *padshNext; // 0x30 DWORD fdwDriver; // 0x34 DWORD dwDriver; // 0x38 /* Internal fields for ACM */ DWORD fdwPrepared; // 0x3C DWORD dwPrepared; // 0x40 LPBYTE pbPreparedSrc; // 0x44 DWORD cbPreparedSrcLength; // 0x48 LPBYTE pbPreparedDst; // 0x4C DWORD cbPreparedDstLength; // 0x50 } ACMDRVSTREAMHEADER;