I'm building a small Delphi application where a user can input a file or directory manually by typing it or by selecting it from a dialog . Since it can be input manually, I want to ensure that I save that path as it is on the file system. For example: the user input `c:\program files`, the path is updated to `C:\Program Files` since it's how it's stored in the file system. Here are the my requirements for the function: - The input can be a regular path, an UNC path or a `\\?\` path. - If an invalid (or non-existent) path is provided, the function returns an empty string. - The function supports Unicode paths. - The function supports paths longer than `MAX_PATH` (yes [it's possible](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation)). - The function returns "regular" paths (non `\\?\` paths). I'm coming back to Windows development under Delphi after a decade long pause (I've been working on Web services for a while now) so I'm out of touch with the Windows API and Delphi a bit. Here is my current (working) function. Do you see anything wrong with it? Especially with [GetFinalPathNameByHandle](https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew) (`lpszFilePath`, `cchFilePath` and `dwFlags`). I also got a suggestion to do a double call to avoid using 64K for `FilePath` but I don't see how I could optimize memory usage for that part. function GetCaseSensitivePath(const APath: String): String; const EXT_MAX_PATH = 32767; UNC_PREFIX = '\\'; UNIFIED_PREFIX = '\\?\'; UNIFIED_UNC_PREFIX = UNIFIED_PREFIX + 'UNC\'; var UnifiedPath: PWideChar; LinkHandle: THandle; FilePath: array [0..EXT_MAX_PATH] of WideChar; begin if APath.StartsWith(UNIFIED_PREFIX) then UnifiedPath := PWideChar(APath) else UnifiedPath := PWideChar(IfThen(APath.StartsWith(UNC_PREFIX), UNIFIED_UNC_PREFIX + APath.Substring(Length(UNC_PREFIX)), UNIFIED_PREFIX + APath)); LinkHandle := CreateFile(UnifiedPath, 0, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); try Win32Check(LinkHandle <> INVALID_HANDLE_VALUE); try if GetFinalPathNameByHandle(LinkHandle, FilePath, Length(FilePath), VOLUME_NAME_DOS) > 0 then begin Result := FilePath; if UpperCase(Result.Substring(0, Length(UNIFIED_UNC_PREFIX))) = UNIFIED_UNC_PREFIX then Result := UNC_PREFIX + Result.Substring(Length(UNIFIED_UNC_PREFIX)) else if Result.StartsWith(UNIFIED_PREFIX) then Result := Result.Substring(Length(UNIFIED_PREFIX)); end else RaiseLastOSError; finally CloseHandle(LinkHandle); end; except on EOSError do Result := ''; end; end;