月別アーカイブ: 6月 2014

RichTextBox


Windows 8.1 Update 1 x64で発生します。

Windows フォームに rtb(RichTextBox) と次のコードを追加します。


XmlDocument xmldocument = new XmlDocument();
using(FileStream filestream = new FileStream("filename.xml", FileMode.Open, FileAccess.Read, FileShare.None, 4096, false))
{
	using (StreamReader stream = new StreamReader(filestream, Encoding.UTF8))
	{
		XmlReader reader = XmlReader.Create(stream);
		xmldocument.Load(reader);
	}
}
rtb.Text = xmldocument.DocumentElement.OuterXml;

実行すると、RichTextBox のスクロールが異常に遅くなる、または「型 ‘System.AccessViolationException’ のハンドルされていない例外が System.Windows.Forms.dll で発生しました

追加情報:保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。

Just-In-Time (JIT) デバッグを呼び出すための詳細については、
ダイアログ ボックスではなく、このメッセージの最後を参照してください。

************** 例外テキスト **************
System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
場所 System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
場所 System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.RichTextBox.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** 読み込まれたアセンブリ **************
mscorlib
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.8000 (FX35W81RTMGDR.050727-8000)
コードベース: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
—————————————-
mscorlib.resources
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.8000 (FX35W81RTMGDR.050727-8000)
コードベース: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
—————————————-
WindowsFormsApplication2
アセンブリ バージョン: 1.0.0.0
Win32 バージョン: 1.0.0.0
コードベース: file:///app.exe
—————————————-
System.Windows.Forms
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
—————————————-
System
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
—————————————-
System.Drawing
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
—————————————-
System.Configuration
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
—————————————-
System.Xml
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
—————————————-
Accessibility
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
—————————————-
System.Windows.Forms.resources
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ja_b77a5c561934e089/System.Windows.Forms.resources.dll
—————————————-

************** JIT デバッグ **************
Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、
またはコンピュータ (machine.config) の構成ファイルの jitDebugging
値を system.windows.forms セクションで設定しなければなりません。
アプリケーションはまた、デバッグを有効にしてコンパイルされなければ
なりません。

例:

JIT デバッグが有効なときは、このダイアログ ボックスで処理するよりも、
ハンドルされていない例外はすべてコンピュータに登録された
JIT デバッガに設定されなければなりません。

」が表示されてデバックが中止されます。filename.xml は 1MB ほどですが、メモリの使用量が 100MB以上になります。また50MB以上のテキストを表示された場合も同様のエラーが発生します。

System.Windows.Forms.dll のバージョンはそれぞれ 4.0.30319.33440, 2.0.50727.7905 です。


HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger の System32 を SysWOW64 に書き換えて “C:\WINDOWS\SysWOW64\vsjitdebugger.exe” PID %d APPDOM %d EXTEXT “%s” EVTHDL %d と変更したところ、Visual Studio のデバッガーで「CLR は、COM コンテキスト 0x1b0e24e8 から COM コンテキスト 0x1b0e2738 へ 60 秒で移行できませんでした。ターゲット コンテキストおよびアパートメントを所有するスレッドが、ポンプしない待機を行っているか、Windows のメッセージを表示しないで非常に長い実行操作を処理しているかのどちらかです。この状態は通常、パフォーマンスを低下させたり、アプリケーションが応答していない状態および増え続けるメモリ使用を導く可能性があります。この問題を回避するには、すべての Single Thread Apartment (STA) のスレッドが、CoWaitForMultipleHandles のようなポンプする待機プリミティブを使用するか、長い実行操作中に定期的にメッセージをポンプしなければなりません。」この警告が発生するようになりました。

KB2977218 (Silverlight 5) を(再)インストールしたところ、このメッセージは表示されなくなりました。


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners のキーを RegistryKey.OpenSubKey() で開くと 4.0.30139 では null が返されます。2.0.50527 では正しく読み取れます。


ダイアログベースのMFCアプリケーションのダイアログに Rich Edit 2.0 Control を配置して Visual Studio IDE でデバッグを行うと、「Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {291} normal block at 0x027C24E8, 32 bytes long.
Data: 01 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(181) : {290} normal block at 0x027C2498, 20 bytes long.
Data: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00
」が発生して終了します。InitInstance() の CWinAppEx::InitInstance(); の後に AfxInitRichEdit(); を追加するとエラーが発生しなくなります。


RichTextBox に UTF-8 でエンコードされた特定の文字列、「𠀀」といったUnicode 追加漢字面の文字を追加するとこの現象が発生します。

広告

sn.exe


sn.exe -k filename.snk で キーペアを作成しようとすると、「厳密な名前のキー ペアを生成できませんでした — アクセスが拒否されました。」が表示される

Visual Studio IDE で C++/CLI をビルドすると、「fatal error LNK1256: ALINK 処理に失敗しました (80070005) : アクセスが拒否されました。」が表示されます。

%ProgramData%\Microsoft\Crypto\RSA\MachineKeys のアクセス権を修正します。Users に 変更権限を与えます。


Everyone に 書き込み権限が与えられていますが、セキュリティ上の問題からWindows のバージョンアップに伴い使われなくなってきています。Everyone から Users へ SID を移行しています。

コンピューター名


システムのプロパティのコンピュータ名 (WORKGROUP) は HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Hostname, NV Hostname に、DNS プライマリ サフィックス は HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Domain, NV Domain にそれぞれ保存されます。

Windows 8.1 Update


スタートメニューもそうですが、Windows 8 には ワイヤレスネットワークの管理 に相当する機能がないので、次期アップデートで追加してほしいです。

コンポーネントストアの修復


