uLib  User mode C/C++ extended API library for Win32 programmers.
ReparsePnt.cpp File Reference
#include <uLib/_Internal.h>
#include <uLib/UtilFunc.h>
#include <uLib/StrFunc.h>
#include <uLib/Debug.h>
#include <WinIoCtl.h>

Go to the source code of this file.

Classes

struct  PREPARSE_DATA_BUFFER
 
union  REPARSE_DATA_BUFFER.__unnamed__
 
struct  REPARSE_DATA_BUFFER.__unnamed__.SymbolicLinkReparseBuffer
 
struct  REPARSE_DATA_BUFFER.__unnamed__.MountPointReparseBuffer
 
struct  REPARSE_DATA_BUFFER.__unnamed__.GenericReparseBuffer
 

Macros

#define CTL_CODE(DeviceType, Function, Method, Access)
 
#define FILE_DEVICE_FILE_SYSTEM   0x00000009
 
#define METHOD_BUFFERED   0
 
#define FILE_ANY_ACCESS   0
 
#define FSCTL_GET_REPARSE_POINT   CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS ) /* REPARSE_DATA_BUFFER */
 
#define FSCTL_SET_REPARSE_POINT   CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) /* REPARSE_DATA_BUFFER */
 
#define FSCTL_DELETE_REPARSE_POINT   CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) /* REPARSE_DATA_BUFFER */
 
#define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET( REPARSE_DATA_BUFFER, GenericReparseBuffer )
 
#define SYMLINK_FLAG_RELATIVE   0x00000001
 
#define IO_REPARSE_TAG_IIS_CACHE   0xA0000010
 
#define IO_REPARSE_TAG_VALID_VALUES   0xF000FFFF
 
#define IsReparseTagValid(_tag)
 
#define MAX_REPARSE_BUFFER   MAXIMUM_REPARSE_DATA_BUFFER_SIZE
 
#define SET_WRPD_PRIVILEGE   1
 
#define FA_REPARSE_DIR   (FILE_ATTRIBUTE_DIRECTORY| FILE_ATTRIBUTE_REPARSE_POINT)
 

Enumerations

enum  eCnsFlags
 

Functions

HANDLE _OpenReparsePoint (CSTR LinkName, ACCESS_MASK Access, DWORD Share)
 
bool _CanReparse (CSTR PathName)
 
ULARGE_INTEGER _GetReparseData (HANDLE hObj, PVOID Buffer, DWORD cbBuffer)
 
bool _SetReparseData (HANDLE hObj, PREPARSE_DATA_BUFFER pRpd, OPTIN DWORD cbRpd=0)
 
ULARGE_INTEGER GetAttributeAndReparseTag (CSTR PathName)
 
bool IsSymLink (CSTR PathName)
 
bool IsSymLinkDir (CSTR PathName)
 
bool IsJunctionDir (CSTR PathName)
 
bool IsVolumeMountPoint (CSTR PathName, TSTR VolNameBuf, UINT ccBuf)
 
bool RemoveReparseData (CSTR PathName)
 
bool SetCustomReparseData (CSTR PathName, ULONG Tag, REFGUID Guid, PVOID pData, WORD cbData)
 
bool CreateJunctionDir (CSTR LinkName, CSTR TargetName, CSTR PrintName)
 
bool DeleteJunctionDir (CSTR DirName)
 
bool CreateSymLink (CSTR LinkName, CSTR TargetName, CSTR PrintName)
 
INT GetReparseTarget (CSTR LinkName, TSTR SubstPath, UINT cchSubst, TSTR PrintName, UINT cchPrint, PULARGE_INTEGER AttrTag)
 

Class Documentation

◆ REPARSE_DATA_BUFFER

struct REPARSE_DATA_BUFFER

Definition at line 78 of file ReparsePnt.cpp.

Class Members
ULONG ReparseTag
USHORT ReparseDataLength
USHORT Reserved
union REPARSE_DATA_BUFFER __unnamed__

◆ REPARSE_DATA_BUFFER.__unnamed__

union REPARSE_DATA_BUFFER.__unnamed__

Definition at line 82 of file ReparsePnt.cpp.

Class Members
__unnamed__ SymbolicLinkReparseBuffer
__unnamed__ MountPointReparseBuffer
__unnamed__ GenericReparseBuffer

◆ REPARSE_DATA_BUFFER.__unnamed__.SymbolicLinkReparseBuffer

struct REPARSE_DATA_BUFFER.__unnamed__.SymbolicLinkReparseBuffer

Definition at line 83 of file ReparsePnt.cpp.

Class Members
USHORT SubstituteNameOffset
USHORT SubstituteNameLength
USHORT PrintNameOffset
USHORT PrintNameLength
ULONG Flags
WCHAR PathBuffer[1]

◆ REPARSE_DATA_BUFFER.__unnamed__.MountPointReparseBuffer

struct REPARSE_DATA_BUFFER.__unnamed__.MountPointReparseBuffer

Definition at line 91 of file ReparsePnt.cpp.

