EventLog.EntryWritten イベントが同じエントリに対して複数回発生することがある

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、 .NET Framework の EventLog.EntryWritten イベントの不具合について報告します。   現象 EventLog.EntryWritten イベントはローカル コンピューター上のイベント ログにエントリが書き込まれた時に発生します。 ユーザーはこのイベントを利用してイベント ログの書き込みを監視することができますが、稀に通知済みのエントリに対して再度イベントが発生することがあります。   原因 EntryWritten イベント処理の内部において、どのイベントまで通知済み (登録されたハンドラーの呼び出し済み) かどうかを管理している値 (lastSeenCount) があります。 イベント ログにエントリが書き込まれる度にハンドラーが呼び出されるため、 lastSeenCount は通常単調に増加します。 また .NET Framework では最も古いイベント ログのエントリ番号を表す OldestEntryNumber と、イベント ログに含まれるエントリ数に相当するEntryCount と呼ばれる値も管理しています。 本来これらは OldestEntryNumber <= lastSeenCount かつ lastSeenCount <= OldestEntryNumber + EntryCount の条件を満たしている必要があります。 しかしながら、ある稀なタイミングで上書きなどによりエントリの削除が実行された場合、この条件を満たさない状態になります。 この時 .NET Framework…


Windows 10 Fall Creators Update での Credential Provider に対する影響について

こんにちは、Windows SDK サポートチームです。今回、Windows 10 Fall Creators Update の OS の仕様変更により、Credential Provider に影響が出ることがあります。その解説を以下に記載しましたので、ご確認ください。 Windows 10 Fall Creators Update では、Winlogon Automatic Restart Sign-On (ARSO) の機能がよりよいパワーサイクルを提供する機能拡張が行われました。本処理では、シャットダウン / リブート後のユーザーがログインされた後のアップデート処理を自動的に実施するために、ARSO の機能により、自動ログイン –> ロック を行います。 Winlogon Automatic Restart Sign-On (ARSO)https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/winlogon-automatic-restart-sign-on–arso- この動作により、Credential Provider の ICredentialProvider::SetUsageScenario にて、上記の自動ログインが捕捉されなくなります。その結果、ロック解除時に Credential Provider へ処理がわたりますため、初回の呼び出しであっても、ロックステータスとなります。 – 回避策 以下のポリシーまたは、レジストリをセットいただきますと、ARSO を無効化することが可能です。初回のログオン時を捕捉し、処理を行われている Credential Provider を開発いただいている場合、以下の回避策の利用をご検討ください。 Policy Registry Location: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System Type: DWORD…


Windows 10 Creators Update 以降の OS で日本語 Microsoft IME を使用中にメモリ アクセス違反が発生することがある

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、日本語の Microsoft IMEの使用中にメモリ アクセス違反が発生する現象についてご案内します。   現象 Windows 10 Creators Update 以降で、日本語 Microsoft IME を使用中に、大量のキー入力を高速で行うと、メモリ アクセス違反が発生することがあります。   詳細 テキストボックス等の入力可能なコントロールで WM_IME_COMPOSITION メッセージを処理すると、コントロール上で入力された変換文字列を操作することが可能です。 例えば、テキスト ボックスで WM_IME_COMPOSITION メッセージを受信した際に、引数に NI_COMPOSITIONSTR および CPS_COMPLETE を指定して ImmNotifyIME() を呼び出すプログラムを作成すると、ユーザーによって入力された変換文字列を即座に確定させることができます。 ひらがなのみ、カタカナのみを入力として受け付けたいテキストボックス等がある場合は、このようなプログラムを作成することによって、ユーザーの入力支援を行うことができます。 ところが、このような処理を行うプログラムを Windows 10 Creators Update 以降で実行して、大量のキー入力を連続して高速で行った (同じキーを押し続ける等) 場合に、メモリ アクセス違反が発生してプログラムが強制終了することがあります。   原因 Microsoft IME 側の予測変換処理とアプリケーション側の変換処理が並行して高速で実行されたために、文字変換処理に必要な内部データに不整合が生じた結果、メモリアクセス違反が発生していました。   回避策 以下のいずれかの方法を、代替案としてご検討ください。   (a)…


