ナンメイの忘備メモ

Office 365/Azure/SCCM などなどのナンメイの忘備メモ

Process Monitor の基本的な使い方について

Process Monitor の基本的な使い方について

Process Monitor とは、Microsoft 社の Sysinternals で公開されている、OS 上のアプリケーションやサービスが行うレジストリアクセス、ファイルアクセスなどをモニターするツールです。

 このツールで出来ること

Process Monitor はフィルタドライバとして動作する (*) ので、プロセスの I/O を確認することが出来ます。例えば、以下のようなことが出来ます。

  • レジストリアクセスの監視
  • ファイルアクセスの監視
  • アプリケーションのスタックの確認

fltmc filters でこの様子が確認できます。
image.png

 このツールで出来ないこと (難しいこと)

  • ネットワークパケットの確認 -> WireShark や netsh、Fiddler 等を使いましょう。
  • OS 負荷調査等より高度な解析が必要 -> WPR 等を使いましょう。  

 使い方について

 導入まで

  1. 以下のサイトをクリックし、Download Process Monitor にてダウンロードします。
    https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

  2. 解凍し、Procmon.exe をクリックします。EULA が表示されたら表示にしたがってください。

  3. フィルター画面が表示されます。設定すると表示行をフィルターすることができます。サービスの動作も見えてほしいので、"Process Name is System" のチェックを外して "OK" を押します。
    20190504212207.png

  4. すぐにキャプチャが始まってしまうので、虫メガネアイコンをクリックしキャプチャを止めます。そして、消しゴムアイコンで一旦全部クリアしましょう。もう一度虫メガネアイコンをクリックするとキャプチャを開始することができます。
    20190504211946.png

 設定関連

  • スタック情報を解決するためにシンボルパスを設定します。
    [Options] - [Configure Symbols] より以下を設定します。
    srv*<任意のシンボルフォルダ>*https://msdl.microsoft.com/download/symbols
    20190504221914.png

  • 列の先頭行を右クリックし "Select Columns" をクリックすると、列をカスタマイズすることが出来ます。私はこんな感じにチェックを増やしてます。
    20190504213408.png

Duration : 経過時間
User Name : プロセスを実行したユーザー名
Integrity : 整合性レベル
Thread ID : スレッド ID

 使ってみる

キャプチャを開始すると大量に行が表示されます。
20190504214600.png

基本的に Operation を見ながら流れを追っていく形になるかと思います。

Reg~ はレジストリ関連
Thread~ はスレッド関連
Query~ や Read~ は参照
Create~ は作成や参照
Write~ や Set~ は書き込み
Close~ は終了
結果は Result で確認できます。

 実際に追ってみる

テストシナリオが難しいのですが。。とりあえず、何かのアプリケーションがファイルに大量アクセスして色々起きてるということにします。
とりあえず、VC++ で以下のコードを書きました。

ConsoleApplication1.cpp
#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;
}
  1. Process Monitor でキャプチャ開始
    image.png

  2. ConsoleApplication1 を開始~終了
    image.png

  3. Process Monitor でキャプチャ終了とします。
    image.png

[Tools] - [File Summary] をクリックします。
image.png
いい感じに data.txt が先頭に出てきましたね。
image.png

data.txt の行をダブルクリックしますと、data.txt のパスでフィルターされます。
image.png

先頭行をダブルクリックしてみますと、Event Properties としてオペレーションの情報と引数が表示されます。
image.png

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]タブではアプリケーションのパスやコマンドライン、プロセス情報や読み込まれたモジュールまで表示されます。
image.png

[Stack] タブですが、スタック情報が表示され、"Source" をクリックするとソースの該当行も表示されます。(*)
image.png

なぜかそのまま解決されてしまったのですが、本当は Process Monitor - [Options] - [Configure Symbols] よりシンボルとソースコードのパスを設定します。あと、シンボルが上手く解決できないことが結構あるあるなのですが、この場合、もう一つ Process Monitor を立ち上げたりしてシンボルの解析状況を確認し、exe や pdb を配置してあげます。(これが正しい方法なのかは疑問ですが・・)
image.png

Process Monitor - [Tools] - "Stack Summary" ではスタックごとの使用率を見ることもできます。ここから "Source" を見ることもできますし、これでボトルネックを探していくパターンもあると思います。
image.png

なお、絶対に意識しておかないといけないのは、Process Monitor では Result に多くのエラーが表示されますが、実際には関係のない場合も多く、これが本当に調査したい内容なのかどうかを見極める必要があります。

例えば、適当に Excel を起動してみてキャプチャした以下の画像では "NAME COLLISION" というエラーが大量に表示されています。
20190504220516.png

