2009-09-08 3 views
1

VB.NET 프로그램에서 파일 시스템에서 파일을 읽은 다음 다른 자격 증명을 사용하여 파일의 압축 된 버전을 원격의 안전한 파일 공유에 기록하려고합니다.프로그래밍 방식으로 파일 공유에서 "net use"를 수행 할 수 있습니까?

cmd를 프롬프트에서 유사한 동작은 다음과 같습니다

net use s: \\server\share /user:foo [email protected] 
copy a+b | compress > s:\foo.bin 
net use s: /delete 

이 가능합니까? 방법? (압축과 파일 I/O에 대해 걱정할 필요가 없습니다. 보안 부분에 관심이 있습니다.)

WindowsImpersonationContext으로해야합니까?

편집 : 네가 맞아, 드라이브를 매핑하고 싶지는 않습니다. 내가하고 싶은 일은 기본 자격 증명이 아닌 자격 증명으로 공유에 액세스하는 것입니다. 앱은 모든 종류의 사용자에 의해 실행되며 공유에 대한 쓰기 권한이 정상적으로 부여되지 않습니다. 이 단일 파일의 목적을 위해 사용자가 공유에 쓸 수 있도록하고 싶습니다.

그럼 대체 자격 증명을 사용하여 공유에 하나의 파일을 쓰려면 어떻게해야합니까? 압축에 대한 입력으로 작동하는 파일을 읽으려면 기본 자격 증명이나 ID가 필요합니다.

UserX reads files a1 and b1 as UserX, writes file c1 as UserA 
UserY reads files a2 and b2 as UserY, writes file c2 as UserA 

이 의미가 있습니까?

공유에 직접 파일을 만들 수 있음을 알고 있습니다. 문제는 대체 자격 증명을 사용하여이를 수행하는 방법입니다. 공유를 만들 때 alt cred를 전달하는 방법을 알고 있으므로 공유를 만드는 아이디어를 소개했습니다. 나는 이 실제로는에 공유가 필요하지 않습니다. 왜냐하면 그것은 하나의 파일에 대해서만 그리고 프로그램 내에서만 이루어지기 때문입니다.

그리고 먼저 파일을 만든 다음 파일을 공유에 복사 할 수 있음을 알고 있습니다. 큰 파일이기 때문에 한 번 스트리밍하고 싶습니다.

+1

http://www.mredkj.com/vbnet/vbnetmapdrive.html에서 내가 매핑보다는 서버 \ 공유 \ myfile.text을 \\에 직접 파일을 복사 할 \\ server \ share를 s :로 복사 한 다음 s : myfile.text로 복사합니다. 다른 이유로는 아니지만이 방식으로 사용자 구성을 엉망으로 만들 때 문제를 유발할 수 있습니다 (이미 매핑되어 있습니까? 연결을 끊기 전에 무언가가 실패하면 어떻게됩니까?) –

답변

2

드라이브를 매핑 할 필요가 없습니다. \\ server \ share \ foo.bin 파일을 직접 만들면됩니다.

하지만, 당신이 정말로 원하는 경우는 여기에 몇 가지 코드 :

 Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" _ 
(ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, _ 
ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer 

    Public Declare Function WNetCancelConnection2 Lib "mpr" Alias "WNetCancelConnection2A" _ 
(ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer 

     <StructLayout(LayoutKind.Sequential)> _ 
    Public Structure NETRESOURCE 
      Public dwScope As Integer 
      Public dwType As Integer 
      Public dwDisplayType As Integer 
      Public dwUsage As Integer 
      Public lpLocalName As String 
      Public lpRemoteName As String 
      Public lpComment As String 
      Public lpProvider As String 
     End Structure 

    Public Const ForceDisconnect As Integer = 1 
    Public Const RESOURCETYPE_DISK As Long = &H1 

    Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String) As Boolean 

      Dim nr As NETRESOURCE 
      Dim strUsername As String 
      Dim strPassword As String 

      nr = New NETRESOURCE 
      nr.lpRemoteName = UNCPath 
      nr.lpLocalName = DriveLetter & ":" 
      strUsername = Nothing '(add parameters to pass this if necessary) 
      strPassword = Nothing '(add parameters to pass this if necessary) 
      nr.dwType = RESOURCETYPE_DISK 

      Dim result As Integer 
      result = WNetAddConnection2(nr, strPassword, strUsername, 0) 

      If result = 0 Then 
       Return True 
      Else 
       Return False 
      End If 
     End Function 

    Public Function UnMapDrive(ByVal DriveLetter As String) As Boolean 
     Dim rc As Integer 
      rc = WNetCancelConnection2(DriveLetter & ":", 0, ForceDisconnect) 

      If rc = 0 Then 
       Return True 
      Else 
       Return False 
      End If 

     End Function 
+2

공유에 직접 파일을 만들 수 있다는 것을 알고 있습니다. . 문제는 대체 자격 증명을 사용하여이를 수행하는 방법입니다. 공유를 만들 때 alt cred를 전달하는 방법을 알고 있습니다. 그래서 그것을 소개했습니다. 나는 그것이 단지 하나의 파일에 대해서만, 그리고 프로그램 내에서만 이루어지기 때문에 정말로 공유가 필요하지 않습니다. – Cheeso