TortoiseSVN が採用しているのがそのようなハイブリッドな方法です。すなわち、XP なら .ico データを DrawIconEx でオーナー描画し、Vista なら .ico データをアルファ付き HBITMAP にしてメニューに割り当てるという方法です。 Windows 2000 ではアルファチャンネル付きのデータはどうやっても綺麗に表示されないので、そもそもアイコンを表示しないか、256 色の手彫りのアイコンを別途用意する必要があります。epo では、Windows 2000 のときにはアイコンを表示しないことにしました。

この方法、具体的に細部まで説明するのは大変なので、申し訳ないのですが、詳細については TortoiseSVN のソースを落としてご覧ください。src\TortoiseShell\ContextMenu.cpp あたりに実装が記述されています。