MMIO Messages

The MMIO messages are sent to an I/O procedure as a result of an MMIO function call. For example, when an application calls mmioOpen, the MMIOM_OPEN message is sent to an I/O procedure. An application can also send the MMIO messages to an I/O procedure by issuing mmioSendMessage or by directly calling the I/O procedure.

The mmioSendMessage function should be used only to pass user-defined messages, or messages not automatically generated by an MMIO function, to the I/O procedure of the user's application.

When an application issues mmioSendMessage, it passes an hmmio parameter, which MMIO converts to an MMIOINFO block before sending the parameter to the I/O procedure. When an application calls an I/O procedure directly, a pmmioinfo parameter is passed to the I/O procedure instead of an hmmio. The following is a function prototype for a direct I/O procedure call:

LONG APIENTRY MMIOPROC (PVOID pmmioinfo, USHORT usMsg,
                        LONG lParam1, LONG lParam2);
┌──────────────────────────┬──────────────────────────────────┐
│Message                   │Description                       │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_BEGININSERT         │Requests that all subsequent      │
│                          │Writes insert data at the current │
│                          │seek position.                    │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_BEGINRECORD         │Requests all subsequent Writes be │
│                          │considered one logical unit by an │
│                          │UNDO or REDO.                     │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_BEGINSTREAM         │Sent before the first mmioRead or │
│                          │mmioWrite to start the stream at  │
│                          │the optimum rate for the file.    │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_CLEAR               │Requests that a specified range be│
│                          │deleted from a file.              │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_CLOSE               │Requests that the file be closed. │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_COPY                │Requests that a specified range be│
│                          │copied to the clipboard.          │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_CUT                 │Requests that a specified range be│
│                          │copied to the clipboard and then  │
│                          │deleted.                          │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_ENDSTREAM           │Sent after the last mmioRead or   │
│                          │mmioWrite to end the stream.      │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_DELETE              │Requests that information be      │
│                          │removed from a file.              │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_ENDINSERT           │Requests that all subsequent      │
│                          │Writes overwrite data at the      │
│                          │current seek position.            │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_ENDRECORD           │Indicates that the logical record │
│                          │operation has ended and data      │
│                          │structures should be updated, if  │
│                          │necessary.                        │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_GETCF               │Obtains the handle (hmmcf) of the │
│                          │RIFF compound file.               │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_GETCFENTRY          │Requests a CTOC entry for an      │
│                          │element of a RIFF compound file.  │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_GETFORMATINFO       │Requests that the IOProc return an│
│                          │MMFORMATINFO structure.           │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_GETFORMATNAME       │Requests the format name for the  │
│                          │IOProc.                           │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_GETHEADER           │Requests that the IOProc return   │
│                          │media-specific information.       │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_IDENTIFYFILE        │Attempts to determine if any      │
│                          │IOProc can process a file.        │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_MULTITRACKREAD      │Requests that data be read from a │
│                          │movie file.                       │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_MULTITRACKWRITE     │Requests that data be written to a│
│                          │movie file.                       │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_OPEN                │Requests that a file be opened or │
│                          │deleted.                          │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_PASTE               │Requests that data from the       │
│                          │clipboard be inserted into a file.│
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_QUERYHEADERLENGTH   │Requests that the IOProc return   │
│                          │the size the header.              │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_QUERYIMAGE          │Requests that the IOProc return   │
│                          │the currently selected image index│
│                          │in the image file.                │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_QUERYIMAGECOUNT     │Requests that the IOProc return   │
│                          │the number of images stored in the│
│                          │image file.                       │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_READ                │Requests that bytes be read from  │
│                          │an open file.                     │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_REDO                │Requests that the last logical    │
│                          │action which was undone be redone.│
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_SAVE                │Requests temporary changes in a   │
│                          │file.                             │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_SEEK                │Requests that the current file    │
│                          │position be moved.                │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_SEEKBYTIME          │Requests that the file position be│
│                          │moved relative to some unit of    │
│                          │time.                             │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_SET                 │Requests that extended file       │
│                          │information be set or queried.    │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_SETHEADER           │Requests that the IOProc use      │
│                          │media-specific information when   │
│                          │writing or accepting data.        │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_SETIMAGE            │Selects a new image index in the  │
│                          │image file.                       │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_STATUS              │Used to pass appropriate          │
│                          │MCI_STATUS requests to an IOProc. │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_TEMPCHANGE          │Requests that all subsequent      │
│                          │Writes to the media be treated as │
│                          │temporary changes.                │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_UNDO                │Requests that the last logical    │
│                          │action, either a delete, insert,  │
│                          │undo, or redo, be undone.         │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_WINMSG              │Allows an application or an MCD to│
│                          │pass PM messages from a window    │
│                          │procedure to an IOProc.           │
├──────────────────────────┼──────────────────────────────────┤
│MMIOM_WRITE               │Requests that the bytes be written│
│                          │to an open file.                  │
└──────────────────────────┴──────────────────────────────────┘

The MMIO messages indicate, to the I/O procedure, the type of MMIO operation to be performed. I/O procedures can be called to process files that might or might not use the RIFF format standard.

Note: The compound-file messages must not be used while creating or appending to the compound file itself.