そのような質問をするのに適した場所かどうかはわかりません。低レベルのライブラリ (dbghelp) を wince に移植しようとしていますが、wince では利用できない API にアクセスする必要があります。TEB (スレッド環境ブロック) にアクセスする必要があります。それを行う PC で利用可能な API がいくつかありますが、WinCE にはそのようなものはありません。それらの 1 つは NTQueryThreadInformation などと呼ばれ、もう 1 つは現在のスレッドの TEB へのポインターを返す NtCurrentTEB です。その上で任意のポインタ?..ありがとう
2 に答える
利用可能な CE5 プロセスおよびスレッド関数は、こちら で見つけることができます。
WinCE の TEB に直接相当するものはありませんが、「TEB.TlsSlots」に似ているスレッド ローカル ストレージの TlsGetValue、TlsSetValue などを見てきました。CeGetThreadQuantum、GetThreadTimes、GetThreadPriority、および GetThreadContext も、スレッドに関する特定の情報を提供できます。
私のプログラミングのニーズは通常、CreateThread、Suspend/ResumeThread、ThreadProc、および Set/GetThreadPriority で満たされていたため、私自身はこれまでそれらを使用したことがありませんでした。
Boost.Context からのこのアセンブリ フラグメントは、TIB ポインタがコレジスタ プロセッサに格納され、次のように取得できることを示唆しています。
mrc p15, #0, v1, c13, c0, #2
スレッド情報/環境ブロックのレイアウトについて: Win32 とまったく同じかどうかはわかりません。Boost からのリンクされたコードは、間違いなくそうであると想定しているようです。そこに(再)保存している「割り当て解除スタック」の存在を確認する情報を見つけることができませんでした。スタック ベースと制限は、WinCE SDK ヘッダーのこれらのオフセットに表示されます。