如何用VB修改我指定的文件的共享属性

解决方案 »

  1.   

    2000系统下API实现目录共享/删除    3661512(原作)'共享类型
    Private Const STYPE_ALL       As Long = -1
    Private Const STYPE_DISKTREE  As Long = 0
    Private Const STYPE_PRINTQ    As Long = 1
    Private Const STYPE_DEVICE    As Long = 2
    Private Const STYPE_IPC       As Long = 3
    Private Const STYPE_SPECIAL   As Long = &H80000000'共享权限
    Private Const ACCESS_READ     As Long = &H1
    Private Const ACCESS_WRITE    As Long = &H2
    Private Const ACCESS_CREATE   As Long = &H4
    Private Const ACCESS_EXEC     As Long = &H8
    Private Const ACCESS_DELETE   As Long = &H10
    Private Const ACCESS_ATRIB    As Long = &H20
    Private Const ACCESS_PERM     As Long = &H40
    Private Const ACCESS_ALL      As Long = ACCESS_READ Or _
                                            ACCESS_WRITE Or _
                                            ACCESS_CREATE Or _
                                            ACCESS_EXEC Or _
                                            ACCESS_DELETE Or _
                                            ACCESS_ATRIB Or _
                                            ACCESS_PERM'共享信息
    Private Type SHARE_INFO_2
      shi2_netname       As Long        '共享名
      shi2_type          As Long        '类型
      shi2_re        As Long        '备注
      shi2_permissions   As Long        '权限
      shi2_max_uses      As Long        '最大用户
      shi2_current_uses  As Long        '
      shi2_path          As Long        '路径
      shi2_passwd        As Long        '密码
    End Type
      
    '设置共享
    Private Declare Function NetShareAdd Lib "netapi32" _
                               (ByVal ServerName As Long, _
                                ByVal level As Long, _
                                buf As Any, _
                                parmerr As Long) As Long'删除共享
    Private Declare Function NetShareDel Lib "netapi32.dll" _
                               (ByVal ServerName As Long, _
                                ByVal ShareName As Long, _
                                ByVal dword As Long) As Long
                         
    '设置共享
    Private Sub Command1_Click()   Dim success As Long
                   
       success = ShareAdd("\\XP","C:\","DOWNLOAD","资源目录","") 
                          
    End Sub'删除共享
    Private Sub Command2_Click()
       Dim success As Long
                   
       success = DelShare("\\XP","DOWNLOAD")
       
    End Sub'设置共享(返回0 为成功)
    '参数:
    'sServer          计算机名
    'sSharePath       要共享路径
    'sShareName       显示的共享名
    'sShareRe     备注
    'sSharePw         密码
    Private Function ShareAdd(sServer As String, _
                              sSharePath As String, _
                              sShareName As String, _
                              sShareRe As String, _
                              sSharePw As String) As Long
       
       Dim lngServer   As Long
       Dim lngNetname  As Long
       Dim lngPath     As Long
       Dim lngRe   As Long
       Dim lngPw       As Long
       Dim parmerr    As Long
       Dim si2        As SHARE_INFO_2
       
       lngServer = StrPtr(sServer)      '转成地址
       lngNetname = StrPtr(sShareName)
       lngPath = StrPtr(sSharePath)
       
       '如果有备注信息
       If Len(sShareRe) > 0 Then
          lngRe = StrPtr(sShareRe)
       End If
       
       '如果有密码
       If Len(sSharePw) > 0 Then
          lngPw = StrPtr(sSharePw)
       End If
          
      '初始化共享信息
       With si2
          .shi2_netname = lngNetname
          .shi2_path = lngPath
          .shi2_re = lngRe
          .shi2_type = STYPE_DISKTREE
          .shi2_permissions = ACCESS_ALL
          .shi2_max_uses = -1
          .shi2_passwd = lngPw
       End With
                              
      '设置共享(用户名,共享类型,共享信息,)
       ShareAdd = NetShareAdd(lngServer, _
                              2, _
                              si2, _
                              parmerr)
                              
    End Function'删除共享(返回0 表示成功)
    '参数:
    'sServer       计算机名
    'sShareName    共享名
    Private Function DelShare(sServer As String, _
                              sShareName As String) As Long
       
       Dim lngServer   As Long       '计算机名
       Dim lngNetname  As Long       '共享名   lngServer = StrPtr(sServer)      '转成地址
       lngNetname = StrPtr(sShareName)   '删除共享
       DelShare = NetShareDel(lngServer, lngNetname, 0)End Function
      

  2.   

    98/ME下实现文件夹的共享和删除共享    3661512(翻译)独立模块中输入
    Option Explicit
    ' 共享错误信息
    Public Const NERR_NoWorkstation = 2102           ' 工作站驱动器未被安装.
    Public Const NERR_UnknownServer = 2103           ' 机器名不可用.
    Public Const NERR_RemoteOnly = 2106              ' 该操作不被机器支持.
    Public Const NERR_ServerNotStarted = 2114        ' 服务未启动.
    Public Const NERR_UnknownDevDir = 2116           ' 目录或驱动器不存在.
    Public Const NERR_RedirectedPath = 2117          ' 该共享资源不能被共享.
    Public Const NERR_DuplicateShare = 2118          ' 该共享名已被使用.
    Public Const NERR_NetworkError = 2136            ' 发生一般网络错误,共享失败.
    Public Const NERR_InvalidAPI = 2142              ' 该API不被远端机器所支持.' 标准错误信息
    Public Const ERROR_ACCESS_DENIED = 5
    Public Const ERROR_INVALID_PARAMETER = 87
    Public Const ERROR_INVALID_NAME = 123
    Public Const ERROR_INVALID_LEVEL = 124
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal lBytes As Long)' 共享类型
    Public Const STYPE_DISKTREE = 0
    Public Const STYPE_PRINTQ = 1
    Public Const STYPE_DEVICE = 2
    Public Const STYPE_IPC = 3
    Public Const STYPE_SPECIAL = &H80000000Public Const SHI_USES_UNLIMITED = -1&' 共享权限
    Public Const SHI50F_RDONLY = &H1
    Public Const SHI50F_FULL = &H2
    Public Const SHI50F_DEPENDSON = SHI50F_RDONLY Or SHI50F_FULL
    Public Const SHI50F_ACCESSMASK = SHI50F_RDONLY Or SHI50F_FULL
    Public Const SHI50F_PERSIST = &H100
    Public Const SHI50F_SYSTEM = &H200     '/* 该共享是不可见的 */
    Public Const LM20_NNLEN = 12           '// LM 2.0 机器名长度
    Public Const LM20_UNLEN = 20           '// LM 2.0 用户名称最大长度
    Public Const LM20_PWLEN = 14           '// LM 2.0 密码最大长度
    Public Const SHPWLEN = 8               '// 共享密码 (bytes)
    Public Const SHARELEVEL50 = 50Public Type SHARE_INFO_50
        yNetName(LM20_NNLEN)    As Byte         'charshi50_netname[LM20_NNLEN+1];
        '/* 共享名称 */
        yType                   As Byte         ' unsigned char shi50_type;    nFlags                  As Integer      ' short shi50_flags;    lpzRe               As Long         ' char FAR *shi50_re;    lpzPath                 As Long         ' char FAR *shi50_path;
        '/* 共享路径 */
        yRWPassword(SHPWLEN)    As Byte         ' char shi50_rw_password[SHPWLEN+1];
        '/* 可读/写共享密码 */
        yROPassword(SHPWLEN)    As Byte         ' char shi50_ro_password[SHPWLEN+1];
        '/* 只读共享密码 */
    End TypePublic Declare Function NetShareAdd50 Lib "svrapi" Alias "NetShareAdd" _
                           (ByVal lpzServerName As String, _
                            ByVal nShareLevel As Integer, _
                            ShareInfo As Any, _
                            ByVal nBufferSize As Integer) As LongPublic Declare Function NetShareDelete Lib "svrapi" Alias "NetShareDel" _
                           (ByVal lpzServerName As String, _
                            ByVal sShareName As String, _
                            ByVal nReserved As Integer) As Long
    '*************建立共享********************
    Public Function CreateShare(ByVal sSharePath As String, _
                                ByVal sShareName As String, _
                                ByVal sRe As String, _
                                ByVal sROPass As String, _
                                ByVal sRWPass As String) As Long    Dim ShareInfo       As SHARE_INFO_50
        Dim lReturn         As Long    Dim sServerName     As String
        Dim ySharePath()    As Byte
        Dim yRe()       As Byte    sServerName = ""   '建立一个本地共享    With ShareInfo        .yType = STYPE_DISKTREE     ' Disk type share
            .nFlags = SHI50F_PERSIST + SHI50F_DEPENDSON ' + SHI50F_SYSTEM '
            ySharePath() = StrConv(UCase$(sSharePath & vbNullChar), vbFromUnicode)
            .lpzPath = VarPtr(ySharePath(0))        yRe() = StrConv(sRe & vbNullChar, vbFromUnicode)
            .lpzRe = VarPtr(yRe(0))
            Erase .yNetName()
            sShareName = UCase$(sShareName & vbNullChar)
            CopyMemory .yNetName(0), ByVal sShareName, Len(sShareName)
            Erase .yRWPassword()
            sRWPass = UCase$(sRWPass & vbNullChar)
            CopyMemory .yRWPassword(0), ByVal sRWPass, Len(sRWPass)
            Erase .yROPassword()
            sROPass = UCase$(sROPass & vbNullChar)
            CopyMemory .yROPassword(0), ByVal sROPass, Len(sROPass)
        End With    lReturn = NetShareAdd50(sServerName, SHARELEVEL50, ShareInfo, LenB(ShareInfo))    Debug.Print "lReturn:"; lReturn    CreateShare = lReturnEnd Function
    '******************删除共享**************************
    Public Function DeleteShare(ByVal sShareName As String) As Long       DeleteShare = NetShareDelete("", UCase$(sShareName), 0)    Debug.Print "lReturn:"; DeleteShare, "DLL Error:"; Err.LastDllErrorEnd Function
      

  3.   

    直接用
    shell "cmd.exe /c net shaer"命令修改就行了,但不支持win98