Windows Vista e i Junction Point
I Junction Point risolvono questo problema permettendo alle applicazioni che si aspettano di trovare un certo "Path" di continuare ad attraversarlo accedendo però alla risorsa nella nuova posizione. Ho sottolinato attraversare perchè di default nelle ACL di un Junction Point i permessi per Everyone sono Deny Read inoltre sembra che l'unica possibilità per un'applicazione sia quella di avere i permessi per "Traverse Folder", quindi non dovrebbe essere possibile enumerare il contenuto di un junction point.
Da notare quindi che per led applicazioni legacy i permessi devono essere comunque esplicitamente abilitati.
In effetti questo è proprio il problema in cui mi sono imbattuto, il sistema per distinguere se l'oggetto che abbiamo in mano è un junction point è verificare che negli attributi sia marcato come ReparsePoint e System (in contemporanea), programmaticamente la cosa è molto semplice, un esempio semplice semplice è il seguente:
foreach( DirectoryInfo sd in myDir.GetDirectories() )
{
Boolean isReparsePoint = ( sd.Attributes & FileAttributes.ReparsePoint ) == FileAttributes.ReparsePoint;
Boolean isSystem = ( sd.Attributes & FileAttributes.System ) == FileAttributes.System;
if( !isReparsePoint && !isSystem )
{
//Access granted...
}
}
.m