Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Following are the signatures that I needed to enable Junctions through .NET. In another posting I will cover several structs that I had to create. If you are unable to wait for me to post them please let me know and I will get them here sooner.
/// CloseHandle function
/// </summary>
/// <param name="hObject">Handle to an open object.</param>
/// <returns>If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError.</returns>
[System.Runtime.InteropServices.DllImport("Kernel32.dll", SetLastError = true)]
private extern static int CloseHandle(IntPtr hObject);
/// <summary>
/// CreateFile function
/// </summary>
/// <param name="FileName"></param>
/// <param name="DesiredAccess"></param>
/// <param name="ShareMode"></param>
/// <param name="lpSecurityAttributes"></param>
/// <param name="CreationDisposition"></param>
/// <param name="dwFlagsAndAttributes"></param>
/// <param name="hTemplateFile"></param>
/// <returns>INVALID_HANDLE_VALUE on error or the handle to file if success</returns>
[System.Runtime.InteropServices.DllImport("Kernel32.dll", SetLastError = true)]
private extern static IntPtr CreateFile(string FileName, uint DesiredAccess,
uint ShareMode, IntPtr lpSecurityAttributes,
uint CreationDisposition, uint dwFlagsAndAttributes,
IntPtr hTemplateFile);
/// <summary>
/// Junction form of DeviceIoControl Win32 function
/// </summary>
/// <param name="hDevice">Handle of device opened with CreateFile</param>
/// <param name="nIoControlCode">Code of DeviceIoControl operation</param>
/// <param name="rmp">Pointer to a buffer that contains the REPARSE_MOUNTPOINT_DATA_BUFFER data required to perform the operation.</param>
/// <param name="nBufferSize">Size of the buffer pointed to by lpInBuffer, in bytes.</param>
/// <param name="lpOutBuffer">Pointer to a buffer that receives the operation's output data.</param>
/// <param name="lpOutBufferSize">Size of the buffer pointed to by lpOutBuffer, in bytes.</param>
/// <param name="lpBytesReturned">Receives the size, in bytes, of the data stored into the buffer pointed to by lpOutBuffer. </param>
/// <param name="lpOverlapped">Pointer to an OVERLAPPED structure. Discarded for this case</param>
/// <returns>If the function succeeds, the return value is nonzero. If the function fails, the return value is zero.</returns>
[System.Runtime.InteropServices.DllImport("Kernel32.dll", SetLastError = true)]
private extern static bool DeviceIoControl(IntPtr hDevice,
uint nIoControlCode,
REPARSE_MOUNTPOINT_DATA_BUFFER rmp,
uint nBufferSize,
IntPtr lpOutBuffer,
IntPtr lpOutBufferSize,
ref uint lpBytesReturned,
IntPtr lpOverlapped);
/// <summary>
/// Junction form of DeviceIoControl Win32 function
/// </summary>
/// <param name="hDevice">Handle of device opened with CreateFile</param>
/// <param name="nIoControlCode">Code of DeviceIoControl operation</param>
/// <param name="lpInBuffer">Pointer to a buffer.</param>
/// <param name="nBufferSize">Size of the buffer pointed to by lpInBuffer, in bytes.</param>
/// <param name="lpOutBuffer">Pointer to a buffer that receives the operation's output data.</param>
/// <param name="lpOutBufferSize">Size of the buffer pointed to by lpOutBuffer, in bytes.</param>
/// <param name="lpBytesReturned">Receives the size, in bytes, of the data stored into the buffer pointed to by lpOutBuffer. </param>
/// <param name="lpOverlapped">Pointer to an OVERLAPPED structure. Discarded for this case</param>
/// <returns>If the function succeeds, the return value is nonzero. If the function fails, the return value is zero.</returns>
[System.Runtime.InteropServices.DllImport("Kernel32.dll", SetLastError = true)]
private extern static bool DeviceIoControl(IntPtr hDevice,
uint nIoControlCode,
IntPtr lpInBuffer,
IntPtr lpBufferSize,
IntPtr lpvReparseBuf,
int nBufferSize,
ref uint lpBytesReturned,
IntPtr lpOverlapped);
/// <summary>
/// Junction form of GetFileAttributes Win32 function
/// </summary>
/// <param name="lpFileName">File Name</param>
/// <returns>The attributes of the specified file or directory, returned in a DWORD, indicates success. 0xFFFFFFFF indicates failure.</returns>
[System.Runtime.InteropServices.DllImport("Kernel32.dll", SetLastError = true)]
private extern static uint GetFileAttributes(string FileName);