2015-04-02 50 views
0

我正在使用放置在客戶站點時將處於Kiosk模式的機器。應用程序GUI將是用戶對系統的唯一接口,當用戶想要將文件複製到遠程位置時,應用程序需要映射/取消映射共享文件夾。我正在使用WNetAddConnection2進行映射,一旦用戶離開復制對話框,我正在使用WNetCancelConnection2來取消映射。根據客戶的需求,本機可以直接放置在擁有共享文件夾的域上,也可以放在單獨的域上。對於我們的測試,我們將機器放在沒有DNS訪問權限的域上,並且目標文件共享位於獨立域上的Active Directory服務器上。使用WNetAddConnection2,我可以給我的用戶名,密碼和路徑,如\\,但不會得到連接,找不到路徑。在這個域中沒有DNS是正確的。然後,我嘗試了\\,並且用這條路我可以很好地到達那裏。帶域名的Win32 C++ WNetAddConnection2?

我有的問題是,對WNetAddConnection2和NETRESOURCE結構的調用都沒有用於傳遞域名的字段。 WNetAddConnection2的情況是NETRESOURCE結構中的用戶名字段可以是\的形式嗎?我還沒有看到任何文件證明或反駁這種情況。我想確保這一點,因爲使用目標系統的名稱而不是IP地址,可能需要指定域。正如你可能從這個問題中已經注意到的那樣,這不是我的主要專業領域。我一直在尋找答案,但還沒有拿出任何明確的答案。任何幫助,將不勝感激。

+0

您使用相同的名稱你在使用NET USE命令。如果該命令不起作用,那麼您將永遠無法在代碼中使用它。而且根本沒有名稱提供者,它當然不會起作用。後續在serverfault.com – 2015-04-02 16:09:03

+0

太好了,謝謝。我儘可能多地思考,但沒有看到任何支持我理論的東西。只需要一些驗證。這有很大幫助。 – bmahf 2015-04-02 18:48:29

+0

請勿更改標題以包含「已解決」。如果有答案,則將其標記爲已接受。如果沒有,請自己創建一個答案,如何「解決」,然後將其標記爲已接受。 – crashmstr 2015-04-02 18:51:07

回答

-1

WNetAddConnection2接受NETRESOURCElpUserName參數的lpRemoteName字段中的域名。指定遠程名稱爲\\server\resource\\IPAddress\resource,並以domain\username格式指定用戶名。

(當然,你需要正確的逃生C/C的反斜槓字符++)

稍加修改例如從MSDN

NETRESOURCE nr; 
DWORD res; 
TCHAR szUserName[32] = "MyDomain\\MyUserName", 
    szPassword[32] = "MyPassword", 
    szLocalName[32] = "Q:", 
    szRemoteName[MAX_PATH] = "\\\\products2\\relsys"; 

nr.dwType = RESOURCETYPE_ANY; 
nr.lpLocalName = szLocalName; 
nr.lpRemoteName = szRemoteName; 
nr.lpProvider = NULL; 

res = WNetAddConnection2(&nr, szPassword, szUserName, FALSE); 

if(res == NO_ERROR) 
    printf("Connection added \n", szRemoteName); 
else 
    printf("Error: %ld\n", res); 
    return; 
}