When we use SFC to repair missing or corrupted system files, SFC may report that it could not fix some corrupted files. Below is an example,
C:\WINDOWS\system32>sfc /scannow
Beginning system scan. This process will take some time.
Beginning verification phase of system scan.
Verification 100% complete.
Windows Resource Protection found corrupt files but was unable to fix some
of them. Details are included in the CBS.Log windir\Logs\CBS\CBS.log. For
example C:\Windows\Logs\CBS\CBS.log. Note that logging is currently not
supported in offline servicing scenarios.
C:\WINDOWS\system32>
In the above, the output of the SFC command contains,
Windows Resource Protection found corrupt files but was unable to fix
some of them.
which indicates obviously that some files are corrupted and unfortunately SFC cannot fix them for you. The first and an easy attempt to fix the issue, in my opinion, would be to run a DISM command, for instance,
C:\WINDOWS\system32>dism.exe /Online /Cleanup-Image /RestoreHealth
Deployment Image Servicing and Management tool
Version: 6.3.9600.17031
Image Version: 6.3.9600.17031
[==========================100.0%==========================]
The restore operation completed successfully. The component store corruption was
repaired.
The operation completed successfully.
C:\WINDOWS\system32>
Then, run SFC again. With good fortune, SFC may report that it can now fix the corrupted files, as demonstrated below,
C:\WINDOWS\system32>sfc /scannow
Beginning system scan. This process will take some time.
Beginning verification phase of system scan.
Verification 100% complete.
Windows Resource Protection found corrupt files and successfully repaired
them. Details are included in the CBS.Log windir\Logs\CBS\CBS.log. For
example C:\Windows\Logs\CBS\CBS.log. Note that logging is currently not
supported in offline servicing scenarios.
C:\WINDOWS\system32>
However, when we use DISM to recover from a corrupted Windows component store, DISM may also report that it could not fix some corrupted component store.
Even if the above two yield no error, a Windows Update may still fail. For instance, when I attempt to apply the KB3000850 update to my Windows 8.1 system, I encountered an error -- the update appears to be applied correctly; however, when the system reboots, it complains that the update failed to be applied successfully and the system rolled back and undid the change.
There are three logs that we typically examine for clues to identify corrupted component or component store.
- The Component-Based Servicing log, i.e.,
%WinDir%\Logs\CBS\CBS.log
- The Deployment Image Servicing and Management log, i.e.,
%WinDir%\Logs\DISM\DISM.log
- The driver setup log, i.e.,
%WinDir%\Inf\setupapi.dev.log
The procedure is a manual one. In this post, let us examine two example problems and the methods to fix them. The first example is to examine
CBS.log
to obtain clues and fixing strategies. The second example is to examine setupapi.dev.log
for clues to fix the problem.
-
Example 1. After the DISM command fails to the
/RestoreHealth
operation, we examine%WinDir%\Logs\CBS\CBS.log
. By searching "Total Detected Corruption" in the log file, we would find the following logging message,Checking System Update Readiness. (p) CSI Payload Corrupt amd64_microsoft-windows-lddmcore_31bf3856ad364e35_6.3.9600.16438_none_9cc10b53b757a2be\dxgkrnl.sys Repair failed: Missing replacement payload. (p) CSI Payload Corrupt amd64_microsoft-windows-lddmcore_31bf3856ad364e35_6.3.9600.16408_none_9ce17b17b73f4eeb\dxgkrnl.sys Repair failed: Missing replacement payload. Summary: Operation: Detect and Repair Operation result: 0x0 Last Successful Step: Entire operation completes. Total Detected Corruption: 2
The message indicates that two files are corrupted. Both of the files happen to be two versions ofdxgkrnl.sys
. In this example, we demonstrate that we obtain a copy of the file from a Windows update manually. TheCBS.log
cites many Windows updates. It is infeasible to download all of them and see if the update contains a copy of the file. The method I used to locate the appropriate Windows update is to search the Windows version number. In this case, according to the message, the Windows version number is6.3.9600.16438
in the firstCSI Payload Corrupt
message. We search "6.3.9600.16438 dxgkrnl.sys" using Google, as below,
From the search result, it appears that Windows Update KB2887595. We then locate the stand-alone update package of the Windows Update from the Windows Download Center. The search string I used to locate the Windows Update is "KB2887595 x64" since my Windows system is a 64-bit version of Windows 8.1. Having downloaded the stand-alone update package of the Windows Update, we will obtain the copy of the version ofhttps://www.google.com/search?q=6.3.9600.16438+dxgkrnl.sys
dxgkrnl.sys
and replace the corrupted copy with the downloaded one using the steps as follows, assuming that the Window UpdateWindows8.1-KB2887595-v2-x64.msu
is in directoryC:\Temp
,C:\Windows\System32>cd C:\Temp C:\Temp>mkdir KB2887595 C:\Temp>expand -f:* Windows8.1-KB2887595-v2-x64.msu KB2887595 > nul C:\Temp>cd KB2887595 C:\Temp\KB2887595>mkdir KB2887595CAB C:\Temp\KB2887595>expand -f:* Windows8.1-KB2887595-v2-x64.cab KB2887595CAB > nul C:\Temp\KB2887595>dir KB2887595CAB\amd64_microsoft-windows-lddmcore_31bf3856ad364e35_6.3.9600.16438_none_9cc10b53b757a2be Volume in drive C is Windows8_OS Volume Serial Number is 282A-6B47 Directory of C:\Temp\KB2887595\KB2887595CAB\amd64_microsoft-windows-lddmcore_31bf3856ad364e35_6.3.9600.16438_none_9cc10b53b757a2be 04/25/2015 04:39 PM <DIR> . 04/25/2015 04:39 PM <DIR> .. 08/22/2013 08:36 AM 212,992 cdd.dll 10/19/2013 05:13 AM 1,530,200 dxgkrnl.sys 10/03/2013 10:07 AM 382,808 dxgmms1.sys 08/22/2013 02:44 AM 2,465 lddmcore.ptxml 4 File(s) 2,128,465 bytes 2 Dir(s) 127,155,011,584 bytes free C:\Temp\KB2887595>
Clearly, we have successfully obtained a good copy of the corrupted file. Now we simply to copy the file to its component store under%WinDir%\WinSxS
as demonstrated below,C:\Temp>takeown /f "%windir%\winsxs" /a C:\Temp>icacls "%windir%\winsxs" /grant:r *S-1-5-32-544:(OI)(CI)(F) /q C:\Temp\KB2887595>copy KB2887595CAB\amd64_microsoft-windows-lddmcore_31bf3856ad364e35_6.3.9600.16438_none_9cc10b53b757a2be\dxgkrnl.sys %WinDir%\WinSxS\amd64_microsoft-windows-lddmcore_31bf3856ad364e35_6.3.9600.16438_none_9cc10b53b757a2be Overwrite C:\WINDOWS\WinSxS\amd64_microsoft-windows-lddmcore_31bf3856ad364e35_6.3.9600.16438_none_9cc10b53b757a2be\dxgkrnl.sys? (Yes/No/All): a 1 file(s) copied. C:\Temp\KB2887595>
Similarly, we can conduct a web search for the second corrupted file via Google as follows,https://www.google.com/search?q=6.3.9600.16408+dxgkrnl.sys
From the search we learn that we could locate the file in the Windows Update KB2883200. Following the same procedure, we can replace the corrupted file with a good copy.
-
Example 2. The second example is to resolve the update failure problem when I tried to apply the KB300850 update.
Examining
%WinDir%\Inf\setupapi.dev.log
, I found the following messages,sto: {Publish Driver Package: C:\WINDOWS\System32\DriverStore\FileRepository\wiaek002.inf_amd64_5b5a15ef9a58384c\wiaek002.inf} 07:54:15.316 sto: Driver Package = wiaek002.inf_amd64_5b5a15ef9a58384c idb: {Publish Driver Package: C:\WINDOWS\System32\DriverStore\FileRepository\wiaek002.inf_amd64_5b5a15ef9a58384c\wiaek002.inf} 07:54:15.316 idb: Changing active driver package from 'wiaek002.inf_amd64_57f9361b96ceea4b' to 'wiaek002.inf_amd64_5b5a15ef9a58384c'. cpy: Unpublished 'wiaek002.inf'. ! inf: Unable to load INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\wiaek002.inf_amd64_57f9361b96ceea4b\wiaek002.inf'(00000003) ! inf: Error 3: The system cannot find the path specified. !!! inf: Failed to open INF file "C:\WINDOWS\System32\DriverStore\FileRepository\wiaek002.inf_amd64_57f9361b96ceea4b\wiaek002.inf". Error = 0x00000003, Line = 0 !!! sto: Failed to get driver package file list. Error = 0x00000003, Filename = C:\WINDOWS\System32\DriverStore\FileRepository\wiaek002.inf_amd64_57f9361b96ceea4b\wiaek002.inf !!! idb: Failed to update driver package files for 'wiaek002.inf_amd64_57f9361b96ceea4b'. Error = 0x00000003 !!! idb: Failed to publish 'C:\WINDOWS\System32\DriverStore\FileRepository\wiaek002.inf_amd64_5b5a15ef9a58384c\wiaek002.inf'. Error = 0x00000003 idb: {Publish Driver Package: exit(0x00000003)} 07:54:15.316 !!! sto: Failed to publish driver package. Error = 0x00000003 sto: {Publish Driver Package: exit(0x00000003)} 07:54:15.316
Following the observation, we manually "publish" the driver.mkdir C:\WINDOWS\System32\DriverStore\FileRepository\wiaek002.inf_amd64_5b5a15ef9a58384c copy C:\WINDOWS\Inf\wiaek002.inf C:\WINDOWS\System32\DriverStore\FileRepository\wiaek002.inf_amd64_5b5a15ef9a58384c\wiaek002.inf
Then we reapply the KB300850 update again. In my case, it is a success.
error 87
ReplyDeleteThank you, still a helpful article.
ReplyDeleteCheers,
Kevin
Thank you very much. You really safed my day!
ReplyDeleteMike
ReplyDeleteWell thanks for posting such an outstanding idea..
Fix System Service Exception Windows 10 Error