Windows 10 Fall Creators Update での GetPixel、SetPixel 関数の処理速度について

  こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は Windows 10 Fall Creators Update 環境で GetPixel および SetPixel 関数の処理速度が、Windows 10 Creators Update 以前の Windows 10 の処理速度と比較し、遅くなる現象についてご案内いたします。   現象 プログラムの内容にもよりますが、ほぼ同等スペックの Windows 10 Creators Update と Windows 10 Fall Creators Update で GetPixel 、SetPixel 関数の処理速度を GetTickCount 関数を使用して計測した結果 Windows 10 Fall Creators Update 上の処理速度は、Windows 10 Creators Update の数倍から数十倍遅くなることが報告されています。   回避策…


RichTextBox 上の選択範囲に、TextSelection.ApplyPropertyValue() で FontStyle を適用した時の現象について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、WPF の RichTextBox コントロール上の現在の選択範囲に対し、TextSelection.ApplyPropertyValue() で FontStyle を適用して修飾した場合について、二つの現象をご案内します。   現象 1. RichTextBox.Selection プロパティに FontStyles.Italic スタイルを適用しても、RichTextBox 上では Italic スタイルで描画されません。 現象 2. RichTextBox 内の文字列の最後尾にカーソルが存在する状態で、RichTextBox.Selection プロパティに FontStyles.Bold スタイルを適用した後、そのまま続けて全角文字を追記すると、追記した全角文字に Bold スタイルが適用されず、Bold スタイルで描画もされません。   以下に、現象 1. と 2. についてそれぞれ原因と対処方法をご案内します。   現象 1. について   原因 現象 1. は、Windows 7 SP1 および Windows 8.1 の WPF における…


Windows 10 Fall Creators Update において、未確定文字列の確定タイミングが変更されました

  こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、詳細なテキストサービス (Text Service Framework、以降 TSF) に対応していないアプリケーション  (以降、TSF 非対応アプリケーション) 上で入力した文字の確定タイミングが、Windows 10 Fall Creators Update において変更されたことについてご案内します。   テキストボックスなどの文字入力が可能なウィンドウに文字を入力すると、入力した文字が一旦未確定の状態 (文字の下に波線が表示された状態) で表示されます。 Windows 10 Creators Update 以前の OS では、TSF 非対応アプリケーション (Notepad.exe 等) 上のウィンドウに入力した文字が未確定状態のまま、他のウィンドウにフォーカスを移動すると、未確定状態の文字が一旦非表示となりました。 そして、元のウィンドウにフォーカスを戻すと、再び未確定状態の文字が表示されて、文字の編集・入力を継続することができました。   これに対し Windows 10 Fall Creators Update からは、同様に入力した文字が未確定状態のまま他のウィンドウにフォーカスを移動すると、未確定状態だった文字が確定されるようになりました。 またこの時、未確定文字が確定されたことに伴い、そのことをを通知する WM_IME_ENDCOMPOSITION メッセージが、フォーカスを移動する前のウィンドウに対して送信されるようになりました。   元々この動作は、TSF に対応しているアプリケーション (Wordpad 等) における既定の動作でした。 Windows 10…


Fall Creators Update を適用後 DataGridView に文字を入力すると 2 文字入力される

  こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Fall Creators Update を適用すると Windows フォーム アプリケーションの DataGridView で文字が 2 文字表示される現象についてご案内します。   現象 Windows フォーム アプリケーションで DataGridView のセル自体が選択されている状態で日本語 (全角文字、カタカナ) を 1 文字入力すると、確定された状態で 2 文字が表示されます。 例)写真 1 の状態で「あ」と入力するため「A」キーを 1 回押下すると、写真 2 のように「ああ」と 2 文字が確定された状態で表示されます。 写真 1 写真 2   この現象は Fall Creators Update を適用した Windows 10 で発生を確認しており、以前のバージョンでは発生しません。 写真のようなVisual Studio で…


