waveIn*** がよく分からん

http://d.hatena.ne.jp/yellow_73/20050422 の続き。
バッファを2重化して、WIM_DATA をつかまえたら、一杯になったバッファをファイルに書き出して、再び waveInPrepareHeader + waveInAddBuffer でバッファに追加するというワザを使ったところ、waveInReset や waveInStop でロックされてしまいました。
よく分からないけど、バッファが残っているとロックがかかるくさい。
あと、ウィンドウメッセージを受けたイベントから waveInOpen を実行して、そのスレッドのまま WIM_OPEN を受けてフラグが立つのを待つようなコードにすると、永久に待機しています。