LoadImage 関数が負の高さをもつビットマップの読み込みに失敗する

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Win32 API である LoadImage 関数の不具合についてご案内します。 現象 Windows 10 において、アプリケーションから負の高さをもつビットマップ ファイルを指定して LoadImage 関数を実行すると、ビットマップがロードできずに失敗し、NULL が返ります。Windows 7 では成功し、ビットマップがロードできていました。 原因 この現象は、LoadImage 関数の不具合によって発生します。関数内において、ビットマップの高さとして負数があり得ることを考慮していないことが原因です。 回避策 現在、この問題を修正する予定がありません。 GDI+ など、ほかの API を利用することを検討してください。 参考情報 LoadImageW function https://docs.microsoft.com/ja-jp/windows/desktop/api/winuser/nf-winuser-loadimagew Using Images, Bitmaps, and Metafiles https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms533815.aspx Bitmap class https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms534420.aspx,


WPF アプリケーションにおいて文字入力可能なコントロールを無効化した場合の挙動について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、WPF アプリケーションにおいて、文字入力可能なコントロールの IsEnabled プロパティを False に設定した場合の挙動についてご案内します。   現象 WPFのコントロールは、IsEnabled プロパティを False に設定してすることによりそのコントロールを無効化することが可能です。 この場合、マウスやタブ キー等で選択やフォーカスを設定することができなくなり、TextBoxBase クラスから派生した TextBox クラスや ComboBox クラス等の文字入力可能なコントロールでは文字を入力できない状態になります。 しかしながら、テキストを設定してあるコントロールに対して右クリック等によりコンテキスト メニューを表示するとメニューアイテムとして変換候補が含まれますが、この表示された変換候補から選択すると、コントロール内の文字列が選択した文字列に変更されます。 具体的には、以下のスクリーンショットのとおり、TextBox に表示された「TextBox」という文字列が、コンテキスト メニューにある「TextBox」を選択するとその文字列に変更されています。 ↓   原因 WPF では、コントロールの IsEnabled プロパティの状態によらず候補が表示されます。   回避策 コンテキスト メニューの表示は WPF 内で実装しており、IsReadOnly プロパティが True の場合はコンテキスト メニューを表示しません。 このため、IsEnabled プロパティを False に設定するのに加え、IsReadOnly プロパティを True に設定することにより、意図していないコントロール内の文字列編集を防ぐことが可能です。   参考情報…


System.Security.Cryptography.Xml.SignedXml.LoadXml メソッドの更新について

こんにちは、Platform SDK (Windows SDK) サポートチームです。2018 年 5 月 8 日に公開された CVE-2018-0765 のセキュリティ更新に伴い、 System.Security.Cryptography.Xml.SignedXml.LoadXml  メソッドに行われた変更についてご案内します。 現象 2018 年 5 月 8 日に公開された CVE-2018-0765 のセキュリティの更新をインストールいただいた環境にて System.Security.Cryptography.Xml.SignedXml.LoadXml メソッドを利用して署名用の XML ファイルをロードした場合、Reference 要素 および Transform 要素が一定数以上定義されていると、「CryptographicException: 間違った形式の SignedInfo/Reference 要素です。」 例外が発生します。具体的な上限は以下の通りになります。 ・Reference 要素内の Transform 要素が 10 以上。 ・SignedInfo 要素内の Reference 要素が 100 以上。 原因 この上限はセキュリティ強化のために行われており、例外の発生は想定された動作になります。これまで Reference 要素 および Transform 要素は無制限に定義可能でしたが、セキュリティ攻撃に利用される危険性があると判断し、攻撃を防ぐために上限を設定しました。この情報は下記資料に公開しています。 CVE-2018-0765…


FlowDirection プロパティを RightToLeft に設定した場合の問題について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、XAML を使用するアプリケーションにおいて、FlowDirection プロパティを RightToLeft に設定した場合の問題についてご案内します。   現象 Store アプリ、UWP アプリ、WPF アプリ で FlowDirection プロパティを RightToLeft に設定して文字列を表示すると、Windows Forms アプリ と異なる表示結果になる場合があります。 例えば、以下のような XAML を Store アプリ、UWP アプリ、WPF アプリ で実装することを想定します。 <TextBlock Text=”String(100)” FlowDirection=”RightToLeft” /> <TextBlock Text=”String(100)…” FlowDirection=”RightToLeft”/> <TextBlock Text=”Windows 10Professional” FlowDirection=”RightToLeft” Language=”en-US”/> <TextBlock Text=”Windows 10Professional” FlowDirection=”RightToLeft” Language=”ar-SA”/> 以下は、実行時のスクリーンショットですが、上から、Store アプリ、UWP アプリ、WPF アプリ、Windows Forms アプリのウインドウになります。…


Windows 10 version 1803 (April 2018 Update) で、日本語版 Microsoft IME を無効化すると、タッチ キーボードが起動しない

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 10 version 1803 (April 2018 Update) において日本語版 Microsoft IME を無効化した場合、タッチ キーボード (Tabtip.exe) が起動しない現象についてご案内します。 現象 IME のコンテキスト (HIMC 値) の状態には、ON/OFF/Disable の三つの状態があります。 ON : 日本語入力が可能なコンテキスト OFF : 日本語入力が不可能なコンテキスト (英数のみ入力可能なコンテキスト) Disable : IME を介した日本語、英数いずれの入力も不可能なコンテキスト (直接入力は可) これまでの Windows 10 では、TextBox 等の編集可能なコントロールをタッチした場合、IME のコンテキストが上記三つの状態のいずれであっても、タッチ キーボードが起動しました。 しかしながら、Windows 10 version 1803 (April 2018 Update) では、編集可能なコントロールの IME のコンテキストが「Disable」の状態だった場合は、タッチ…


