Process Monitor の基本的な使い方について
Process Monitor の基本的な使い方について
Process Monitor とは、Microsoft 社の Sysinternals で公開されている、OS 上のアプリケーションやサービスが行うレジストリアクセス、ファイルアクセスなどをモニターするツールです。
このツールで出来ること
Process Monitor はフィルタドライバとして動作する (*) ので、プロセスの I/O を確認することが出来ます。例えば、以下のようなことが出来ます。
- レジストリアクセスの監視
- ファイルアクセスの監視
- アプリケーションのスタックの確認
このツールで出来ないこと (難しいこと)
使い方について
導入まで
-
以下のサイトをクリックし、Download Process Monitor にてダウンロードします。
https://docs.microsoft.com/en-us/sysinternals/downloads/procmon -
解凍し、Procmon.exe をクリックします。EULA が表示されたら表示にしたがってください。
-
フィルター画面が表示されます。設定すると表示行をフィルターすることができます。サービスの動作も見えてほしいので、"Process Name is System" のチェックを外して "OK" を押します。
-
すぐにキャプチャが始まってしまうので、虫メガネアイコンをクリックしキャプチャを止めます。そして、消しゴムアイコンで一旦全部クリアしましょう。もう一度虫メガネアイコンをクリックするとキャプチャを開始することができます。
設定関連
-
スタック情報を解決するためにシンボルパスを設定します。
[Options] - [Configure Symbols] より以下を設定します。
srv*<任意のシンボルフォルダ>*https://msdl.microsoft.com/download/symbols -
列の先頭行を右クリックし "Select Columns" をクリックすると、列をカスタマイズすることが出来ます。私はこんな感じにチェックを増やしてます。
Duration : 経過時間
User Name : プロセスを実行したユーザー名
Integrity : 整合性レベル
Thread ID : スレッド ID
使ってみる
基本的に Operation を見ながら流れを追っていく形になるかと思います。
Reg~ はレジストリ関連
Thread~ はスレッド関連
Query~ や Read~ は参照
Create~ は作成や参照
Write~ や Set~ は書き込み
Close~ は終了
結果は Result で確認できます。
実際に追ってみる
テストシナリオが難しいのですが。。とりあえず、何かのアプリケーションがファイルに大量アクセスして色々起きてるということにします。
とりあえず、VC++ で以下のコードを書きました。
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
const int LOOP = 10000;
for (int i = 0; i < LOOP; i++) {
ifstream ifs("C:\\work\\test\\data.txt", ios_base::in);
string str;
if (ifs.fail()) {
cerr << "File do not exist.\n";
int waituser;
cin >> waituser;
return 0;
}
}
int waituser;
cout << "Finished";
cin >> waituser;
return 0;
}
[Tools] - [File Summary] をクリックします。
いい感じに data.txt が先頭に出てきましたね。
data.txt の行をダブルクリックしますと、data.txt のパスでフィルターされます。
先頭行をダブルクリックしてみますと、Event Properties としてオペレーションの情報と引数が表示されます。
CreateFile API の引数とほぼほぼマッチしてますね。
HANDLE CreateFileA(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea
なお、この Operation は Process Monitor が勝手に区分けしただけで、System Call の名称と合致するわけではありません。
また、引数も API 内の呼び出しに応じて何段階かに別れて表示される場合もあります。
[Process]タブではアプリケーションのパスやコマンドライン、プロセス情報や読み込まれたモジュールまで表示されます。
[Stack] タブですが、スタック情報が表示され、"Source" をクリックするとソースの該当行も表示されます。(*)
なぜかそのまま解決されてしまったのですが、本当は Process Monitor - [Options] - [Configure Symbols] よりシンボルとソースコードのパスを設定します。あと、シンボルが上手く解決できないことが結構あるあるなのですが、この場合、もう一つ Process Monitor を立ち上げたりしてシンボルの解析状況を確認し、exe や pdb を配置してあげます。(これが正しい方法なのかは疑問ですが・・)
Process Monitor - [Tools] - "Stack Summary" ではスタックごとの使用率を見ることもできます。ここから "Source" を見ることもできますし、これでボトルネックを探していくパターンもあると思います。
なお、絶対に意識しておかないといけないのは、Process Monitor では Result に多くのエラーが表示されますが、実際には関係のない場合も多く、これが本当に調査したい内容なのかどうかを見極める必要があります。
例えば、適当に Excel を起動してみてキャプチャした以下の画像では "NAME COLLISION" というエラーが大量に表示されています。
そして、NAME COLLISION と次の SUCCESS の行をそれぞれダブルクリックして 、"Event Properties" - "Stack" を確認すると、呼び出し側のアドレスが変わらないため、Excel が SHGetFolderPath API を Call し、その内部の呼び出しでこのエラーがハンドリングされている (であろう*) 様子が確認できます。
*Process Monitor はデバッグではなく過程がわからないので "あろう" となります。
なお、当然適当に起動した Excel はちゃんと起動されていますので、Result で何かエラーが出てるというだけでは判断できないのですね。
お役立ち機能について
手にとっていただいた皆様は、おそらく Filter や Highlight などを触られたのではないかなと思います。
ここでは、ちょっと目に止まりそうにないと思われる項目をピックアップします。
-
Drop Filter Event
Process Monitor - [Filter] - "Drop Filter Event" を設定すると、フィルター条件に引っかかったものだけをキャプチャします。 -
History Depth
Process Monitor - [Options] - "History Depth" を設定すると、最大容量を設定できます。なお、あんまり厳密ではないので、大体そのくらいの容量で制限されるとお考えください。 -
Enable Boot Logging
Process Monitor - [Options] – "Enable Boot Logging" を設定すると、ブート時に Process Monitor がログ採取を行います。なお、Generate thread profiling events のチェックはいらないと思います。ブート後、Process Monitor を起動するとログ採取を終了できます。 -
Backing Files
Process Monitor - [File] – "Backing Files" を設定すると、既定の仮想メモリ上へのアウトプットからファイルへのアウトプットに切り替えることができます。Process Monitor は長時間採取することはおすすめしませんが、必要に応じて使用してみてください。なお、History Depth と併用することもできます。 -
コマンドライン
Process Monitor はコマンドラインで実行できます。Process Monitor - [Help] – "Command Line Options" では使用できるコマンドが記載されています。
以上、Process Monitor の基本的な使い方でした。
お読みいただきましてありがとうございました。
AzureAD 条件付きアクセスのセッション制御が Public Preview となりました。
AzureAD 条件付きアクセスのセッション制御が Public Preview となりました。
AzureAD 条件付きアクセスのセッション制御として、以下の 2 つが Public Preview となりました。
サインインの頻度
リソースにアクセスを試みるユーザーが再びサインインを求められるようになるまでの期間。既定の設定は、90 日のローリング ウィンドウです。つまり、ユーザーが自分のマシンで非アクティブな状態が 90 日以上続くと、その後初めてリソースにアクセスを試みる時に再認証が求められます。
永続的なブラウザーセッション
永続的なブラウザー セッション (プレビュー)
永続的ブラウザー セッションを使用すると、ユーザーはブラウザー ウィンドウを閉じてから再び開いた後もサインイン状態を維持できます。
- この設定は、[すべてのクラウド アプリ] が選択されている場合に正しく動作します。
- これは、トークンの有効期間やサインインの頻度の設定には影響しません。
- これは、[会社のブランド] の [サインイン状態を維持するためのオプションを表示する] ポリシーをオーバーライドします。
- [永続的にしない] は、フェデレーション認証サービスから渡されるあらゆる永続的 SSO クレームをオーバーライドします。
- [永続的にしない] の場合、モバイル デバイスのアプリケーションや、アプリケーションとユーザーのモバイル ブラウザーとの間で SSO は実行されません。
日本語での表示は以下のとおり。
なお、条件付きアクセスを設定すると取得済みの更新トークンは破棄されますので、ユーザーは再度サインインが必要となり、必然的に設定された新しいポリシーが適用されることになります。
なお、今回の Blog では条件付きアクセス時の設定となりますが、Azure AD のアクセストークンと更新トークンを PowerShell New-AzureADPolicy で変更することも可能です。
Windows 10 OneNote でミニツールバーが使えるようになるようです
Office で大量のアイコンが使用可能に
Office で大量のアイコンが使用可能に
Microsoft Office 365 blog によると、多くのユーザーからのフィードバックを受けて、アイコンを増強したと発表しました。
見てみますと、何苦楚といわんばかりに大量のアイコンが・・。ユースケースを書くときに捗りそうですね。
なお、このアイコンの機能は Office 365 と Office 2019 の新機能です。
Officeアンインストール定番の EasyFix が廃止に
Officeアンインストール定番の EasyFix が廃止に
Office でクリーンアンインストールには定番の EasyFix がダウンロード出来なくなっています。
代わりに、同リンクから SaRA*1 ベースの SetupProd_OffScrub.exe なるものがダウンロードできるようになりました。
OffScrub の実態はおそらく以下だと思いますが、更新日時が 2 years ago となっているので古そうですね。。
なお、SaRA 自体は以下からダウンロードできます。
*1:Microsoft Office 365サポート/回復アシスタント
Office 展開ツールの XML まだ手で書いてますか?
Office 365 ProPlus のチャネルはパッチの公開頻度じゃないですよ?
Office 365 ProPlus のチャネルはパッチの公開頻度じゃないですよ?
「弊社は Office 365 ProPlus の半期チャネルだから、パッチは半年に一回で良いんだ。」ということをよく耳にするのですが、Office のチャネルはどれだけ頻繁に次のバージョンが公開されるかってことです。更新プログラムが公開される頻度ではありません。
Office 365 ProPlus では以下の体系で3つのチャネルがあります。
- 月次チャネル : 毎月のようにバージョンが上がる。
- 半期チャネル : 3 月、9 月と 6 ヶ月単位でバージョンが上がる。
- 半期チャネル (対象指定) : 1 月、7 月と 6 ヶ月単位でバージョンが上がる。
バージョンが上がると Office 365 ProPlus では新機能が追加されるので、この頻度に合わせて各チャネルを分けてるんですね。
でも、セキュリティ更新と Bug fix はどのチャネルでも毎月公開なんです。
半期チャネルだから更新しなくても良いというわけでもないとお知り見おきを・・。