2023-08-24 19:34:12 +01:00
|
|
|
///
|
|
|
|
/// Some additional native user-mode API functions we use
|
|
|
|
///
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef struct _UNICODE_STRING {
|
|
|
|
USHORT Length;
|
|
|
|
USHORT MaximumLength;
|
|
|
|
PWSTR Buffer;
|
|
|
|
} UNICODE_STRING;
|
|
|
|
typedef UNICODE_STRING *PUNICODE_STRING;
|
|
|
|
typedef const UNICODE_STRING *PCUNICODE_STRING;
|
|
|
|
#define UNICODE_NULL ((WCHAR)0)
|
|
|
|
|
|
|
|
typedef LONG NTSTATUS;
|
|
|
|
typedef NTSTATUS *PNTSTATUS;
|
|
|
|
|
|
|
|
typedef struct _OBJECT_ATTRIBUTES {
|
|
|
|
ULONG Length;
|
|
|
|
HANDLE RootDirectory;
|
|
|
|
PUNICODE_STRING ObjectName;
|
|
|
|
ULONG Attributes;
|
|
|
|
PVOID SecurityDescriptor;
|
|
|
|
PVOID SecurityQualityOfService;
|
|
|
|
} OBJECT_ATTRIBUTES;
|
|
|
|
typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;
|
|
|
|
|
|
|
|
typedef struct _IO_STATUS_BLOCK {
|
|
|
|
union {
|
|
|
|
NTSTATUS Status;
|
|
|
|
PVOID Pointer;
|
|
|
|
};
|
|
|
|
|
|
|
|
ULONG_PTR Information;
|
|
|
|
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
|
|
|
|
|
|
|
|
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
|
|
|
|
|
|
|
|
#define OBJ_CASE_INSENSITIVE 0x00000040L
|
|
|
|
|
|
|
|
#define InitializeObjectAttributes( p, n, a, r, s ) { \
|
|
|
|
(p)->Length = sizeof(OBJECT_ATTRIBUTES); \
|
|
|
|
(p)->RootDirectory = r; \
|
|
|
|
(p)->Attributes = a; \
|
|
|
|
(p)->ObjectName = n; \
|
|
|
|
(p)->SecurityDescriptor = s; \
|
|
|
|
(p)->SecurityQualityOfService = NULL; \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
|
|
|
|
#define FILE_NON_DIRECTORY_FILE 0x00000040
|
|
|
|
|
|
|
|
#define SYMLINK_FLAG_RELATIVE 1
|
|
|
|
|
|
|
|
typedef struct _REPARSE_DATA_BUFFER {
|
|
|
|
ULONG ReparseTag;
|
|
|
|
USHORT ReparseDataLength;
|
|
|
|
USHORT Reserved;
|
|
|
|
union {
|
|
|
|
struct {
|
|
|
|
USHORT SubstituteNameOffset;
|
|
|
|
USHORT SubstituteNameLength;
|
|
|
|
USHORT PrintNameOffset;
|
|
|
|
USHORT PrintNameLength;
|
|
|
|
ULONG Flags;
|
|
|
|
WCHAR PathBuffer[1];
|
|
|
|
} SymbolicLinkReparseBuffer;
|
|
|
|
struct {
|
|
|
|
USHORT SubstituteNameOffset;
|
|
|
|
USHORT SubstituteNameLength;
|
|
|
|
USHORT PrintNameOffset;
|
|
|
|
USHORT PrintNameLength;
|
|
|
|
WCHAR PathBuffer[1];
|
|
|
|
} MountPointReparseBuffer;
|
|
|
|
struct {
|
|
|
|
UCHAR DataBuffer[1];
|
|
|
|
} GenericReparseBuffer;
|
|
|
|
} DUMMYUNIONNAME;
|
|
|
|
} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
|
|
|
|
|
|
|
|
#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
|
|
|
|
|
|
|
|
|
|
|
|
#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Maximum allowed size of the reparse data.
|
|
|
|
//
|
|
|
|
|
|
|
|
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
|
|
|
|
|
|
|
|
//
|
|
|
|
// Predefined reparse tags.
|
|
|
|
// These tags need to avoid conflicting with IO_REMOUNT defined in ntos\inc\io.h
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_RESERVED_ZERO (0)
|
|
|
|
#define IO_REPARSE_TAG_RESERVED_ONE (1)
|
|
|
|
|
|
|
|
//
|
|
|
|
// The value of the following constant needs to satisfy the following conditions:
|
|
|
|
// (1) Be at least as large as the largest of the reserved tags.
|
|
|
|
// (2) Be strictly smaller than all the tags in use.
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
|
|
|
|
|
|
|
|
//
|
|
|
|
// The reparse tags are a ULONG. The 32 bits are laid out as follows:
|
|
|
|
//
|
|
|
|
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
|
|
|
|
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
|
|
|
|
// +-+-+-+-+-----------------------+-------------------------------+
|
|
|
|
// |M|R|N|R| Reserved bits | Reparse Tag Value |
|
|
|
|
// +-+-+-+-+-----------------------+-------------------------------+
|
|
|
|
//
|
|
|
|
// M is the Microsoft bit. When set to 1, it denotes a tag owned by Microsoft.
|
|
|
|
// All ISVs must use a tag with a 0 in this position.
|
|
|
|
// Note: If a Microsoft tag is used by non-Microsoft software, the
|
|
|
|
// behavior is not defined.
|
|
|
|
//
|
|
|
|
// R is reserved. Must be zero for non-Microsoft tags.
|
|
|
|
//
|
|
|
|
// N is name surrogate. When set to 1, the file represents another named
|
|
|
|
// entity in the system.
|
|
|
|
//
|
|
|
|
// The M and N bits are OR-able.
|
|
|
|
// The following macros check for the M and N bit values:
|
|
|
|
//
|
|
|
|
|
|
|
|
//
|
|
|
|
// Macro to determine whether a reparse point tag corresponds to a tag
|
|
|
|
// owned by Microsoft.
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IsReparseTagMicrosoft(_tag) ( \
|
|
|
|
((_tag) & 0x80000000) \
|
|
|
|
)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Macro to determine whether a reparse point tag is a name surrogate
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IsReparseTagNameSurrogate(_tag) ( \
|
|
|
|
((_tag) & 0x20000000) \
|
|
|
|
)
|
|
|
|
|
|
|
|
// end_winnt
|
|
|
|
|
|
|
|
//
|
|
|
|
// The following constant represents the bits that are valid to use in
|
|
|
|
// reparse tags.
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Macro to determine whether a reparse tag is a valid tag.
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IsReparseTagValid(_tag) ( \
|
|
|
|
!((_tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
|
|
|
|
((_tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
|
|
|
|
)
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// Microsoft tags for reparse points.
|
|
|
|
//
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_HSM (0xC0000004L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
|
|
|
|
#define IO_REPARSE_TAG_HSM2 (0x80000006L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_SIS (0x80000007L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_WIM (0x80000008L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_CSV (0x80000009L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_DFS (0x8000000AL) // winnt
|
|
|
|
#define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
|
|
|
|
#define IO_REPARSE_TAG_SYMLINK (0xA000000CL) // winnt
|
|
|
|
#define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
|
|
|
|
#define IO_REPARSE_TAG_DFSR (0x80000012L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_DEDUP (0x80000013L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_APPXSTRM (0xC0000014L)
|
|
|
|
#define IO_REPARSE_TAG_NFS (0x80000014L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_FILE_PLACEHOLDER (0x80000015L) // winnt
|
|
|
|
#define IO_REPARSE_TAG_DFM (0x80000016L)
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// Non-Microsoft tags for reparse points
|
|
|
|
//
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to CONGRUENT, May 2000. Used by IFSTEST
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_IFSTEST_CONGRUENT (0x00000009L)
|
|
|
|
|
|
|
|
//
|
2023-10-21 13:10:45 +01:00
|
|
|
// Tag allocated to Moonwalk Universal for HSM
|
2023-08-24 19:34:12 +01:00
|
|
|
// GUID: 257ABE42-5A28-4C8C-AC46-8FEA5619F18F
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_MOONWALK_HSM (0x0000000AL)
|
|
|
|
|
|
|
|
//
|
2023-10-21 13:10:45 +01:00
|
|
|
// Tag allocated to Tsinghua University for Research purposes
|
2023-08-24 19:34:12 +01:00
|
|
|
// No released products should use this tag
|
|
|
|
// GUID: b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_TSINGHUA_UNIVERSITY_RESEARCH (0x0000000BL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to ARKIVIO for HSM
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_ARKIVIO (0x0000000CL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to SOLUTIONSOFT for name surrogate
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_SOLUTIONSOFT (0x2000000DL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to COMMVAULT for HSM
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_COMMVAULT (0x0000000EL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Overtone Software for HSM
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_OVERTONE (0x0000000FL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Symantec (formerly to KVS Inc) for HSM
|
|
|
|
// GUID: A49F7BF6-77CA-493c-A0AA-18DBB28D1098
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_SYMANTEC_HSM2 (0x00000010L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Enigma Data for HSM
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_ENIGMA_HSM (0x00000011L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Symantec for HSM
|
|
|
|
// GUID: B99F4235-CF1C-48dd-9E6C-459FA289F8C7
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_SYMANTEC_HSM (0x00000012L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to INTERCOPE for HSM
|
|
|
|
// GUID: F204BE2D-AEEB-4728-A31C-C7F4E9BEA758}
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_INTERCOPE_HSM (0x00000013L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to KOM Networks for HSM
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_KOM_NETWORKS_HSM (0x00000014L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to MEMORY_TECH for HSM
|
|
|
|
// GUID: E51BA456-046C-43ea-AEC7-DC1A87E1FD49
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_MEMORY_TECH_HSM (0x00000015L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to BridgeHead Software for HSM
|
|
|
|
// GUID: EBAFF6E3-F21D-4496-8342-58144B3D2BD0
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_BRIDGEHEAD_HSM (0x00000016L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to OSR for samples reparse point filter
|
|
|
|
// GUID: 3740c860-b19b-11d9-9669-0800200c9a66
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_OSR_SAMPLE (0x20000017L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Global 360 for HSM
|
|
|
|
// GUID: C4B51F66-7F00-4c55-9441-8A1B159F209B
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_GLOBAL360_HSM (0x00000018L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Altiris for HSM
|
|
|
|
// GUID: fc1047eb-fb2d-45f2-a2f4-a71c1032fa2dB
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_ALTIRIS_HSM (0x00000019L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Hermes for HSM
|
|
|
|
// GUID: 437E0FD5-FCB4-42fe-877A-C785DA662AC2
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_HERMES_HSM (0x0000001AL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to PointSoft for HSM
|
|
|
|
// GUID: 547BC7FD-9604-4deb-AE07-B6514DF5FBC6
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_POINTSOFT_HSM (0x0000001BL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to GRAU Data Storage for HSM
|
|
|
|
// GUID: 6662D310-5653-4D10-8C31-F8E166D1A1BD
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_GRAU_DATASTORAGE_HSM (0x0000001CL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to CommVault for HSM
|
|
|
|
// GUID: cc38adf3-c583-4efa-b183-72c1671941de
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_COMMVAULT_HSM (0x0000001DL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Data Storage Group for single instance storage
|
|
|
|
// GUID: C1182673-0562-447a-8E40-4F0549FDF817
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_DATASTOR_SIS (0x0000001EL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Enterprise Data Solutions, Inc. for HSM
|
|
|
|
// GUID: EB63DF9D-8874-41cd-999A-A197542CDAFC
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_EDSI_HSM (0x0000001FL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to HP StorageWorks Reference Information Manager for Files (HSM)
|
|
|
|
// GUID: 3B0F6B23-0C2E-4281-9C19-C6AEEBC88CD8
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_HP_HSM (0x00000020L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to SER Beteiligung Solutions Deutschland GmbH (HSM)
|
|
|
|
// GUID: 55B673F0-978E-41c5-9ADB-AF99640BE90E
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_SER_HSM (0x00000021L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Double-Take Software (formerly NSI Software, Inc.) for HSM
|
|
|
|
// GUID: f7cb0ce8-453a-4ae1-9c56-db41b55f6ed4
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_DOUBLE_TAKE_HSM (0x00000022L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Beijing Wisdata Systems CO, LTD for HSM
|
|
|
|
// GUID: d546500a-2aeb-45f6-9482-f4b1799c3177
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_WISDATA_HSM (0x00000023L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Mimosa Systems Inc for HSM
|
|
|
|
// GUID: 8ddd4144-1a22-404b-8a5a-fcd91c6ee9f3
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_MIMOSA_HSM (0x00000024L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to H&S Heilig und Schubert Software AG for HSM
|
|
|
|
// GUID: 77CA30C0-E5EC-43df-9E44-A4910378E284
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_HSAG_HSM (0x00000025L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Atempo Inc. (Atempo Digital Archive) for HSM
|
|
|
|
// GUID: 9B64518A-D6A4-495f-8D01-392F38862F0C
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_ADA_HSM (0x00000026L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Autonomy Corporation for HSM
|
|
|
|
// GUID: EB112A57-10FC-4b42-B590-A61897FDC432
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_AUTN_HSM (0x00000027L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Nexsan for HSM
|
|
|
|
// GUID: d35eba9a-e722-445d-865f-dde1120acf16
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_NEXSAN_HSM (0x00000028L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Double-Take for SIS
|
|
|
|
// GUID: BDA506C2-F74D-4495-9A8D-44FD8D5B4F42
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_DOUBLE_TAKE_SIS (0x00000029L)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Sony for HSM
|
|
|
|
// GUID: E95032E4-FD81-4e15-A8E2-A1F078061C4E
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_SONY_HSM (0x0000002AL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Eltan Comm for HSM
|
|
|
|
// GUID: E1596D9F-44D8-43f4-A2D6-E9FE8D3E28FB
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_ELTAN_HSM (0x0000002BL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Utixo LLC for HSM
|
|
|
|
// GUID: 5401F960-2F95-46D0-BBA6-052929FE2C32
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_UTIXO_HSM (0x0000002CL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Quest Software for HSM
|
|
|
|
// GUID: D546500A-2AEB-45F6-9482-F4B1799C3177
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_QUEST_HSM (0x0000002DL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to DataGlobal GmbH for HSM
|
|
|
|
// GUID: 7A09CA83-B7B1-4614-ADFD-0BD5F4F989C9
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_DATAGLOBAL_HSM (0x0000002EL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Qi Tech LLC for HSM
|
|
|
|
// GUID: C8110B39-A4CE-432E-B58A-FBEAD296DF03
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_QI_TECH_HSM (0x2000002FL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to DataFirst Corporation for HSM
|
|
|
|
// GUID: E0E40591-6434-479f-94AC-DECF6DAEFB5C
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_DATAFIRST_HSM (0x00000030L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to C2C Systems for HSM
|
|
|
|
// GUID: 6F2F829C-36AE-4E88-A3B6-E2C24377EA1C
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_C2CSYSTEMS_HSM (0x00000031L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Waterford Technologies for deduplication
|
|
|
|
// GUID: 0AF8B999-B8E8-408b-805F-5448E68F9274
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_WATERFORD (0x00000032L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Riverbed Technology for HSM
|
|
|
|
// GUID: 3336274-255B-4038-9D39-14B0EC3F8256
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_RIVERBED_HSM (0x00000033L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Caringo, Inc. for HSM
|
|
|
|
// GUID: B92426FA-D35F-48DB-A452-8FD557A23353
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_CARINGO_HSM (0x00000034L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to MaxiScale, Inc. for HSM
|
|
|
|
// GUID: 643B4714-BA13-427b-B771-C5BFDE787BB7
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_MAXISCALE_HSM (0x20000035L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Citrix Systems for profile management
|
|
|
|
// GUID: B9150EDE-5845-4818-841B-5BCBB3B848E3
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_CITRIX_PM (0x00000036L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to OpenAFS for DFS
|
|
|
|
// GUID: EF21A155-5C92-4470-AB3B-370403D96369
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_OPENAFS_DFS (0x00000037L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to ZL Technologies Inc for HSM
|
|
|
|
// GUID: A521FE7A-EB10-4148-BAC7-264359827B7E
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_ZLTI_HSM (0x00000038L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to EMC Corporation for HSM
|
|
|
|
// GUID: 119EA2B9-8979-48b9-B4CE-5082AF2D81E5
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_EMC_HSM (0x00000039L)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to VMware for profile management
|
|
|
|
// GUID: 6D020A57-C9BB-4DA4-A43F-49686D8D5E77
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_VMWARE_PM (0x0000003AL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Arco Computer Products for backup
|
|
|
|
// GUID: C933F72B-A64D-44d9-8CD9-F339D12390CC
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_ARCO_BACKUP (0x0000003BL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Carroll-Net for HSM
|
|
|
|
// GUID: 805EB191-564B-415a-A78C-9ED0AF8E02FF
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_CARROLL_HSM (0x0000003CL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to ComTrade for HSM
|
|
|
|
// GUID: D546500A-2AEB-45F6-9482-F4B1799C3177
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_COMTRADE_HSM (0x0000003DL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to EaseVault for HSM
|
|
|
|
// GUID: BBA65D6F-F8A0-48CC-B748-DBD5FFFCCFB1
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_EASEVAULT_HSM (0x0000003EL)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Tag allocated to Hitachi Data Systems for HSM
|
|
|
|
// GUID: DC095FD2-AC3C-46BA-9E58-DD182BE86AF4
|
|
|
|
//
|
|
|
|
|
|
|
|
#define IO_REPARSE_TAG_HDS_HSM (0x0000003FL)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Reparse point index keys.
|
|
|
|
//
|
|
|
|
// The index with all the reparse points that exist in a volume at a
|
|
|
|
// given time contains entries with keys of the form
|
|
|
|
// <reparse tag, file record id>.
|
|
|
|
// The data part of these records is empty.
|
|
|
|
//
|
|
|
|
|
|
|
|
#pragma pack(4)
|
|
|
|
|
|
|
|
typedef struct _REPARSE_INDEX_KEY {
|
|
|
|
|
|
|
|
//
|
|
|
|
// The tag of the reparse point.
|
|
|
|
//
|
|
|
|
|
|
|
|
ULONG FileReparseTag;
|
|
|
|
|
|
|
|
//
|
|
|
|
// The file record Id where the reparse point is set.
|
|
|
|
//
|
|
|
|
|
|
|
|
LARGE_INTEGER FileId;
|
|
|
|
|
|
|
|
} REPARSE_INDEX_KEY, *PREPARSE_INDEX_KEY;
|
|
|
|
|
|
|
|
#pragma pack()
|
|
|
|
|
|
|
|
NTSYSAPI
|
|
|
|
BOOLEAN
|
|
|
|
NTAPI
|
|
|
|
RtlDosPathNameToNtPathName_U(IN PCWSTR DosName,
|
|
|
|
OUT PUNICODE_STRING NtName,
|
|
|
|
OUT PCWSTR *DosFilePath OPTIONAL,
|
|
|
|
OUT PUNICODE_STRING NtFilePath OPTIONAL);
|
|
|
|
|
|
|
|
NTSYSAPI
|
|
|
|
BOOLEAN
|
|
|
|
NTAPI
|
|
|
|
RtlCreateUnicodeString(OUT PUNICODE_STRING DestinationString,
|
|
|
|
IN PCWSTR SourceString);
|
|
|
|
|
|
|
|
NTSYSAPI
|
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString);
|
|
|
|
|
|
|
|
NTSYSAPI
|
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
RtlInitUnicodeString(IN OUT PUNICODE_STRING DestinationString,
|
|
|
|
IN PCWSTR SourceString);
|
|
|
|
|
|
|
|
NTSYSAPI
|
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
|
|
|
NtOpenFile(OUT PHANDLE FileHandle,
|
|
|
|
IN ACCESS_MASK DesiredAccess,
|
|
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
|
|
IN ULONG ShareAccess,
|
|
|
|
IN ULONG OpenOptions);
|
|
|
|
|
|
|
|
NTSYSAPI
|
|
|
|
BOOLEAN
|
|
|
|
NTAPI
|
|
|
|
NtClose(IN HANDLE hObject);
|
|
|
|
|
|
|
|
NTSYSAPI
|
|
|
|
ULONG
|
|
|
|
NTAPI
|
|
|
|
RtlNtStatusToDosError(NTSTATUS Status);
|
|
|
|
|
|
|
|
NTSYSAPI
|
|
|
|
NTSTATUS
|
|
|
|
WINAPI
|
|
|
|
RtlGetVersion(
|
|
|
|
__inout __deref
|
|
|
|
POSVERSIONINFOW lpVersionInformation);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|