リモート メールスロットへの書き込み時 ERROR_BAD_NETPATH (53) となる問題について (2019/9/21 追記あり)

こんにちは、Platform  SDK (Windows SDK) サポート チームです。 今回は、Windows 10 version 1803 (April 2018 Update) において、リモートでオープンされた メールスロット に、CreateFile 関数を実施すると ERROR_BAD_NETPATH (53) エラーとなる現象についてご案内します。 現象 サーバー側で CreateMailslot関数によりオープン処理が実施済みであり、クライアント側で本 メールスロットへ書き込むためにCreateFile関数を呼び出します。 クライアント側が \\<ComputerName>\mailslot\sample のようにリモートである場合、サーバー側のオープン状態であるにかかわらず、ERROR_BAD_NETPATH となり、書き込むことができません。 なお、この現象はクライアント側が Windows 10 version 1803 (April 2018 Update) のみで発生し、他の Windows バージョンでは発生しません。 また、クライアントが \\.\mailslot\sample のように自ホストを指定した場合にも発生しません。 原因 原因がわかりましたら、本ブログを更新予定です。 // 2018/09/21 追記 こちら、WIndows 10 version 1803 (April 2018 Update) の不具合に起因して発生したものとなります。…


ツールバー移動時の軌跡が残像となる問題について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、Windows 10 version 1709 (Fall Creators Update) においてツールバーを移動した時の軌跡が残像となって残る現象についてご案内します。   現象 MFC の CToolBar クラスを使用してツールバーを実装し、アプリケーション実行時にドラッグ アンド ドロップ操作でツールバーを移動すると、下記スクリーンショットのように、ツールバーを移動した軌跡が残像となって残り、正しく描画されません。 この現象は Windows 10 version 1709 (Fall Creators Update) で発生し、Windows 10 version 1607 (Anniversary Update) や Windows 10 version 1703 (Creators Update) では発生しません。 なお CToolBar クラスは、Visual Studio 2017 でいうと MFC の新規プロジェクトの作成ウィザードにおいてプロジェクト形式として “MFC 標準” を選択した場合に、アプリケーションのツールバーとして使用されるようになります。  …


Thread.Abort メソッドを利用してスレッドを終了させる際の注意点について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、System.Threading 名前空間の Thread.Abort メソッド (以降、Abort メソッド) を利用してスレッドを終了させた場合に発生する可能性がある現象についてご案内いたします。   現象 Abort メソッドはスレッドを強制終了させるメソッドです。 Thread.Abort メソッド < https://msdn.microsoft.com/ja-jp/library/system.threading.thread.abort.aspx > Abort メソッドを利用してスレッドを強制終了させると、以下の様な現象が発生する可能性があります。 ・ オブジェクト ハンドルやメモリ等のリーク ・ プロセスの強制終了 ・ プロセスのデッドロック   原因 スレッドが開始すると、そのスレッド内部で必要な様々なリソースの確保や初期化処理が行われます。 そしてスレッドが終了するタイミングでは、そのスレッド内部で確保・初期化された様々なリソースの解放処理が行われます。 ところが Abort メソッドを利用してスレッドを強制終了した場合は、これらのリソースの解放処理が必ず行われる保証がありません。 そして、これらのリソースの解放処理が行われなかった結果として、前述したような現象に発展する可能性があります。   回避策 可能な限り、Abort メソッドを利用してスレッドを強制終了しないようにします。 たとえば、以下のように自分自身を自発的に終了させる仕組みをスレッド (下記例ではスレッド B) 内に実装しておくことで、その仕組みを利用した外部スレッド (下記例ではスレッド A) が、安全にそのスレッド (下記例ではスレッド B) を終了させることができるようになります。 – スレッド A…


CFileDialog クラスにて表示したダイアログ ボックスの応答がなくなる問題について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、MFC の CFileDialog クラスに関して確認されている問題についてご案内します。   現象 CFileDialog のコンストラクタにて bVistaStyle を FALSE に指定して表示させたファイル選択ダイアログ ボックスで SharePoint 上にあるフォルダを開くと、ダイアログボックスの応答が停止します。   CFileDialog クラス https://msdn.microsoft.com/ja-jp/library/dk77e5e7.aspx   原因 この現象は、ファイル選択ダイアログの中で SharePoint サーバー上の Web 画面の表示をサポートするコンポーネントの不具合によって発生します。   回避策 以下のレジストリ設定を適用することにより、ファイル選択ダイアログの中の Web 画面の表示が無効となり、本問題を回避することができます。   – 現在のユーザーに対して適用する場合 キー : HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer 名前 : NoHTMLViewForWebDAV 種類 : REG_DWORD (32ビット) 値 : 1   – コンピューターにログオンするすべてのユーザーに適用する場合…


WPF の CheckBox コントロールのチェック マーク (オプション マーク) について

こんにちは、Platform SDK (Windows SDK) サポートチームです。 今回は、WPF の CheckBox コントロールのチェック マーク (オプション マーク) についてご案内します。   現象 WPF の CheckBox コントロールにおいて FlowDirection プロパティを RightToLeft に設定すると、CheckBox コントロール全体が「左向き」に描画されるだけでなく、CheckBox コントロールのチェック マーク部分も「左ハネ」で描画されるようになります。 ※ WPF の CheckBox コントロールの例   なお、アラビア語版 Windows の Explorer の CheckBox コントロールや、同様に RightToLeft 設定された Windows フォームの CheckBox コントロールについては、チェック マーク部分は「右ハネ」のまま描画されます。 ※ Windows フォームの CheckBox コントロールの例   原因 この動作は、WPF の…