This message requests an ACM driver either to open a conversion stream or to indicate whether the specified conversion is supported.
MMSYSERR_NOERROR indicates success. Otherwise, the driver returns one of the MMSYSERR error values declared in the Mmsystem.h header file or one of the ACMERR error values declared in the Msacm.h header file. If a specified conversion is not supported, the driver should return ACMERR_NOTPOSSIBLE.
The ACM (Waveapi.dll) sends this message by calling the ACM driver’s ACM_IOControl entry point through the DeviceIoControl function. The ACM sends this message when an application calls the acmStreamOpen function.
All ACM drivers that provide stream conversions must support this message. For more information about stream conversions, see the Windows NT DDK.
If the client has specified the ACM_STREAMOPENF_QUERY flag, which is contained in the fdwOpen member of ACMDRVSTREAMINSTANCE, the driver should not open a stream instance. The driver returns MMSYSERR_NOERROR if the conversion is possible and MMSYSERR_NOTPOSSIBLE, otherwise.
When a driver receives this message, it first determines if it can perform the specified conversion. If it can, it performs instance initialization operations for the stream, such as determining which conversion routines to use and allocating instance-specific resources.
Store stream instance data in a local, dynamically allocated structure. Store a pointer to the dwDriver member of ACMDRVSTREAMINSTANCE.
If the driver supports asynchronous operations and the client has specified the ACM_STREAMOPENF_ASYNC flag, which is contained in the fdwOpen member of ACMDRVSTREAMINSTANCE, the driver sends the client an MM_ACM_OPEN callback message by calling the PostThreadMessage function after the operation completes.
Before calling the driver’s ACM_IOControl function, the ACM verifies the following conditions:
If the client specifies the ACM_STREAMOPENF_NONREALTIME flag, which is contained in the fdwOpen member of ACMDRVSTREAMINSTANCE, the driver can perform the conversion without time constraints. However, if this flag is not specified and the driver cannot perform the conversion in real time, it returns ACMERR_NOTPOSSIBLE. For more information about real-time conversions, see the Windows NT DDK.