I am having a weird problem that I hope I am going to describe properly. It all happened when I decided to update my Windows 7 Home.
The problem is that, at reboot right after the Windows update, I receive the dreaded "missing or corrupted file". The file we are talking about is cng.sys.
I am a linux user, so the first thing I did was to open the NTFS partition and check if the file was there. It was not. Then I went through the Windows Recovery standard procedure.
- Recovery Console, letting it fix the problem. It couldn't.
- Recovery Console with command prompt, "sfc /scannow /offbootdir= /winbootdir=", but it told me that there was a pending update and it couldn't.
- Renaming of the pending.xml in pending.bak and sfc again. It couldn't fix the files even if it could find problems.
At this point, I discovered the winsxs folder, with all the updates in it. I checked in pending.xml and saw that cng.sys was actually scheduled for deleting and replacing ( and tags). I tried to delete the pending.xml section where it was referencing cng.sys. It didn't work. I then went into the update folder to see if the new cng.sys was there.
Well...it looks like there are many folder with the same name and different creation date containing that file. The last (date-wise) contains cng.sys...but it is 0 Kb !!! This is actually not linked to the fact that the file in my Windows/System32/drivers is not there, but I decided to take a old cng.sys file from the old updates and copy it.
The result was the error 0xc0000020 AKA "The verification of a KnownDll failed....".
I think I have two ways to solve without reinstalling:
- Override the check for the KnownDll(s). Is it even what it does?
- Revert the update?
All of it has to be doable within Recovery Console. I think I have seen somewhere a command line call to some Windows utility for reverting the updates...but I can't find it anymore...
Thank you very much! Kap
UPDATE3: I am still trying to make it work...I have a running linux and this is not really urgent for now...here is the list of files I am missing (they are 0 byte)...do you guys have any clue on how I can get them?
./amd64_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.17940_none_044c26dd7386a58a/cng.sys
./amd64_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.22099_none_04a88ce28cc4eb33/cng.sys
./amd64_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.22099_none_04a88ce28cc4eb33/sspicli.dll
./amd64_microsoft-windows-ncrypt-dll_31bf3856ad364e35_6.1.7601.22099_none_bc3c57b22195c1a0/ncrypt.dll
./amd64_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_9.0.30729.1_none_951ab4128654b0c9/mfcm90.dll
./amd64_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_9.0.30729.1_none_951ab4128654b0c9/mfcm90u.dll
./Backup/amd64_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.17940_none_044c26dd7386a58a_cng.sys_050526ad
./Backup/wow64_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.17940_none_0ea0d12fa7e76785_sspicli.dll_bcec1809
./x86_microsoft-windows-sechost.resources_31bf3856ad364e35_6.1.7600.16385_en-us_dcf8b806907609b7/sechost.dll.mui
./wow64_microsoft-windows-lsa_31bf3856ad364e35_6.1.7601.17940_none_0ea0d12fa7e76785/sspicli.dll
By the way, the linux command I ran is:
find . -name '*' -type f -size 0 > log.txt