Идея изначально стоит определить родные, виндовые симлинки минимальными средствами самой же винды.
В cygwin свои заморочки. Во первых это сторонний комплект, изначально неродной. Во-вторых, readlink из cygwin не делает различий между
- симлинками, созданными в винде (командой mklink) и
- симлинками, созданными в cygwin (командой ln -s).
Powersell - это хорошо и его можно включить в список решений, надо только накодить.
fsutil сложно. Как вычленить полезную информацию в разных случаях
C:\>fsutil reparsepoint query "C:\Documents and Settings"
Error: Access is denied.
C:\>fsutil reparsepoint query "C:\System Volume Information"
Error: Access is denied.
C:\PROGS\vendors>dir clink*
Volume in drive C is PC COE
Volume Serial Number is DC8B-7390
Directory of C:\PROGS\vendors
2016-01-14 15:53 <DIR> clink
2016-03-08 13:10 <SYMLINKD> clink-d [clink]
2016-03-08 13:10 <JUNCTION> clink-j [C:\PROGS\vendors\clink]
0 File(s) 0 bytes
3 Dir(s) 66 870 931 456 bytes free
C:\PROGS\vendors>fsutil reparsepoint query clink-d
Reparse Tag Value : 0xa000000c
Tag value: Microsoft
Tag value: Name Surrogate
Tag value: Symbolic Link
Reparse Data Length: 0x00000020
Reparse Data:
0000: 0a 00 0a 00 00 00 0a 00 01 00 00 00 63 00 6c 00 ............c.l.
0010: 69 00 6e 00 6b 00 63 00 6c 00 69 00 6e 00 6b 00 i.n.k.c.l.i.n.k.
C:\PROGS\vendors>fsutil reparsepoint query clink-j
Reparse Tag Value : 0xa0000003
Tag value: Microsoft
Tag value: Name Surrogate
Tag value: Mount Point
Substitue Name offset: 0
Substitue Name length: 52
Print Name offset: 54
Print Name Length: 44
Substitute Name: \??\C:\PROGS\vendors\clink
Print Name: C:\PROGS\vendors\clink
Reparse Data Length: 0x0000006c
Reparse Data:
0000: 00 00 34 00 36 00 2c 00 5c 00 3f 00 3f 00 5c 00 ..4.6.,.\.?.?.\.
0010: 43 00 3a 00 5c 00 50 00 52 00 4f 00 47 00 53 00 C.:.\.P.R.O.G.S.
0020: 5c 00 76 00 65 00 6e 00 64 00 6f 00 72 00 73 00 \.v.e.n.d.o.r.s.
0030: 5c 00 63 00 6c 00 69 00 6e 00 6b 00 00 00 43 00 \.c.l.i.n.k...C.
0040: 3a 00 5c 00 50 00 52 00 4f 00 47 00 53 00 5c 00 :.\.P.R.O.G.S.\.
0050: 76 00 65 00 6e 00 64 00 6f 00 72 00 73 00 5c 00 v.e.n.d.o.r.s.\.
0060: 63 00 6c 00 69 00 6e 00 6b 00 00 00 c.l.i.n.k...
( 2 * b ) || ! ( 2 * b )