1

VB.NET プログラム内で、ファイル システムからファイルを読み取り、別の資格情報を使用して、それらのファイルの圧縮バージョンをリモートの安全なファイル共有に書き込みたいと考えています。

cmd プロンプトでの同様の操作は次のとおりです。

net use s: \\server\share /user:foo P@ssw0rd
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 

これは理にかなっていますか?

共有に直接ファイルを作成できることを知っています。問題は、代替資格情報を使用してそれを行う方法ですか? 共有を作成するときに代替資格情報を渡す方法を知っているので、共有を作成するというアイデアを紹介しました。共有は単一のファイルに対してのみ、プログラム内でのみ行われるため、実際には必要ありません

そして、最初にファイルを作成してから、そのファイルを共有にコピーできることを知っています。それは大きなファイルであり、一度ストリーミングしたいので、私はそれをしたくありません。

4

1 に答える 1

2

ドライブをマップする必要はありません。ファイル\\server\ share\foo.binを直接作成できます。

しかし、本当にやりたいのであれば、ここにいくつかのコードがあります:

http://www.mredkj.com/vbnet/vbnetmapdrive.htmlから

     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
于 2009-09-08T17:38:02.443 に答える