そして、NAME COLLISION と次の SUCCESS の行をそれぞれダブルクリックして 、"Event Properties" - "Stack" を確認すると、呼び出し側のアドレスが変わらないため、Excel が SHGetFolderPath API を Call し、その内部の呼び出しでこのエラーがハンドリングされている (であろう*) 様子が確認できます。
20190504221106.png
*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" では使用できるコマンドが記載されています。
    image.png

以上、Process Monitor の基本的な使い方でした。
お読みいただきましてありがとうございました。

AzureAD 条件付きアクセスのセッション制御が Public Preview となりました。

AzureAD 条件付きアクセスのセッション制御が Public Preview となりました。

AzureAD 条件付きアクセスのセッション制御として、以下の 2 つが Public Preview となりました。

 

サインインの頻度

リソースにアクセスを試みるユーザーが再びサインインを求められるようになるまでの期間。既定の設定は、90 日のローリング ウィンドウです。つまり、ユーザーが自分のマシンで非アクティブな状態が 90 日以上続くと、その後初めてリソースにアクセスを試みる時に再認証が求められます。

 

永続的なブラウザーセッション

永続的なブラウザー セッション (プレビュー)
永続的ブラウザー セッションを使用すると、ユーザーはブラウザー ウィンドウを閉じてから再び開いた後もサインイン状態を維持できます。

  • この設定は、[すべてのクラウド アプリ] が選択されている場合に正しく動作します。
  • これは、トークンの有効期間やサインインの頻度の設定には影響しません。
  • これは、[会社のブランド] の [サインイン状態を維持するためのオプションを表示する] ポリシーをオーバーライドします。
  • [永続的にしない] は、フェデレーション認証サービスから渡されるあらゆる永続的 SSO クレームをオーバーライドします。
  • [永続的にしない] の場合、モバイル デバイスのアプリケーションや、アプリケーションとユーザーのモバイル ブラウザーとの間で SSO は実行されません。

 

techcommunity.microsoft.com

 

日本語での表示は以下のとおり。

f:id:nanmei365:20190502025739p:plain

 

なお、条件付きアクセスを設定すると取得済みの更新トークンは破棄されますので、ユーザーは再度サインインが必要となり、必然的に設定された新しいポリシーが適用されることになります。

f:id:nanmei365:20190502030703p:plain

docs.microsoft.com

 

なお、今回の Blog では条件付きアクセス時の設定となりますが、Azure AD のアクセストークンと更新トークンを PowerShell New-AzureADPolicy で変更することも可能です。

docs.microsoft.com

Windows 10 OneNote でミニツールバーが使えるようになるようです

OneNote でミニツールバーが使えるようになるようです

ミニツールバーとは、PowerPoint などでテキストを選択すると右上に表示されるツールバーのことです。

f:id:nanmei365:20190502024103p:plain

一方で、現在の OneNote ではミニツールバーはなく、右クリックメニューでも大したことは行なえません。

f:id:nanmei365:20190502024306p:plain

 

現在、Windows 10 Insiders に展開中で、順次一般ユーザーにも利用できるようになるということです。

techcommunity.microsoft.com

Office で大量のアイコンが使用可能に

Office で大量のアイコンが使用可能に

Microsoft Office 365 blog によると、多くのユーザーからのフィードバックを受けて、アイコンを増強したと発表しました。

techcommunity.microsoft.com

 

見てみますと、何苦楚といわんばかりに大量のアイコンが・・。ユースケースを書くときに捗りそうですね。

PowerPoint アイコン

PowerPoint アイコン

 

なお、このアイコンの機能は Office 365 と Office 2019 の新機能です。

www.microsoft.com

Officeアンインストール定番の EasyFix が廃止に

Officeアンインストール定番の EasyFix が廃止に

 

Office でクリーンアンインストールには定番の EasyFix がダウンロード出来なくなっています。

代わりに、同リンクから SaRA*1 ベースの SetupProd_OffScrub.exe なるものがダウンロードできるようになりました。

support.office.com

 

OffScrub の実態はおそらく以下だと思いますが、更新日時が 2 years ago となっているので古そうですね。。

github.com

 

なお、SaRA 自体は以下からダウンロードできます。

diagnostics.outlook.com

*1:Microsoft Office 365サポート/回復アシスタント

Office 展開ツールの XML まだ手で書いてますか?

Office 展開ツールの XML まだ手で書いてますか?

Office 展開ツールを使うと、クイック実行版 Office のダウンロードやインストールが行えます。

docs.microsoft.com

 

Office を担当されている IT 管理者様方なら、こんなエラーを見たことあるのではないかなと思います。

Office 展開ツール エラー

私の経験上、十中八九は Configuration.xml の記述に問題があります。お見直しをいただきたいところなのですが、これを UI からポチポチできるツールが出てました。

https://config.office.com/

インポートもできるので、お試しあれ。

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 はどのチャネルでも毎月公開なんです。

 

半期チャネルだから更新しなくても良いというわけでもないとお知り見おきを・・。

docs.microsoft.com