42

I want to make Windows 7 case-sensitive when it reads/writes anything on the hard drive (the C drive, or any other NTFS drive).

I found a video via google that says to change the registry key

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DontPrettyPath

to a value of 1 (source).

I also found a Windows support item that says something about modifying the registry key

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive

that leads me to assume putting a value of 0 will make Windows case-sensitive with NTFS filesystems (source).

I have a feeling the second solution is the answer, but I'm not sure and I don't want to try it without being sure.

Does anyone know for sure what is the correct way to make Windows 7 case-sensitive when it reads/writes to the C drive (and any other NTFS drive)?

Oliver Salzburg
  • 89,072
  • 65
  • 269
  • 311
trusktr
  • 1,249

6 Answers6

32

You can set the HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive registry value to 0 as other authors suggested. Create a file named add.reg with the following content and run it.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel]
"obcaseinsensitive"=dword:00000000

Then use Cygwin to work with case-sensitive filenames.

In order to do so, you need to mount NTFS filesystems with posix=1 option in your /etc/fstab, as this article suggests. Here's a snippet from my fstab:

none                    /cygdrive       cygdrive        binary,posix=1,user             0 0
C:                      /cygdrive/c     ntfs            binary,posix=1,user,auto        0 0
C:/Users                /home           ntfs            binary,posix=1,user,auto        0 0

Once the above is done, you'll be able to deal with case-sensitive filenames using bash, mc, git etc.

William
  • 1,438
Bass
  • 693
21

All these settings that you can find on the web are for NFS not for NTFS (note the difference)!

NFS (Network File System) is a network protocol.

Thus changing the registry key HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive WILL NOT change anything you want.

NTFS is case-sensitive but Windows API is NOT, it only remembers the filename case. This mean that despite your file is displayed as AbC.TXT it is still accessible by abc.txt and aBc.TxT. This is a limitation of Windows, not NTFS.

The other one HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DontPrettyPath basically turns off the normalization of legacy 8.3 filenames used by DOS (which are all caps). When it is turned on (default) ABC.TXT will be displayed as Abc.txt, but still be accessible by all other variations.

To be more accurate:

Actually it depends of the software that accesses the FS.

If it uses WIN32 API (which 99.9% of the software does) it will be case-insensitive whatever you do. All built-in software in Windows (like Explorer, command prompt, Internet Explorer and etc.) and all consumer software out there uses WIN32 and is always case-insensitive.

NFS Service, Java and some others are POSIX and they will obey the 'obcaseinsensitive' registry setting. However turning off the option might actually get you bigger problems, because this software can create files that are not accesible from Windows itself and other Win32 software.

venimus
  • 2,488
16

In order to actually create 2 files with the same name but different case in the same directory, you need to install Unix Services 3.5 but this only works on 32 bit Windows. Then you need to run "C Shell" to create the files. You can't create the files through explorer. Once created, explorer doesn't play nice with the files. If you go to rename the second one, the cursor jumps to the first one. Also, most applications can only open one of the files, as they expect a case-insensitive file system. If you are on 64 bit install Cygwin and change it to case sensitive.

I was trying to emulate a Linux case-sensitive file-system for debugging purposes during development. It seems the better approach is to use VMWare with an instance of Ubuntu for development.

William
  • 1,438
4

I think this is what you're looking for:

http://www.chilkatsoft.com/p/p_454.asp

This page recommends setting HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive to 0 to make it case-sensitive. I think you found this already though, and this looks like the standard way to do it (even the Microsoft KB you found suggests it).

It looks like you have to change kernel settings. Beware of updates though.

EDIT: Watch out though, some programs might depend on case insensitivity.

EDIT: You could probably use a UDF partition. This filesystem is case-sensitive and I think it works on both Windows and Linux.

See this and this.

beatgammit
  • 1,465
4

What Microsoft has to say about NTFS and changing case sensitivity.

Looks like you do not have to change the kernel to allow case sensitive lookups on the network.

http://technet.microsoft.com/en-us/library/cc783185(WS.10).aspx

.

Configuring case sensitivity for file and folder names

Applies To: Windows Server 2003 R2

To configure case sensitivity for file and folder names using the Windows interface Open Microsoft Services for Network File System: click Start, point to Programs, point to Administrative Tools, and then click Microsoft Services for Network File System.

If necessary, connect to the computer you want to manage.

Right-click Server for NFS, and then click Properties.

Click the Filename Handling tab.

Do one of the following:

To enable case-sensitive file and directory name lookups, select the Enable case sensitive lookups check box.

To disable case-sensitive file and directory name lookups, clear the Enable case sensitive lookups check box.

Click Apply.

Important These changes will not take effect until Server for NFS is restarted. For information about how to stop and start Server for NFS, see Starting and stopping Server for NFS. You also need to disable Windows kernel case-insensitivity in order for Server for NFS to support case-sensitive file names. You can disable Windows kernel case-insensitivity by clearing the following registry key to 0: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel DWORD “obcaseinsensitive”

To configure case sensitivity for file and folder names using the command line Open the command prompt.

To enable case sensitivity, type the following:

nfsadmin server [ ComputerName ] config casesensitivelookups=yes

To disable case sensitivity and optionally specify the case of file names returned by Server for NFS, at a command prompt, type the following:

nfsadmin server [ ComputerName ] config casesensitivelookups=no [ntfscase={upper | lower | preserve}]

Argument > Computer Name = The name of the computer you want to configure.

Important These changes will not take effect until Server for NFS is restarted. For information about how to stop and start Server for NFS, see Starting and stopping Server for NFS.

Note The ntfscase option sets the case sensitivity for the NTFS file system. The default case sensitivity is preserve (preserve case). To view the complete syntax for this command, at a command prompt, type: nfsadmin server /?

.

Moab
  • 58,769
3

Microsoft states ;

In NTFS, names preserve case, but are not case sensitive.
NTFS makes no distinction of filenames based on case.

Allowing case-sensitivity under Windows would allow malware to create files that the user can't access or delete, so it is not allowed for a good reason.

In any case, I am quite sure that if you managed to make NTFS case-sensitive, Windows will crash and re-installation will be the only solution.

harrymc
  • 498,455