The mounted file system does not support extended attributes

The Microsoft .Net Framework 3.5 SP1 /2.0 SP2 Setup may fail without any error message or the setup may crash almost at the end. You can find the below error messages in the log file:

 

MSI (s) (00:C8) [10:09:41:999]: Executing op: CustomActionSchedule(Action=CA_InstallAssemblyDef.3643236F_FC70_11D3_A536_0090278A1BB8,ActionType=1025,Source=BinaryData,Target=InstallAssembly,CustomActionData=c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\IEExecRemote.dll;8192)

MSI (s) (00:DC) [10:09:42:092]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSI20D.tmp, Entrypoint: InstallAssembly

04/18/13 10:09:42 DDSet_Status: LANGID: 1033

04/18/13 10:09:42 DDSet_Entry: InstallAssembly started

04/18/13 10:09:42 DDSet_Status: CustomActionData: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\IEExecRemote.dll;8192

04/18/13 10:09:42 DDSet_Status: Loading mscoree.dll

04/18/13 10:09:42 DDSet_Status: Loading fusion.dll using LoadLibraryShim()

04/18/13 10:09:42 DDSet_Error: Failed to install assembly c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\IEExecRemote.dll. IAssemblyCache->InstallAssembly() returned -2147024614.

04/18/13 10:09:42 DDSet_Error: Failed to install assembly 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\IEExecRemote.dll' because of system error: The mounted file system does not support extended attributes.

 

The error code -2147024614 means ERROR_EAS_NOT_SUPPORTED # the mounted file system does not support extended attributes

 

I captured a procmon trace https://technet.microsoft.com/en-in/sysinternals/bb896645.aspx and after reviewing the procmon, I found that the failure occurs when performing FSCTL_SET_REPARSE_POINT on the GAC directory for IEExecRemote.dll:

 

11:03:52.4649173AM MsiExec.exe 3888 FileSystemControl 328 C:\WINDOWS\assembly\GAC_MSIL\IEExecRemote\2.0.0.0__b03f5f7f11d50a3a EAS NOT SUPPORTED Control: FSCTL_SET_REPARSE_POINT

 

The reparse points are used in hard links (and possibly directory junctions). A hard link is a directory entry that associates a name with a file on a file system. The Hard link is used between win32 assemblies in WinSxS and this particular assembly has a win32 manifest, so that could be why this is happening. None of the previously successfully installed assemblies have win32 manifests, and I found none of them setting reparse points.

 

So we tried to create a hard link on this drive and see if that is supported. In order to do the same I used the tool called junction.exe https://technet.microsoft.com/en-us/sysinternals/bb896768.aspx

 

C:\>junction.exe c:\test1 c:\test

Error setting junction for c:\test1:

The mounted file system does not support extended attributes.

 

I also took a procmon trace while running the junction.exe and found the similar behavior like .Net Framework install 

 

06:28:28.2800295 PM junction.exe 3512 FileSystemControl C:\test1 EAS NOT SUPPORTED Control: FSCTL_SET_REPARSE_POINT domain\user1 00000000:0001e183 0

 

It had the below stack:

 

0 fltmgr.sys fltmgr.sys + 0x24ca 0xf734c4ca C:\WINDOWS\System32\Drivers\fltmgr.sys

1 fltmgr.sys fltmgr.sys + 0x3f2a 0xf734df2a C:\WINDOWS\System32\Drivers\fltmgr.sys

2 fltmgr.sys fltmgr.sys + 0x48d2 0xf734e8d2 C:\WINDOWS\System32\Drivers\fltmgr.sys

3 fltmgr.sys fltmgr.sys + 0x12693 0xf735c693 C:\WINDOWS\System32\Drivers\fltmgr.sys

4 ntoskrnl.exe ntoskrnl.exe + 0x401d3 0x808401d3 C:\WINDOWS\system32\ntoskrnl.exe

5 ntoskrnl.exe ntoskrnl.exe + 0x12c3f9 0x8092c3f9 C:\WINDOWS\system32\ntoskrnl.exe

6 ntoskrnl.exe ntoskrnl.exe + 0x12c32e 0x8092c32e C:\WINDOWS\system32\ntoskrnl.exe

7 ntoskrnl.exe ntoskrnl.exe + 0x1397ef 0x809397ef C:\WINDOWS\system32\ntoskrnl.exe

8 ntoskrnl.exe ntoskrnl.exe + 0x33c3f 0x80833c3f C:\WINDOWS\system32\ntoskrnl.exe

9 junction.exe junction.exe + 0x294a 0x40294a C:\1A1\Net Updates\19APR\Junction\junction.exe

 

The error message comes from STATUS_EAS_NOT_SUPPORTED => ERROR_EAS_NOT_SUPPORTED. This is the error code returned by NTFS when you try to set a reparse point on a file that already has EAs on it. (Reparse points and EAs cannot coexist on the same file.) Hence, I generated the list of file system filters present on the system. So we ran the below command:

C:\>fltmc filters

Filter Name Num Instances Frame

------------------------------ --------------------- ----------

EzWatch                                    1 1

BHDrvx86 1 1

eeCtrl 1 1

SRTSP 3 1

DfsDriver <Legacy>

SymEFA 3 0

 

 

C:\>fltmc instances

Filter Volume Name Altitude Instance Name

-------------- --------------------- ------------- -----------------------

EzWatch C: 370030 EzWatch Instance

BHDrvx86 C: 365100 BHDrvx86

eeCtrl C: 329010 eeCtrl

SRTSP C: 329000 SRTSP

SRTSP \Device\LanmanRedirector 329000 SRTSP

SRTSP \Device\RdpDr 329000 SRTSP

SymEFA C: 260600 SymEFA

SymEFA \Device\LanmanRedirector 260600 SymEFA

SymEFA \Device\RdpDr 260600 SymEFA

 

In the above list DfsDriver is the only filter driver which is owned by Microsoft and the remaining all are Third party filter drivers. We tried removing the filters one at a time and after each removal and tried the junction scenario until we find when it stops working. In order to remove the filter driver, I opened an Admin command prompt and ran the below commands:

 

For EzWatch

sc config EzWatch start= disabled

 

For BHDrvx86

sc config bhdrvx86 start= disabled

 

For eeCtrl

sc config eectrl start= disabled

 

For SRTSP:

sc config srtsp start= disabled

 

For SymEFA

sc config symefa start= disabled

 

In this way I found that EzWatch was the file system filter driver which caused setting the junction though the file system was NTFS. In the same way it caused the .Net Framework Setup failure. Disabling EzWatch filter driver resolved the issue.

 

To re-enable them the process is similar, just use start= system

For example: sc config bhdrvx86 start= system

 

Also we can make the above changes in the registry in this path for each driver by changing their start value from 0 (boot) or 1 (system) to 4 (disabled): HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services