LTSC (Long-Term Servicing Channel) の判定方法

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Microsoft の新しいサービシング モデルである LTSC (Long-Term Servicing Channel) の Windows をプログラムから判定する方法をご案内します。   プログラムから判定する方法には二つあります。 一つは WMI の Win32_OperatingSystem クラスの OperatingSystemSKU プロパティを参照する方法で、もう一つは Win32 API の GetProductInfo() の第五引数に返される値を参照する方法です。 以下に、MSDN ライブラリのリファレンスから該当箇所を引用し、それぞれ URL をご紹介します。   ◆ Win32_OperatingSystem class https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa394239.aspx OperatingSystemSKU Data type: uint32 Access type: Read-only Qualifiers: MappingStrings (“WMI”) Stock Keeping Unit (SKU) number for the…


StorageFolder.GetFilesAsync() メソッドの結果が正しく返されない問題について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、StorageFolder.GetFilesAsync() メソッドに関して確認されている問題についてご案内します。 現象 「[マイ コンピューター] からドライブにアクセスできないようにする」のポリシーが有効になっているドライブ上のフォルダに対して StorageFolder.GetFilesAsync() メソッドを実行しても、ファイルの一覧が取得できません。 フォルダ内ににファイルが存在するにも関わらず、取得される結果は 0 件となってしまいます。 この現象は、StorageFolder.GetFilesAsync() メソッドに限らず、StorageFolder.GetFoldersAsync() メソッドや StorageFolder.GetItemsAsync() メソッドを実行した場合にも発生します。 これらのメソッドを呼び出した際に、インデックスを使用しないクエリが選択された場合に限り発生いたします。 インデックスが使用されないクエリは、以下のいずれかの条件を満たした場合に実行されます。 ・GetFoldersAsync() のように引数なしで呼び出した場合 ・引数として CommonFolderQuery.DefaultQuery を指定した場合 ・IndexerOption.DoNotUseIndexer のオプションを明示的に指定した場合 「[マイ コンピューター]からドライブにアクセスできないようにする」のポリシーは、グループポリシー エディタ内の以下のパスに存在します。 [ユーザーの構成] – [管理用テンプレート] – [Windows コンポーネント] – [エクスプローラー] 原因 この現象は、Windows ランタイム API の一部である StorageFolder クラスの不具合によって発生します。 回避策 有効な回避策はございません。 「[マイ コンピューター] からドライブにアクセスできないようにする」のポリシーの代わりに、「指定したドライブを [マイ コンピューター]…


Windows 8.1 上で動作する Windows ストアアプリに対して UI Automationが動作しない

  こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、ストアアプリに対して UI Automationが動作しない現象についてご案内します。   現象 UI Automation を利用することにより、他のアプリケーションを操作する、または、他のアプリケーションから情報を取得する等のアクセスを行うことが可能です。 ところが、Windows 8.1上で動作しているストアアプリに対して UI Automation によるアクセスを実行すると、正しく動作しない現象が確認されています。 例えば、HTML コンテンツを WebView で表示しているストアプリがあるとします。UI Automation からこの HTML コンテンツにアクセスすると、正しいプロパティ値が取得できない場合があります。ところが、同じ HTML コンテンツを Internet Explorer で表示している場合は、UI Automation からこの HTML コンテンツにアクセスして、正しいプロパティ値を取得することができます。 同様の現象は、お客様が作成されたアプリケーションだけでなく inspect.exe や acccheckui.exe といった弊社ツールでも確認されています。 UI Automation については下記Blog などをご参照ください。 UI Automation のススメ https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2011/05/26/ui-automation/ 原因 この現象は、Windows 8.1 の不具合により発生します。 なお、Windows 8…