Windows の内部動作
Windows サービス (NT サービス)
- Windows サービスとは?
Windows サービスはバックグラウンドで実行されるプログラムで、システム起動と同時に起動させたりできます。 - 単純な Windows サービスを作成する
Microsoft Windows サービス (以前は NT サービスと呼ばれていました) は非常に簡単に作成することができます。
DLL とその仕組み
- AppInit_DLLs による DLL インジェクション
ここでは AppInit_DLLs レジストリ値へ DLL 名を登録することによって、システムに自分の DLL を(いろんなプロセスに自動的に) ロードさせる方法を記載しています。 - インポートアドレステーブルと API フック
ある実行可能ファイルから、他の実行可能ファイル (DLL) にある関数を呼び出すために、実行可能ファイルのヘッダー情報の中のインポートセクションという場所に記録されている情報を使います。
イベントログの仕組み
- イベントログの仕組み
イベントログを構成する主要コンポーネントはなんでしょうか?イベントログの仕組みを説明します。 - イベントログの利用方法
メッセージファイルの作成方法及びイベントログを利用する簡単なプログラムの作成方法を示します。
パフォーマンスモニタの利用
- パフォーマンスモニタの仕組み
データを一元管理できる、パフォーマンスモニタの仕組みを説明しています。 - パフォーマンスカウンタの作成方法
パフォーマンスモニタに現れる、パフォーマンスオブジェクト及びパフォーマンスカウンタの作り方を説明します。
基本的なデータ構造
- LIST_ENTRY の仕組みと利用方法
この資料では Windows の基本的なデータ構造である LIST_ENTRY について説明します。
メモリ
- ヒープに関する話題
この記事では、Windows におけるヒープメモリの使い方と注意点について記載します。Win32 のメモリ割り当て関数を大きく二種類に分類する。ひとつ目を VirtualAlloc 系、もうひとつを HeapAlloc 系とする。 - ヒープの仕組み (Look Aside List, ルックアサイドリスト)
この資料では Windows XP 以前のデフォルトであった、ルックアサイドリスト (Look Aside List, LAL) をフロントエンドアロケータとする、ヒープメモリの仕組みについてご説明します。
プロセス・スレッド
- WOW64 上で実行しているかどうか確認する方法
指定したプロセスが WOW64 上で実行しているかどうか確認する方法を説明します。 - スリム・リーダー/ライター・ロックの利用
SRW ロックとは何か?どう使うのか?いつ使うのか?ということについて説明します。 - APC と Waitable Timer
この資料では、Windows が実装している 「非同期プロシージャ呼び出し(APC, Asynchronous Procedure Call)」 、 「待機可能タイマー (Waitable Timer)」 及び 「警告可能待機 (Alartable Timer)」の考え方を例を挙げて簡単に説明します。 - プロセスの列挙
「プロセスの列挙」の方法です。プロセスを列挙する簡単な方法は、Tool Help Library というのを使うと簡単です。Tool Help Library では、基本的にある瞬間のシステムのスナップショットをとり、その情報を取得できます。 - スレッドローカルストレージ (TLS) を理解する
それぞれのスレッドには、そのスレッドだけからしかアクセスできない、固有のデータを格納する領域を確保することができます。それが スレッドローカルストレージ (Thread Local Storage, TLS) です。 ここでは動作実験をすることによって、 TLS を理解しましょう。
例外処理
- 構造化例外処理と UnhandledExceptionFilter
この資料では Windows の例外処理の基本である構造化例外処理と、例外を処理しなかったときの動作を簡単に説明します。尚、例外処理の書き方はコンパイラによって異なりますが、ここでは Microsoft Visual C++ を用いて説明します。 - 構造化例外処理 ~ 例外情報の取得
例外 (SEH) が発生した際、例外フィルタにて GetExceptionInformation を用いて、その例外の情報を取得することが可能です。 GetExceptionInformation は例外フィルタでしか... - ベクトル化例外処理
構造化例外処理では、通常の try-except によるフレームベースの SEH の他、ベクトル化例外処理もサポートしています。これによって任意の時点での例外ハンドラの登録・解除を可能にします。 - C++ 例外と構造化例外処理 (1)
これまでに構造化例外処理についていくつか書きましたが、ここでは構造化例外処理が「何ではないのか」を書くことによって、構造化例外処理に関する理解を深めたいと思います。 - C++ 例外と構造化例外処理 (2)
前回は構造化例外処理 (SEH) における例外と C++ 例外は異なるものであることを説明しました。考えてみれば名前からして別物なのですが同じ「例外」ですし...