Decremented Blog

プログラミング、釣り、工作など、ジャンルを特に定めず、適当に書かれたブログです。

GetThreadId

2007-12-16 02:02:59 | プログラミング・開発
スレッドハンドルからスレッドIDが取得したかったのですが、GetThreadId()はWindows Vistaからしか使えないんですね。
カーネル自体はサービスを公開しているので、デバイスドライバからは同等の関数が使えたりするのですが、なぜ、ユーザーモードでは使えないのでしょう?
結構、使う関数だと思うのですが。

まあ、GetCurrentThreadId()が使えるので、スレッド起動後に自分で取得させて変数に持っておけば終わる話ではあるのですが、スレッド間での変数の共有は、最小限にしたい所です・・・

UPnP API on Windows

2007-12-16 01:57:07 | プログラミング・開発
UPnP経由でルータに穴を開けるプログラムを書いているのですが、楽になりましたねえ・・・
Windows 2000の時は、自分でプロ取る実装してたので大変だったのですが、今は、WindowsがAPI持ってますから、呼び出すだけです。
ちなみに、VisualStudio 2005にはUPnP.hが無いので、SDKを落としてきてインストールしましょう。
rpcsal.hとupnp.hをプロジェクト内にコピーしておけば、SDKをインストールしていないマシンでもコンパイルできます。


基本的には
1.IUPnPDeviceFinderでデバイス検索
2.IUPnPService::InvokeActionで、ポート追加を実行
と、非常に単純な処理になります。

IUPnPService::InvokeActionが、非同期呼び出し持ってないんですが、キャンセルってどうやるんでしょう?
中断したい時は、スレッドを殺すしかないのかなあ・・・
まあ、デバイスの検索と違って時間がかからないので、あまり中断することは無いと思いますが・・・