首頁 >後端開發 >C++ >WNetUseConnection 如何在沒有磁碟機對應的情況下安全地存取遠端檔案?

WNetUseConnection 如何在沒有磁碟機對應的情況下安全地存取遠端檔案?

Barbara Streisand
Barbara Streisand原創
2025-01-27 14:26:10413瀏覽

How Can WNetUseConnection Securely Access Remote Files Without Drive Mapping?

使用WNetUseConnection API安全存取遠端檔案

與傳統的磁碟機對應或利用網域級模擬的方法不同,WNetUseConnection API提供了一種更安全的方法來存取不受信任網域中的遠端檔案共用。

使用WNetUseConnection

要建立連線而不對映驅動器,請使用下列參數呼叫WNetUseConnection:

  • hwndOwner:父視窗的未使用句柄,或設定為IntPtr.Zero
  • lpNetResource:使用NETRESOURCE結構指定遠端伺服器和磁碟資源。
  • lpPassword:遠端身份驗證所需的密碼。
  • lpUserID:具有存取遠端共用權限的使用者帳戶名稱。
  • dwFlags:使用0表示預設設定。
  • lpAccessName:使用null或空字串,因為此操作與此無關。
  • lpBufferSize:設定為null,因為不需要緩衝區大小。
  • lpResult:未使用的回傳值;設定為null。

範例程式碼

以下程式碼示範如何使用WNetUseConnection連接到UNC路徑,而無需映射網路磁碟機:

<code class="language-csharp">// 连接到UNC路径,无需映射驱动器
using System.Runtime.InteropServices;

namespace RemoteFileAccess
{
    class Program
    {
        [DllImport("Mpr.dll")]
        private static extern int WNetUseConnection(IntPtr hwndOwner, NETRESOURCE lpNetResource, string lpPassword, string lpUserID, int dwFlags, string lpAccessName, string lpBufferSize, string lpResult);

        [StructLayout(LayoutKind.Sequential)]
        private struct NETRESOURCE
        {
            public int dwScope;
            public int dwType;
            public int dwDisplayType;
            public int dwUsage;
            public string lpLocalName;
            public string lpRemoteName;
            public string lpComment;
            public string lpProvider;
        }

        static void Main(string[] args)
        {
            // 提供凭据和远程UNC路径
            string remoteUNC = @"\server\share";
            string username = "username";
            string password = "password";

            // 初始化NETRESOURCE结构
            NETRESOURCE nr = new NETRESOURCE();
            nr.dwType = 1; // RESOURCETYPE_DISK
            nr.lpRemoteName = remoteUNC;

            // 建立连接,无需映射驱动器
            int result = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);

            // 检查错误
            if (result == 0)
            {
                // 连接已建立
                Console.WriteLine("已连接到远程文件共享。");
            }
            else
            {
                // 发生错误
                Console.WriteLine($"错误:{result}");
            }
        }
    }
}</code>

這段程式碼展示如何安全地連接到遠端檔案共享,而無需建立持久性網路磁碟機映射,從而增強安全性並簡化了檔案存取流程。 請記住替換範例程式碼中的\servershareusernamepassword為您的實際值。

以上是WNetUseConnection 如何在沒有磁碟機對應的情況下安全地存取遠端檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn