Functions like GetFileAttributes
and FindFirstFile
, when asked to provide information about a symbolic link, returns information about the link itself and not the link destination. If you use the FindFirstFile
function, you can tell that you have a symbolic link because the file attributes will have the FILE_ATTRIBUTES_REPARSE_POINT
flag set, and the dwReserved0
member will contain the special value IO_REPARSE_TAG_SYMLINK
.
Okay, great, so now I know I have a symbolic link, but what if I want information about the link target? For example, I want to know the size of the link target, its last-modified time, and its name.
To do this, you open the symbolic link. The I/O manager dereferences the symbolic link and gives you a handle to the link destination. You can then call functions like GetFileSize
, GetFileInformationByHandleEx
, or GetFinalPathNameByHandle
to obtain information about the symbolic link target.
Exercise: If the field is called dwReserved0
, shouldn’t it be off limits? Why isn’t the field called dwReparsePointType
?
0 comments