Class Members
USHORT SubstituteNameOffset
USHORT SubstituteNameLength
USHORT PrintNameOffset
USHORT PrintNameLength
WCHAR PathBuffer[1]

◆ REPARSE_DATA_BUFFER.__unnamed__.GenericReparseBuffer

struct REPARSE_DATA_BUFFER.__unnamed__.GenericReparseBuffer

Definition at line 98 of file ReparsePnt.cpp.

Class Members
UCHAR DataBuffer[1]

Macro Definition Documentation

◆ CTL_CODE

#define CTL_CODE (   DeviceType,
  Function,
  Method,
  Access 
)
Value:
( \
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)

Definition at line 50 of file ReparsePnt.cpp.

◆ FILE_DEVICE_FILE_SYSTEM

#define FILE_DEVICE_FILE_SYSTEM   0x00000009

Definition at line 55 of file ReparsePnt.cpp.

◆ METHOD_BUFFERED

#define METHOD_BUFFERED   0

Definition at line 58 of file ReparsePnt.cpp.

◆ FILE_ANY_ACCESS

#define FILE_ANY_ACCESS   0

Definition at line 61 of file ReparsePnt.cpp.

◆ FSCTL_GET_REPARSE_POINT

#define FSCTL_GET_REPARSE_POINT   CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS ) /* REPARSE_DATA_BUFFER */

Definition at line 66 of file ReparsePnt.cpp.

◆ FSCTL_SET_REPARSE_POINT

#define FSCTL_SET_REPARSE_POINT   CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) /* REPARSE_DATA_BUFFER */

Definition at line 69 of file ReparsePnt.cpp.

◆ FSCTL_DELETE_REPARSE_POINT

#define FSCTL_DELETE_REPARSE_POINT   CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS ) /* REPARSE_DATA_BUFFER */

Definition at line 72 of file ReparsePnt.cpp.

◆ REPARSE_DATA_BUFFER_HEADER_SIZE

#define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET( REPARSE_DATA_BUFFER, GenericReparseBuffer )

Definition at line 104 of file ReparsePnt.cpp.

◆ SYMLINK_FLAG_RELATIVE

#define SYMLINK_FLAG_RELATIVE   0x00000001

Definition at line 108 of file ReparsePnt.cpp.

◆ IO_REPARSE_TAG_IIS_CACHE

#define IO_REPARSE_TAG_IIS_CACHE   0xA0000010

Definition at line 111 of file ReparsePnt.cpp.

◆ IO_REPARSE_TAG_VALID_VALUES

#define IO_REPARSE_TAG_VALID_VALUES   0xF000FFFF

Definition at line 113 of file ReparsePnt.cpp.

◆ IsReparseTagValid

#define IsReparseTagValid (   _tag)
Value:
( \
&& ((_tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
)
#define IO_REPARSE_TAG_VALID_VALUES
Definition: ReparsePnt.cpp:113

Definition at line 115 of file ReparsePnt.cpp.

◆ MAX_REPARSE_BUFFER

#define MAX_REPARSE_BUFFER   MAXIMUM_REPARSE_DATA_BUFFER_SIZE

Definition at line 122 of file ReparsePnt.cpp.

◆ SET_WRPD_PRIVILEGE

#define SET_WRPD_PRIVILEGE   1

Definition at line 129 of file ReparsePnt.cpp.

◆ FA_REPARSE_DIR

#define FA_REPARSE_DIR   (FILE_ATTRIBUTE_DIRECTORY| FILE_ATTRIBUTE_REPARSE_POINT)

Definition at line 600 of file ReparsePnt.cpp.

Enumeration Type Documentation

◆ eCnsFlags

enum eCnsFlags

Definition at line 369 of file ReparsePnt.cpp.

Function Documentation

◆ _OpenReparsePoint()

HANDLE _OpenReparsePoint ( CSTR  LinkName,
ACCESS_MASK  Access,
DWORD  Share 
)

Definition at line 154 of file ReparsePnt.cpp.

◆ _CanReparse()

bool _CanReparse ( CSTR  PathName)

Definition at line 211 of file ReparsePnt.cpp.

◆ _GetReparseData()

ULARGE_INTEGER _GetReparseData ( HANDLE  hObj,
PVOID  Buffer,
DWORD  cbBuffer 
)

Definition at line 263 of file ReparsePnt.cpp.

◆ _SetReparseData()

bool _SetReparseData ( HANDLE  hObj,
PREPARSE_DATA_BUFFER  pRpd,
OPTIN DWORD  cbRpd = 0 
)

Definition at line 309 of file ReparsePnt.cpp.

◆ SetCustomReparseData()

bool SetCustomReparseData ( CSTR  PathName,
ULONG  Tag,
REFGUID  Guid,
PVOID  pData,
WORD  cbData 
)

Definition at line 718 of file ReparsePnt.cpp.

◆ GetReparseTarget()

INT GetReparseTarget ( CSTR  LinkName,
TSTR  SubstPath,
UINT  cchSubst,
TSTR  PrintName,
UINT  cchPrint,
PULARGE_INTEGER  AttrTag 
)

Definition at line 889 of file ReparsePnt.cpp.