33{
37
38
40 {
42 }
43
46 ReparseTag = ReparseBuffer->ReparseTag;
47
48
50 {
52 }
53
54
56 {
58 }
59
60
63 {
65 }
66
67
69 {
70
72 {
73
75 {
76
77 if (!ReparseBuffer->MountPointReparseBuffer.SubstituteNameOffset)
78 {
79
80 if (ReparseBuffer->MountPointReparseBuffer.PrintNameOffset == ReparseBuffer->MountPointReparseBuffer.SubstituteNameLength +
sizeof(
UNICODE_NULL))
81 {
82
84 {
86 }
87 }
88 }
89 }
90 }
91 else
92 {
93#define FIELDS_SIZE (FIELD_OFFSET(REPARSE_DATA_BUFFER, SymbolicLinkReparseBuffer.PathBuffer) - FIELD_OFFSET(REPARSE_DATA_BUFFER, SymbolicLinkReparseBuffer.SubstituteNameOffset))
94
95
97 {
99 }
100
101
103 {
104
105 if (ReparseBuffer->SymbolicLinkReparseBuffer.SubstituteNameLength && ReparseBuffer->SymbolicLinkReparseBuffer.PrintNameLength)
106 {
107
108 if (
IsEven(ReparseBuffer->SymbolicLinkReparseBuffer.SubstituteNameLength) &&
IsEven(ReparseBuffer->SymbolicLinkReparseBuffer.PrintNameLength) &&
109 IsEven(ReparseBuffer->SymbolicLinkReparseBuffer.SubstituteNameOffset) &&
IsEven(ReparseBuffer->SymbolicLinkReparseBuffer.PrintNameOffset))
110 {
113 {
115 }
116 }
117 }
118 }
119#undef FIELDS_SIZE
120 }
121
123 }
124
126}
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
FORCEINLINE BOOLEAN IsNullGuid(IN PGUID Guid)
#define REPARSE_DATA_BUFFER_HEADER_SIZE
#define STATUS_IO_REPARSE_TAG_INVALID
#define STATUS_IO_REPARSE_DATA_INVALID
USHORT SubstituteNameOffset
#define FIELD_OFFSET(t, f)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
#define IO_REPARSE_TAG_RESERVED_ONE
struct _REPARSE_GUID_DATA_BUFFER * PREPARSE_GUID_DATA_BUFFER
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE
#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE
#define IO_REPARSE_TAG_SYMLINK
#define IO_REPARSE_TAG_MOUNT_POINT
#define IO_REPARSE_TAG_RESERVED_ZERO
#define IsReparseTagMicrosoft(_tag)