アホっぽい質問ですいません。

とあるDLLがありまして、それの中の関数の実行時間が、
1000msec 〜 5000msec という時間ムラのある処理です。
これを 2000msec をしきい値としてタイムアウトしたいのですが、
どのようにすればいいでしょうか?

タイムアウト自体は、CreateThreadして、
WaitForSingleObjectの引数でどうにかなるとして、
いったん起動してしまったスレッドの実行を
明示停止するのは、どうすればいいのでしょうか。
(CloseHandleってシステムによるスレッド管理を止めるだけですよね??)

TerminateThreadはダメよ、
とMSDNに書いてあるので使う気があまりしません。
関数自体に、タイムアウトの引数を持たせるとか、
同期イベントをうけとる引数を持たせるとかしないと、
タイムアウトを実現する根本的な解決にならないのでしょうか?
(そのDLLはサードパーティのやつなんでバイナリしかない...)