В .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);
Что я делаю неправильно?
Как создать соединение из С#?
Ответы
Ответ 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);