以下の方法は Microsoft が推奨する方法ではありませんのでご注意ください。必ずバックアップ、復元ポイントを作成してから行ってください。

Windows 8.1 で コンポーネントストアを正しく修復できない場合に次の手順を試してみてください。

  • regedit.exe を起動して HKEY_LOCAL_MACHINE を選択します。
  • 「ハイブの読み込み」で %SystemRoot%\System32\config\components を読み込みます。キー名を COMPONENTS にします。
  • HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components のサブキーの CF, CTS, DV の値を削除します。
  • f! … の値を 0x00000003 から 0x00000001 に変更します。
  • HKEY_LOCAL_MACHINE\COMPONENTS を選択して、「ハイブのアンロード」を行います。

コマンドプロンプト(管理者)で DISM /Online /Cleanup-Image /ScanHealth を実行します。

DISM /Online /Cleanup-Image /RestoreHealth を実行します。

  • %SystemRoot%\Cbstemp にフォルダーとファイルが作成されます。[20%]
  • %SystemRoot\SoftwareDistribution\Download にフォルダーとファイルが作成されます(KB)。[40%]
  • %SystemRoot%\WinSxS\Temp\InFlight にフォルダーとファイルが作成されます(KB)。[80%]
  • %SystemRoot%\WinSxS\ フォルダーのファイルが置き換わります。

Windows RE のコマンドプロンプトで DISM /Image:C:\ /Cleanup-Image /RestoreHealth /Source:C:\Windows を実行すると回復できる確率が上がります。

コンポーネントストアについて


DISM /Online /Cleanup-Image /RestoreHealth でエラーが発生しなくなりました。

sfc /scannow を実行すると、%SystemRoot%\WinSxS\Temp\PendingRenames フォルダーにファイルが作成されます。そして アクションセンター – メンテナンス – 自動メンテナンス を実行すると、このファイルが削除されていきます。このフォルダーに大量にファイルが存在する場合は、自動メンテナンスを実行してください。

(DateTime), Info CSI 0000000e Beginning Delta compression of LDR / Superseded Components
(DateTime), Info CSI 0000000f Creating NT transaction (seq 2), objectname [6]”(null)”
(DateTime), Info CSI 00000010 Created NT transaction (seq 2) result 0x00000000, handle @0x460
(DateTime), Info CSI 00000011@2014/6/11:06:26:24.631 Beginning NT transaction commit…
(DateTime), Info CSI 00000012@2014/6/11:06:26:45.973 CSI perf trace:

このようなメッセージが Cbs.log ファイルに複数書き込まれた後、PendingRenames のファイルが削除されます。同時に %SystemRoot%\WinSxS のサブフォルダーにファイルが作成されます。


(p) CSI Payload Corrupt wow64_microsoft-windows-a..ence-mitigations-c1_31bf3856ad364e35_6.3.9600.16412_none_077ef34cfa6d3b1e\sysmain.sdb
Repair failed: Missing replacement payload.

SideBySide は、複数バージョンのうちの一つでも破損していると正しく修復できない場合があります。6.3.9600.16402, 6.3.9600.16412, 6.3.9600.16415, 6.3.9600.16477, 6.3.9600.16507, 6.3.9600.16508 のバージョンのファイルが多く破損または存在していない箇所がありました。


デルタ圧縮(Delta Compression)

DISM /Online /Cleanup-Image /Cleanup-Image /StartComponentCleanup でコンポーネントを小さくできます。

HKEY_CLASSES_ROOT\Wow6432Node\CLSID


Windows 8.1 Update 1, x64

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{GUID}\InprocServer32 で mscoree.dll を含むキーの Assembly の値が mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089、RuntimeVersion が v1.1.4322 となっているキーがあります。また HKEY_CLASSES_ROOT\CLSID\{GUID}\InprocServer32 では 2.0.0.0 に設定されています。


HKEY_CLASSES_ROOT\Wow6432Node\TypeLib は win32, win64 と System32, SySWOW64 フォルダーが混在しています。

Native Images


ngen display で ネイティブイメージの状態を確認したところ、NGEN Roots にパスがないファイルが存在します。

  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Web.dll
  • System.Core.dll (パスがない)

ngen update で ngen.log に Failed to load dependency … of assembly … , Version=x.x.x.x, Culture=neutral, PublicKeyToken=… because of the following error : 指定されたファイルが見つかりません。 (HRESULT からの例外: 0x80070002) が書き込まれている原因と考えられます。

Dependency Walker


Windows 8.1 x64 で ファイルが見つかりません。

  • API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL
  • API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL
  • API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL
  • API-MS-WIN-CORE-SHUTDOWN-L1-1-1.DLL
  • EXT-MS-WIN-MF-PAL–L1-1-0.DLL
  • EXT-MS-WIN-NTUSER-UICONTEXT-EXT-L1-1-0.DLL
  • IESHIMS.DLL

au iPhone5


au iPhone5 4G エリア(2.1GHz帯) ですが、意外なところで 4G 表示となります。

Visual Studio のエラー


%SystemRoot%\assembly\GAC_MSIL, %SystemRoot%\Microsoft.NET\assembly\GAC_MSIL フォルダーのファイルが破損したために Visual Studio でエラーが発生する場合があります。GAC_32, GAC_64 フォルダーと、 %SystemRoot%\assembly\NativeImages_v2.0.50727_32, NativeImages_v2.0.50727_64, NativeImages_v4.0.30319_32, NativeImages_v4.0.30319_64 フォルダーのファイルも確認してください。

エクスプローラーで直接 %SystemRoot%\assembly\GAC_MSIL にアクセスするには attrib %SystemRoot%\assembly -R -S を実行する必要があります。元に戻すには attrib %SystemRoot%\assembly +R +S を実行します。