private static extern SafeFileHandle CreateFile(
     string lpFileName,
     FileAccessDword dwDesiredAccess,
     FileShareDword dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDispositionDword dwCreationDisposition,
     FileAttributesDword dwFlagsAndAttributes,
     IntPtr hTemplateFile);
        private static SafeFileHandle OpenDirHandle(string dirPath, FileAccessDword accessMode)
        {
            var reparsePointHandle = CreateFile(dirPath, accessMode,
                                                FileShareDword.Read | FileShareDword.Write | FileShareDword.Delete,
                                                IntPtr.Zero, CreationDispositionDword.OpenExisting,
                                                FileAttributesDword.BackupSemantics | FileAttributesDword.OpenReparsePoint, IntPtr.Zero);

            var err = Marshal.GetLastWin32Error();

            if (err == WIN32_ERROR_FILE_NOT_FOUND)
            {
                throw new DirectoryNotFoundException($"Cannot find the directory '{dirPath}'");
            }

            if (err != 0)
            {
                var winex = GetLastWin32Error($"Cannot open directory at path '{dirPath}'");
                throw winex.InnerException is IOException ioex ? ioex : winex;
            }

            return(reparsePointHandle);
        }