2011-06-28 19 views
6

Tôi đang mắc kẹt với câu hỏi này.Làm cách nào để sao chép tệp từ UNC-share sang hệ thống cục bộ?

Tôi có chia sẻ UNC, tôi biết chi tiết tài khoản, có đầy đủ, nhưng không có quyền truy cập vào hệ thống cục bộ của tôi. tôi có thể nhận được quyền truy cập vào UNC từ xa với:

var token = default(IntPtr); 
var context = default(WindowsImpersonationContext); 
LogonUser(_config.Username, _config.Domain, _config.Password, 2, 0, out token); 
context = WindowsIdentity.Impersonate(token); 

//TODO :: System.IO operations 
File.Copy("remote-unc-path","local-path",true); // Exception : Access is denied. 

context.Undo(); 
CloseHandle(token); 

Nhưng, tôi không thể truy cập vào hệ thống nội bộ trong Mạo danh, bởi vì tài khoản không có quyền truy cập vào nó.

Làm cách nào để sao chép tệp trong trường hợp này? Tôi có cần phải sử dụng một cái gì đó như bộ đệm và bật/tắt Mạo danh?

+0

Btw, đừng quên để xử lý –

Trả lời

3

Những gì bạn phải làm là để đọc tất cả các byte và sau đó viết cho họ:

var token = default(IntPtr); 
    using (var context = default(WindowsImpersonationContext)) 
    { 
     LogonUser(_config.Username, _config.Domain, _config.Password, 2, 0, out token); 
     context = WindowsIdentity.Impersonate(token); 
     var bytes = File.ReadAllBytes("remote-unc-path"); 
     context.Undo(); 
     CloseHandle(token); 
     File.WriteAllBytes("local-path", bytes); 
    } 
+0

Nhưng, tác phẩm là rất lớn ... ~ 200MB - ~ 1Gb .. Ngoài ra, đây là một phần của hệ thống, có thể có một số "kho lưu trữ tệp". Nó sẽ sao chép các tập tin trong chủ đề khác nhau ... Tôi thực sự không muốn ReadALL cho mỗi tập tin .. Nó sẽ ăn tất cả bộ nhớ – Degot

+0

Tôi đã tìm thấy một giải pháp ... Tên của nó là WNetUseConnection – Degot

+0

@Oskar - Điều này được sử dụng để làm việc giống như một sự quyến rũ đối với tôi khi sử dụng Windows Server 2003/IIS6.x nhưng với Windows Server 2008/IIS 7.5 nó sẽ chỉ hoạt động (ít nhất là tôi có thể nói) nếu người dùng có tài khoản người dùng "Local" trên hệ thống I ' m cố kết nối. Vì vậy, yeah, tuyệt vọng nhìn thấy một câu trả lời không quản trị viên tài khoản này là tốt. Bảo mật Windows ngu ngốc. : - \ – jerhewet