函數原型
function WNetAddConnection2W(
var lpNetResource: TNetResourceW;
lpPassword: PWideChar;
lpUserName: PWideChar;
dwFlags: DWORD
): DWORD; stdcall;
參數說明
| 參數 | 說明 |
| lpNetResource | 指向 TNetResourceW 結構,指定資源類型、本地磁碟機代號、遠端 UNC 路徑、提供者名稱。 |
| lpPassword | 連線密碼(寬字串)。 |
| lpUserName | 使用者名稱(寬字串)。 |
| dwFlags | CONNECT_UPDATE_PROFILE 表示登入時自動還原映射;CONNECT_TEMPORARY 不更新設定檔。 |
完整範例
var
NRW: TNetResourceW;
begin
FillChar(NRW, SizeOf(NRW), 0);
with NRW do begin
dwType := RESOURCETYPE_DISK; // 磁碟資源
lpLocalName := 'X:'; // 對應本地磁碟機代號
lpRemoteName := '\\MyServer\MyShare'; // UNC 路徑
lpProvider := ''; // 空值由系統自動選擇提供者
end;
// 以明文密碼/帳號連線,並寫入使用者設定檔(下次登入自動還原)
if WNetAddConnection2W(NRW, 'MyPassword', 'MyUserName', CONNECT_UPDATE_PROFILE) <> NO_ERROR then
ShowMessage('映射失敗,請檢查網路路徑與憑證。');
end;
常見錯誤代碼
ERROR_BAD_NETPATH (53):UNC 路徑錯誤或主機不可達。
ERROR_LOGON_FAILURE (1326):帳號密碼錯誤。
ERROR_ALREADY_ASSIGNED (85):磁碟機代號已被使用。
ERROR_SESSION_CREDENTIAL_CONFLICT (1219):同一使用者對同一伺服器已有不同憑證的連線,需先斷開。
斷開映射
WNetCancelConnection2('X:', CONNECT_UPDATE_PROFILE, True); // True = 強制斷開
最佳實踐建議
- 優先使用寬字串版本(W 尾綴)支援 Unicode 路徑。
- 生產環境避免硬編碼密碼,改用 Windows 儲存憑證(CredRead/CredWrite)或 Kerberos 整合驗證。
- 錯誤處理務必檢查回傳值,必要時呼叫
GetLastError 取得詳細代碼。