ロジクールのマウスを購入しました。
しかし、デバイスドライバがインストールできません。
カスタマーサポートの方もお手上げ・・・。
それだけでなく、
Googleの日本語入力ソフト、
WindowsでLinuxの機能を使うCygwinなどなど・・・
が正常にインストールできません。
原因はWindows Vista Service Pack 1を導入していないからです。
しかし、更新プログラムの自動インストールは必ず失敗します。
マイクロソフトの公式サイトから手動でダウンロードすればいいと聞いたが、これも失敗・・・。
インストールが失敗した時に表示されるエラー画面が以下です。
------------------------------------------------------------
インストールは成功しませんでした
Service Pack のインストール中に内部エラーが発生しました
0x800B0100
------------------------------------------------------------
その解決方法が以下です。
「Windows Vista および Windows Server 2008 Service Pack
のインストールの問題のトラブルシューティング方法」
http://support.microsoft.com/kb/947366
・・・以下、補足で続きます。
問題が解決せず、残念ですが、現時点の内容をまとめたいと思います。
今回、表示されているエラーコードは以下のようなものでした。
コード | エラー | 説明(日本語) | 説明(英語) |
---|---|---|---|
0x8007000D | ERROR_INVALID_DATA | データが無効です。 | The data is invalid. |
0x800B0100 | TRUST_E_NOSIGNATURE | サブジェクトに署名がありませんでした。 | No signature was present in the subject. |
0x800B0001 | TRUST_E_PROVIDER_UNKNOWN | 信頼プロバイダが不明です。 | The specified trust provider is not known on this system. |
■ Windows Update/Microsoft Updateのトラブルを解消する(SoftwareDistributionフォルダを修復する方法) - @IT
http://www.atmarkit.co.jp/fwin2k/win2ktips/944rcvsoftdist/rcvsoftdist.html
にて、改善しているのではと思われます。
■ エラー コード 0x800B0100 が、Windows Update または Microsoft Update を使用して更新プログラムをインストールするときに表示される
http://support.microsoft.com/kb/956702/ja
Windows 2000、Windows XP、または Windows Server 2003 であれば、
ファイル名 | 説明 |
---|---|
Softpub.dll | Softpub Forwarder DLL |
Wintrust.dll | Microsoft Trust Verification APIs |
Initpki.dll | Microsoft Trust Installation and Setup |
Mssip32.dll | MSSIP32 Forwarder DLL |
を再登録することで改善するようですが、
Windows Vista 以降では、「システム更新準備ツール」を使うことが推奨されているようです。
■ Windows Vista、Windows Server 2008、Windows 7、および Windows Server 2008 R2 のシステム更新準備ツールについて
http://support.microsoft.com/kb/947821/ja
■ ダウンロード詳細 Windows Vista 用のシステム更新準備ツール (KB947821) [2012 年 2 月]
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=b4d90b06-c27d-4483-bc1f-04d43fa7b293
Windows6.0-KB947821-v19-x86.msu
このツールはバージョンが頻繁に上がっており、v19 が最新版のようです。
また、ツールの実行時に問題があった場合は、以下のログファイルに内容が記録されるようです。
の場合に発生するようです。
■ Windows Update エラー 800B0001
http://windows.microsoft.com/ja-JP/windows7/Windows-Update-error-800B0001
が原因であれば、
■ プログラムや更新プログラムをインストールできない
http://support.microsoft.com/kb/822798/ja
方法 2: Catroot2 フォルダーの名前を変更する
にて改善するかと思います。
が原因であれば、
■ プログラムや更新プログラムをインストールできない
http://support.microsoft.com/kb/822798/ja
方法 3: Cryptographic Services に関連付けられている DLL ファイルを再登録する
が対応方法となるかと思いますが、Windows Vista では KB の内容に誤り(再登録するコンポーネントのファイル名に誤り)がある為、完全には復旧しないようです。
ファイル名 | 存在の有無 |
---|---|
softpub.dll | 存在する |
wintrust.dll | 存在する |
Vista 以降では存在しない | |
dssenh.dll | 存在する |
rsaenh.dll | 存在する |
Vista 以降では存在しない | |
Vista 以降では存在しない | |
Vista 以降では存在しない | |
mssip32.dll | 存在する |
cryptdlg.dll | 存在する |
このような差異が発生しているのは、Windows Vista 以降で暗号化 API に仕様変更が入っている為と思われます。
(暗号化 API が「Crypto API」→「CNG(Crypto Next Generation)」に変更されている為)
■ Windows Vista の CNG API を使用して暗号化を行う
http://msdn.microsoft.com/ja-jp/magazine/cc163389.aspx
■ Using the Cryptography Configuration Features of CNG (Windows)
http://msdn.microsoft.com/ja-jp/library/bb204780.aspx
// File : EnumCngProvider.cs // Compile : // C:\> SET PATH=C:\Windows\Microsoft.NET\Framework\v2.0.50727;%PATH% [Enter] // C:\> csc EnumCngProvider.cs [Enter] // Usage : EnumCngProvider.exe [Enter] using System; using System.Collections.Generic; using System.Data; using System.Runtime.InteropServices; class EnumCngProvider { [DllImport("Bcrypt.dll", SetLastError = true)] public static extern uint BCryptEnumRegisteredProviders( ref int pcbBuffer, ref IntPtr ppBuffer ); [DllImport("Bcrypt.dll", SetLastError = true)] public static extern uint BCryptFreeBuffer( IntPtr pvBuffer ); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class CRYPT_PROVIDERS { public int cProviders; public IntPtr rgpszProviders; } public static List<string> GetCngProviders() { int cbBuffer = 0; IntPtr pBuffer = IntPtr.Zero; List<string> providers; EnumCngProvider.CRYPT_PROVIDERS cngProviders = new EnumCngProvider.CRYPT_PROVIDERS(); uint status = EnumCngProvider.BCryptEnumRegisteredProviders(ref cbBuffer, ref pBuffer); if ( status == 0 ) { if (pBuffer != IntPtr.Zero) { providers = new List<string>(); Marshal.PtrToStructure(pBuffer, cngProviders); IntPtr[] rgpszProviders = new IntPtr[cngProviders.cProviders]; Marshal.Copy(cngProviders.rgpszProviders, rgpszProviders, 0, cngProviders.cProviders); for (int i = 0; i < cngProviders.cProviders; i++) { providers.Add(Marshal.PtrToStringUni(rgpszProviders[i])); } EnumCngProvider.BCryptFreeBuffer(pBuffer); return providers; } } return null; } static void Main() { List<string> stringList = GetCngProviders(); foreach (string s in stringList) { Console.WriteLine(s); } } }
暗号化プロバイダ名 | ファイル名 |
---|---|
Microsoft Primitive Provider | bcrypt.dll |
Microsoft Smart Card Key Storage Provider | scksp.dll |
Microsoft Software Key Storage Provider | ncrypt.dll |
Microsoft SSL Protocol Provider | ncrypt.dll |
上記の暗号化プロバイダが一覧に表示されない場合は、暗号化プロバイダが正しく登録されていない可能性があります。
一覧に表示するが機能しないというケースであれば、DLL の依存関係に問題がある可能性があります。
その場合は、以下のツールにて、足りない DLL が無いか調査することが可能です。
■ Dependency Walker (depends.exe) Home Page
http://www.dependencywalker.com/
セキュリティプログラムをすべてアンインストールして
コンピューターを再起動してから Service Pack を再インストールしてみてはどうでしょう?
やりました。でも、ダメでした…。
問題が解決せず、残念ですが、現時点の内容をまとめたいと思います。
今回、表示されているエラーコードは以下のようなものでした。
コード | エラー | 説明(日本語) | 説明(英語) |
---|---|---|---|
0x8007000D | ERROR_INVALID_DATA | データが無効です。 | The data is invalid. |
0x800B0100 | TRUST_E_NOSIGNATURE | サブジェクトに署名がありませんでした。 | No signature was present in the subject. |
0x800B0001 | TRUST_E_PROVIDER_UNKNOWN | 信頼プロバイダが不明です。 | The specified trust provider is not known on this system. |
■ Windows Update/Microsoft Updateのトラブルを解消する(SoftwareDistributionフォルダを修復する方法) - @IT
http://www.atmarkit.co.jp/fwin2k/win2ktips/944rcvsoftdist/rcvsoftdist.html
にて、改善しているのではと思われます。
■ エラー コード 0x800B0100 が、Windows Update または Microsoft Update を使用して更新プログラムをインストールするときに表示される
http://support.microsoft.com/kb/956702/ja
Windows 2000、Windows XP、または Windows Server 2003 であれば、
ファイル名 | 説明 |
---|---|
Softpub.dll | Softpub Forwarder DLL |
Wintrust.dll | Microsoft Trust Verification APIs |
Initpki.dll | Microsoft Trust Installation and Setup |
Mssip32.dll | MSSIP32 Forwarder DLL |
を再登録することで改善するようですが、
Windows Vista 以降では、「システム更新準備ツール」を使うことが推奨されているようです。
■ Windows Vista、Windows Server 2008、Windows 7、および Windows Server 2008 R2 のシステム更新準備ツールについて
http://support.microsoft.com/kb/947821/ja
■ ダウンロード詳細 Windows Vista 用のシステム更新準備ツール (KB947821) [2012 年 2 月]
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=b4d90b06-c27d-4483-bc1f-04d43fa7b293
Windows6.0-KB947821-v19-x86.msu
このツールはバージョンが頻繁に上がっており、v19 が最新版のようです。
また、ツールの実行時に問題があった場合は、以下のログファイルに内容が記録されるようです。
の場合に発生するようです。
■ Windows Update エラー 800B0001
http://windows.microsoft.com/ja-JP/windows7/Windows-Update-error-800B0001
が原因であれば、
■ プログラムや更新プログラムをインストールできない
http://support.microsoft.com/kb/822798/ja
方法 2: Catroot2 フォルダーの名前を変更する
にて改善するかと思います。
が原因であれば、
■ プログラムや更新プログラムをインストールできない
http://support.microsoft.com/kb/822798/ja
方法 3: Cryptographic Services に関連付けられている DLL ファイルを再登録する
が対応方法となるかと思いますが、Windows Vista では KB の内容に誤り(再登録するコンポーネントのファイル名に誤り)がある為、完全には復旧しないようです。
ファイル名 | 存在の有無 |
---|---|
softpub.dll | 存在する |
wintrust.dll | 存在する |
Vista 以降では存在しない | |
dssenh.dll | 存在する |
rsaenh.dll | 存在する |
Vista 以降では存在しない | |
Vista 以降では存在しない | |
Vista 以降では存在しない | |
mssip32.dll | 存在する |
cryptdlg.dll | 存在する |
このような差異が発生しているのは、Windows Vista 以降で暗号化 API に仕様変更が入っている為と思われます。
(暗号化 API が「Crypto API」→「CNG(Crypto Next Generation)」に変更されている為)
■ Windows Vista の CNG API を使用して暗号化を行う
http://msdn.microsoft.com/ja-jp/magazine/cc163389.aspx
■ Using the Cryptography Configuration Features of CNG (Windows)
http://msdn.microsoft.com/ja-jp/library/bb204780.aspx
// File : EnumCngProvider.cs // Compile : // C:\> SET PATH=C:\Windows\Microsoft.NET\Framework\v2.0.50727;%PATH% [Enter] // C:\> csc EnumCngProvider.cs [Enter] // Usage : EnumCngProvider.exe [Enter] using System; using System.Collections.Generic; using System.Data; using System.Runtime.InteropServices; class EnumCngProvider { [DllImport("Bcrypt.dll", SetLastError = true)] public static extern uint BCryptEnumRegisteredProviders( ref int pcbBuffer, ref IntPtr ppBuffer ); [DllImport("Bcrypt.dll", SetLastError = true)] public static extern uint BCryptFreeBuffer( IntPtr pvBuffer ); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class CRYPT_PROVIDERS { public int cProviders; public IntPtr rgpszProviders; } public static List<string> GetCngProviders() { int cbBuffer = 0; IntPtr pBuffer = IntPtr.Zero; List<string> providers; EnumCngProvider.CRYPT_PROVIDERS cngProviders = new EnumCngProvider.CRYPT_PROVIDERS(); uint status = EnumCngProvider.BCryptEnumRegisteredProviders(ref cbBuffer, ref pBuffer); if ( status == 0 ) { if (pBuffer != IntPtr.Zero) { providers = new List<string>(); Marshal.PtrToStructure(pBuffer, cngProviders); IntPtr[] rgpszProviders = new IntPtr[cngProviders.cProviders]; Marshal.Copy(cngProviders.rgpszProviders, rgpszProviders, 0, cngProviders.cProviders); for (int i = 0; i < cngProviders.cProviders; i++) { providers.Add(Marshal.PtrToStringUni(rgpszProviders[i])); } EnumCngProvider.BCryptFreeBuffer(pBuffer); return providers; } } return null; } static void Main() { List<string> stringList = GetCngProviders(); foreach (string s in stringList) { Console.WriteLine(s); } } }
暗号化プロバイダ名 | ファイル名 |
---|---|
Microsoft Primitive Provider | bcrypt.dll |
Microsoft Smart Card Key Storage Provider | scksp.dll |
Microsoft Software Key Storage Provider | ncrypt.dll |
Microsoft SSL Protocol Provider | ncrypt.dll |
上記の暗号化プロバイダが一覧に表示されない場合は、暗号化プロバイダが正しく登録されていない可能性があります。
一覧に表示するが機能しないというケースであれば、DLL の依存関係に問題がある可能性があります。
その場合は、以下のツールにて、足りない DLL が無いか調査することが可能です。
■ Dependency Walker (depends.exe) Home Page
http://www.dependencywalker.com/
???
かなり勘違いされているようですが、私は、Google とも Microsoft とも関係ないですよ。
ましてや本なんて出してませんし(苦笑)
とりあえず、連絡は Twitter にてお願いします。ID は Hatena ID と同じです。
そう言えば、いつも07:40~50頃投稿されてますね。
こちらはその時間帯でも大丈夫です。
???
2012/05/22 06:28:11かなり勘違いされているようですが、私は、Google とも Microsoft とも関係ないですよ。
ましてや本なんて出してませんし(苦笑)
とりあえず、連絡は Twitter にてお願いします。ID は Hatena ID と同じです。
そう言えば、いつも07:40~50頃投稿されてますね。
2012/05/22 06:38:42こちらはその時間帯でも大丈夫です。