2016-08-22 3 views
0

スレッド情報ブロックは広く知られていて、いくつかの重要な情報へのアクセスに使用できます。しかし、それを使ってデータを保存することはできますか?Win32 TIBにデータを保存する

私は構造体がオフセット14h(x86)/ 28h(x86-64)の任意のポインタ用のスロットを持っているのを見ました。

このポインタを使用して、自分のスケジューラから自分のスレッド構造をポイントできますか?それとも何か他のものによって上書きされますか?

答えて

3

TlsAlloc()関数を使用して、スレッドローカルストレージを割り当てることができます。各TLSインデックスはポインタサイズの値を保存できるため、必要に応じてTLSスロットを使用してより大きな割り当てられたデータ構造をポイントすることができます。

例としてUsing Thread Local Storageを参照してください。

+1

はい、私はこの解決策を認識しています。これは、ユーザがスロットを 'TlsFree()'でオーバーライドすることができるので、問題を引き起こす可能性があります。 – Leandros

+1

ユーザーは?あなたが参照しているこのユーザーは誰ですか?彼らはあなたの知識なしにあなたのプログラムにコードを書いていますか? TLSスロットを解放しないことを約束する必要があります。ちょうどあなたがTIBに書き込まないことを約束する必要があるように。 TLSを使用します。 TIBはプライベートです。 –

+0

@DavidHeffernanはい。私はTLSを使用することはできません。なぜなら、それは私には当てはまらない仮定をする必要があるからです。とにかくTLSにアクセスするためにTIBを使用しなければならないという意味でインデックスにはアクセスできません。ユーザーがエントリポイントを置き換えずに最初のTLSスロットに何か書き込んだと仮定する必要があります。 – Leandros

関連する問題