指向配置器的介面是 IMXF 和 IAllocatorMXF。 這些介面可讓您重複使用 DMUS_KERNEL_EVENT 結構,而無需分配和解除配置記憶體。 IMXF::P utMessage 會為配置器提供結構,而 IAllocatorMXF::GetMessage 會從配置器擷取新歸零的DMUS_KERNEL_EVENT結構以供重複使用。 配置器在集區中是以空的DMUS_KERNEL_EVENT結構創建的,因此它不會從空開始。如下圖所示,IRP(以DMUS_EVENTHEADER結構的形式)從dmusic.dll進入解包程式。
解壓縮程式會呼叫 IAllocatorMXF::GetMessage 來擷取空白 的DMUS_KERNEL_EVENT 結構。 解壓縮程式會從 IRP 擷取DMUS_KERNEL_EVENT結構、填入這些結構 (每個 MIDI 事件一個) ,並將它們向下傳遞至排序器 (使用其 MXF 介面) 。 排序器會根據時間戳記重新排序它們,並在到期時呼叫IMXF::PutMessage將它們傳遞至小型埠驅動程式。 迷你埠驅動程式會將 MIDI 數據從DMUS_KERNEL_EVENT結構中提取出來,以便將它轉譯成波浪數據。 它會使用另一個 IMXF::PutMessage 呼叫,將使用過的 DMUS_KERNEL_EVENT 結構傳回給分配器。
對於捕獲情況則相反。 MIDI 數據會從硬體傳入迷你埠驅動程式,而迷你埠驅動程式會呼叫 IAllocatorMXF::GetMessage 來取得空的 DMUS_KERNEL_EVENT 結構。 DMUS_KERNEL_EVENT結構會填入時間戳記和資料,並透過IMXF::PutMessage傳遞至捕捉接收器。 如果迷你埠驅動程式在DMUS_KERNEL_EVENT結構中設定DMUS_KEF_EVENT_INCOMPLETE旗標,則每個結構可以傳遞多個訊息。 DMus 埠驅動程式中的擷取裝置會剖析此原始資料流,並發出包含時間戳記 MIDI 訊息的 DMUS_KERNEL_EVENT 結構(每個結構一條訊息)。
迷你埠驅動程式本身也可以發出時間戳記訊息至捕捉接收器。 在此情況下,驅動程式不會在 DMUS_KERNEL_EVENT 中設定 DMUS_KEF_EVENT_INCOMPLETE 位。 捕捉接收器會將時間戳記的結構直接傳遞給封裝器,將訊息封裝成 IRP 並將它們傳送至 dmusic.dll。 DirectMusic 擷取僅用於錄製 MIDI。 針對波形錄製,請使用 DirectSound 擷取。
當封包器從DMUS_KERNEL_EVENT結構中提取資料時,它會使用IMXF::PutMessage將已使用的DMUS_KERNEL_EVENT結構捨棄到配置器中。 當 IRP 緩衝區已滿時,它會傳遞至 dmusic.dll。 打包程式會從 dmusic.dll接收空的 IRP,加以填入,然後將其完成。 更多的 IRP 不斷滴落,以便它總是有一個要填補。