Junction PInvoke Signatures

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);