Подтвердить что ты не робот

В .NET, как мне создать соединение в NTFS, в отличие от Symlink?

Я пытаюсь создать соединение NTFS. Из строки cmd я могу это сделать, используя инструмент junction.exe из sysinternals. Выход DIR cmd для соединения выглядит следующим образом:

 Volume in drive C has no label.
 Volume Serial Number is C8BC-2EBD

 Directory of c:\users\cheeso\Documents

03/22/2009  09:45 PM    <JUNCTION>     My Music [\??\c:\users\cheeso\Music]
05/11/2007  05:42 PM    <DIR>          My Received Files
03/22/2009  09:46 PM    <JUNCTION>     my videos [\??\c:\users\cheeso\Videos]

Я где-то читал, что Junctions - это подмножество символических ссылок.

Поэтому я попытался использовать CreateSymbolicLink, чтобы создать соединение. Когда я это делаю, я фактически получаю Symlink, а не соединение.

09/09/2009  11:50 AM    <SYMLINKD>     newLink [.\]

Существует также CreateHardLink. Док там говорит, что переходы (ака "точки повторной обработки" ) являются подмножеством жестких ссылок. но я не могу заставить этот звонок работать. Он завершается, но нет жесткой ссылки или соединения.

Я использую .NET/С#, и импорт выглядит следующим образом:

    [Interop.DllImport("kernel32.dll", EntryPoint="CreateSymbolicLinkW", CharSet=Interop.CharSet.Unicode)]
    public static extern int CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, int dwFlags);

    [Interop.DllImport("kernel32.dll", EntryPoint="CreateHardLinkW", CharSet=Interop.CharSet.Unicode)]
    public static extern bool CreateHardLink(string lpFileName,
                                             string lpExistingFileName,
                                             IntPtr mustBeNull);

Что я делаю неправильно?
Как создать соединение из С#?

4b9b3361

Ответ 1

Похоже, вы можете, и кто-то создал библиотеку в CodeProject, у которой есть ряд функций, которые они создали на С# для работы с точками соединения.

http://www.codeproject.com/KB/files/JunctionPointsNet.aspx

Похоже, он на самом деле использует следующий DllImport для его выполнения:

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
        IntPtr InBuffer, int nInBufferSize,
        IntPtr OutBuffer, int nOutBufferSize,
        out int pBytesReturned, IntPtr lpOverlapped);