VB C# .NET Freamworkの備忘録

C#, VB.NET Freamworkの備忘録を掲載しています。 コントロール、WPF、スレッド、共通関数と実用的なコードを掲載してきます。

カテゴリ: API

APIを利用して共有ディレクトリの操作を行います。

登録、削除を行う関数を以下に記載します。


#Region "Net Share" Public Enum NET_API_STATUS As Integer SUCCESS = 0 ERROR_ACCESS_DENIED = 5 ERROR_NOT_ENOUGH_MEMORY = 8 ERROR_INVALID_PARAMETER = 87 ERROR_INVALID_NAME = 123 ERROR_INVALID_LEVEL = 124 ERROR_UNKNOWNDEVDIR = 2116 ERROR_REDIRECTE_DPATH = 2117 ERROR_DUPLICATESHARE = 2118 ERROR_NET_NAME_NOT_FOUND = 2310 End Enum ''' <summary> ''' 共有設定の引数で使用される構造体 ''' </summary> ''' <remarks></remarks> <StructLayoutAttribute(LayoutKind.Sequential)> _ Public Structure SHARE_INFO_2 <MarshalAsAttribute(UnmanagedType.LPWStr)> _ Public shi2_netname As String Public shi2_type As UInteger <MarshalAsAttribute(UnmanagedType.LPWStr)> _ Public shi2_remark As String Public shi2_permissions As UInteger Public shi2_max_uses As Integer Public shi2_current_uses As UInteger <MarshalAsAttribute(UnmanagedType.LPWStr)> _ Public shi2_path As String <MarshalAsAttribute(UnmanagedType.LPWStr)> _ Public shi2_passwd As String End Structure ''' <summary> ''' 共有設定の追加を行います。 ''' </summary> ''' <param name="servername">対象となるサーバ名(ローカルの場合はNULLを設定)</param> ''' <returns> ''' 戻り値 ''' 0の場合は正常終了、それ以外はエラーとする。 ''' </returns> ''' <remarks></remarks> Declare Function NetShareAdd Lib "netapi32.dll" (<InAttribute(), MarshalAs(UnmanagedType.LPWStr)> ByVal servername As String, ByVal level As UInteger, ByRef buf As SHARE_INFO_2, <OutAttribute()> ByRef parm_err As UInteger) As Integer ''' <summary> ''' 共有設定の追加を行います。 ''' </summary> ''' <param name="computerName">対象となるサーバ名(ローカルの場合はNULLを設定)</param> ''' <param name="shareName">共有フォルダ名</param> ''' <remarks></remarks> Public Shared Sub SharedFolder(ByVal computerName As String, ByVal localPath As String, ByVal shareName As String, Optional ByVal shareDescription As String = "") Dim info As New SHARE_INFO_2 With info .shi2_netname = shareName .shi2_type = 0 .shi2_remark = shareDescription .shi2_permissions = 0 .shi2_max_uses = -1 .shi2_current_uses = 0 .shi2_path = localPath .shi2_passwd = Nothing End With Dim parameterError As UInteger = 0 ' 共有設定の追加 Dim result As Integer = NetShareAdd(computerName, 2, info, parameterError) ResultShread(result, True) End Sub ''' <summary> ''' 共有設定の削除を行います。 ''' </summary> ''' <param name="servername">対象となるサーバ名(ローカルの場合はNULLを設定)</param> ''' <param name="netname">共有フォルダ名</param> ''' <param name="reserved"></param> ''' <returns> ''' 戻り値 ''' 0の場合は正常終了、それ以外はエラーとする。 ''' </returns> ''' <remarks></remarks> Declare Function NetShareDel Lib "netapi32.dll" (<InAttribute(), MarshalAs(UnmanagedType.LPWStr)> ByVal servername As String, <InAttribute(), MarshalAs(UnmanagedType.LPWStr)> ByVal netname As String, ByVal reserved As UInteger) As Integer ''' <summary> ''' 共有設定の削除を行います。 ''' </summary> ''' <param name="computerName">対象となるサーバ名(ローカルの場合はNULLを設定)</param> ''' <param name="shareName">共有フォルダ名</param> ''' <remarks></remarks> Public Shared Sub NetShareDel(ByVal computerName As String, ByVal shareName As String, Optional ByVal isNew As Boolean = True) ' 共有設定の削除 Dim result As Integer = NetShareDel(computerName, shareName, 0) ResultShread(result, isNew) End Sub ''' <summary> ''' NetSharedの戻り値解析を行います。 ''' </summary> ''' <param name="result">戻り値</param> ''' <param name="isNew">バージョンアップか否か</param> ''' <remarks></remarks> Public Shared Sub ResultShread(ByVal result As Integer, ByVal isNew As Boolean) If result = NET_API_STATUS.SUCCESS Then ' 正常終了 Exit Sub Else ' エラーが発生した場合 If result = NET_API_STATUS.ERROR_ACCESS_DENIED Then Throw New Exception("ユーザには要求した情報へのアクセス権がありません") ElseIf result = NET_API_STATUS.ERROR_INVALID_LEVEL Then Throw New Exception("指定されたパラメータの値が無効です。") ElseIf result = NET_API_STATUS.ERROR_INVALID_NAME Then Throw New Exception("指定された文字またはファイルシステム名が無効です。") ElseIf result = NET_API_STATUS.ERROR_INVALID_PARAMETER Then Throw New Exception("指定されたパラメータは無効です。") ElseIf result = NET_API_STATUS.ERROR_DUPLICATESHARE Then Throw New Exception("指定された共有名はすでにサーバで使われています。") ElseIf result = NET_API_STATUS.ERROR_REDIRECTE_DPATH Then Throw New Exception("リダイレクトされたリソースに対して、この操作は無効です。指定されたデバイス名は共有リソースに割り当てられています。") ElseIf result = NET_API_STATUS.ERROR_UNKNOWNDEVDIR Then Throw New Exception("デバイスまたはディレクトリが存在しません") ElseIf result = NET_API_STATUS.ERROR_NOT_ENOUGH_MEMORY Then Throw New Exception("利用可能なメモリが不足しています。") ElseIf result = NET_API_STATUS.ERROR_NET_NAME_NOT_FOUND Then If isNew = False Then ' 一度インストール済みの場合 Throw New Exception("指定された共有名が存在しません。") End If Else Throw New Exception(String.Format("原因不明なエラー 戻り値:[{0}]", result.ToString())) End If End If End Sub #End Region

----------------------------------------------------------
VB C# .NET Freamworkの備忘録
http://ari-it.doorblog.jp/
javascriptの備忘録
http://ari-java.doorblog.jp/
--------------------------------------------------------- 

OSにより、WIndowsディレクトリは違うため、APIでディレクトリを取得します。


#Region "GetWindowsDirectory"
‌ 
    ''' <summary>
    ''' Windowsのディレクトリの取得を行います。
    ''' </summary>
    ''' <param name="lpBuffer">バッファ</param>
    ''' <param name="nSize">サイズ</param>
    ''' <returns>Windowsのディレクトリ</returns>
    ''' <remarks></remarks>
    Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As StringByVal nSize As IntegerAs Integer
‌ 
    ''' <summary>
    ''' Windowsのディレクトリの取得を行います。
    ''' </summary>
    ''' <returns>Windowsのディレクトリ</returns>
    ''' <remarks></remarks>
    Public Shared Function WindowsFolder() As String
        Dim buf As New String(" "c, 260)
        Dim len As Integer = GetWindowsDirectory(buf, 260)
        Return buf.Substring(0, len)
    End Function
‌ 
#End Region 
‌ 

↑このページのトップヘ