NikLok
ну вроде что-то получилось - для обычного каталога
UDF воспроизводит переданный в параметре путь к каталогу и устанавливает
@extended=0, если каталог является только ссылкой, то восстанавливается его реальный путь и значение
@extended=1 :
Код:

#include <Constants.au3>
Func _DirGetJunctionTarget($sDirPath)
If StringInStr(FileGetAttrib($sDirPath),"D") =0 Then Return SetError(1, 0, "") ; Ошибка: параметр не является каталогом
Local $tRet = DllStructCreate("dword"), $aRet
Local $tBuf = DllStructCreate("byte["& 1024 *16 &"]")
Local $REPARSE_MOUNTPOINT_DATA_BUFFER = _
DllStructCreate("int ReparseTag;dword ReparseDataLength;ushort;ushort ReparseTargetLength;ushort ReparseTargetMaximumLength;ushort;wchar ReparseTarget[260]", _
DllStructGetPtr($tBuf))
Local $aFile = DllCall("kernel32.dll", "int", "CreateFile", _
"str", $sDirPath, "dword", 0, "dword", 0, "ptr", 0, "dword", $OPEN_EXISTING, "dword", 0x2200000, "ptr", 0 )
If Not(IsArray($aFile)) Then Return SetError(2, 1, "") ; Ошибка вызова DLL
If $aFile[0]=-1 Then
$aRet = DllCall("kernel32.dll", "int", "GetLastError")
Return SetError(3, $aRet[0], "") ; Ошибка доступа к каталогу
EndIf
$aRet = DllCall("kernel32.dll", "int", "DeviceIoControl", _
"hwnd", $aFile[0], "dword", 0x900A8, "ptr", 0, "dword", 0, "ptr", DllStructGetPtr($tBuf), "dword", DllStructGetSize($tBuf), "ptr", DllStructGetPtr($tRet), "ptr", 0)
DllCall("kernel32.dll", "int", "CloseHandle", "int", $aFile[0])
If Not(IsArray($aRet)) Then Return SetError(2, 2, "") ; Ошибка вызова DLL
If $aRet[0]=0 Then
$aRet = DllCall("kernel32.dll", "int", "GetLastError")
If $aRet[0] = 0x1126 Then Return SetError(0, 0, $sDirPath)
Return SetError(4, $aRet[0], "") ; Другие ошибки ввода/вывода
EndIf
$sDirPath = StringRegExpReplace(DllStructGetData($REPARSE_MOUNTPOINT_DATA_BUFFER,"ReparseTarget"),"^\\\?\?\\","")
Return SetError(0, DllStructGetData($REPARSE_MOUNTPOINT_DATA_BUFFER, "ReparseTag")=0xA0000003, $sDirPath)
EndFunc