You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.1 KiB
85 lines
2.1 KiB
//+----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) 2000, Microsoft Corporation
|
|
//
|
|
// File: DfsReparse.hxx
|
|
//
|
|
// Contents: the Root Reparse Point support
|
|
//
|
|
//
|
|
// History: May, 2002 Author: SupW
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef __DFS_REPARSE__
|
|
#define __DFS_REPARSE__
|
|
|
|
#define REPARSE_INDEX_PATH_LEN 64
|
|
#define REPARSE_INDEX_PATH L"$Extend\\$Reparse:$R:$INDEX_ALLOCATION"
|
|
|
|
// CchLength of \??\ is 4
|
|
#define WHACKWHACKQQ L"\\??\\"
|
|
#define WHACKWHACKQQ_SIZE (4 * sizeof(WCHAR))
|
|
|
|
|
|
//
|
|
// Files store timestamp in LARGE_INTEGERs, but we work with FILETIMEs
|
|
//
|
|
#define LARGE_INTEGER_TO_FILETIME( dest, src ) {\
|
|
(dest)->dwLowDateTime = (src)->LowPart; \
|
|
(dest)->dwHighDateTime = (src)->HighPart; \
|
|
}
|
|
|
|
//
|
|
// List of volumes that have dfs reparse points in them.
|
|
//
|
|
typedef struct _DFS_REPARSE_VOLUME_INFO {
|
|
UNICODE_STRING VolumeName;
|
|
LIST_ENTRY ListEntry;
|
|
} DFS_REPARSE_VOLUME_INFO, *PDFS_REPARSE_VOLUME_INFO;
|
|
|
|
|
|
VOID
|
|
DfsRemoveOrphanedReparsePoints(
|
|
IN FILETIME ServiceStartupTime);
|
|
|
|
NTSTATUS
|
|
DfsDeleteLinkReparsePoint(
|
|
PUNICODE_STRING pLinkName,
|
|
HANDLE RelativeHandle,
|
|
BOOLEAN bRemoveParentDirs);
|
|
|
|
NTSTATUS
|
|
DfsOpenDirectory(
|
|
PUNICODE_STRING pDirectoryName,
|
|
ULONG ShareMode,
|
|
HANDLE RelativeHandle,
|
|
PHANDLE pOpenedHandle,
|
|
PBOOLEAN pIsNewlyCreated );
|
|
VOID
|
|
DfsCloseDirectory(
|
|
HANDLE DirHandle );
|
|
|
|
//
|
|
// The TRUE flag in the third arg indicates that entire linkname
|
|
// needs to be deleted including any empty parent directories
|
|
// that may not necessarily be dfs reparse directories.
|
|
//
|
|
inline DFSSTATUS
|
|
DfsDeleteLinkReparsePointAndParents(
|
|
PUNICODE_STRING pLink,
|
|
HANDLE DirHandle )
|
|
{
|
|
return DfsDeleteLinkReparsePoint( pLink, DirHandle, TRUE );
|
|
}
|
|
|
|
inline DFSSTATUS
|
|
DfsDeleteLinkReparsePointDir(
|
|
PUNICODE_STRING pLink,
|
|
HANDLE DirHandle )
|
|
{
|
|
return DfsDeleteLinkReparsePoint( pLink, DirHandle, FALSE );
|
|
}
|
|
|
|
#endif
|
|
|