The members in the structures used for the lParam2 parameter all have similar organizations. All the members in these structures are the size of DWORDs.Their first member is dwCallback and it is used for the window function associated with the MCI_NOTIFY flag. If the structure is used to return data from the device driver, the data-return members immediately follow the first member. If the structure is used to pass data to the device driver from the application, the data-transfer members immediately follow any return members.
There are four possible arrangements for return members:
Any data passed to your device driver follows the return members. Your device driver should not read data from a member in these structures unless the member is validated with a flag. Without the flag, your device driver is not guaranteed of finding valid data in the structure. For example, the MCI_OPEN_ELEMENT flag validates the lpstrElementName member of the MCI_OPEN_PARMS structure.
If an application does not use any of the members of a structure, it can specify NULL for lParam2.
Commands that extend the structures will add new members to the end of the existing structures. The names used for extended structures add the device type to the name of the data type. For example, the extended MCI_OPEN_PARMS structure for animation devices uses MCI_ANIM_OPEN_PARMS as the name.