現在オフラインです。再接続するためにインターネットの接続を待っています

Exchange 2000 Server および Exchange Server 2003 のメールボックスの権利をメールボックス作成時に設定する方法

Windows Server 2003 のサポートは 2015 年 7 月 14 日で終了しています

Windows Server 2003 のサポートは 2015 年 7 月 14 日で終了しています。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

概要
この資料では、Microsoft Active Directory ディレクトリ サービスでユーザー オブジェクトのメールボックスを有効にするのと同時に、プログラムによって Exchange 2000 Server または Exchange Server 2003 のメールボックスに対するメールボックスの権利を修正する方法について説明します。

この資料に記載されているサンプル コードは、Active Directory でユーザー オブジェクトのメールボックスが有効にされた後、Exchange 2000 または 2003 のインフォメーション ストア内にそのユーザーに対する実際のメールボックスが作成される前に、Exchange 2000 または 2003 のメールボックスに対するメールボックスの権利を設定する方法を示しています。

: このコードは、メールボックスが Exchange 2000 または 2003 のインフォメーション ストア内に既に存在する場合には効果はありません。つまり、ユーザーのメールボックスが既にアクセスされている場合、そのユーザーのメールボックスに対する実際の権利にはまったく影響はありません。Exchange 2000 メールボックスがインフォメーション ストア内に作成される前および作成された後にメールボックスの権利を設定する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
310866 インフォメーション ストア内のメールボックスに Exchange Server 2003 および Exchange 2000 Server のメールボックスの権利を設定する方法
詳細
Microsoft Windows 2000 または Microsoft Windows Server 2003 ドメイン環境の Exchange 2000 または 2003 組織では、メールボックスが次の 2 つの部分で構成されます。
  • Active Directory のメールボックスを有効にしたユーザー : これは単に Active Directory 内のユーザー オブジェクトです。このユーザー オブジェクトには、いくつかのメール関連プロパティとメールボックス関連プロパティが設定されています。
  • Exchange インフォメーション ストア内のメールボックス フォルダ : この場所に、ユーザーの実際のメールが格納され、そのメールボックスに固有のいくつかのプロパティが設定されます。
メールボックスの権利は、インフォメーション ストア内のメールボックスにあるセキュリティ記述子プロパティに格納されます。また、msExchMailboxSecurityDescriptor という Active Directory ユーザー オブジェクトの属性もあります。これは、そのユーザーのメールボックスに対するメールボックスの権利を反映するだけの属性です。

Exchange 2000 または 2003 でメールボックスを有効にする手順の概要

以下に、Active Directory 内に Exchange 2000 または 2003 のメールボックスを有効にしたユーザーを作成する一般的な手順を示します。
  1. ドメイン管理者が、"Active Directory ユーザーとコンピュータ" (ADUnC) スナップインから、または Active Directory サービス インターフェイス (ADSI) を使用するコードから、Active Directory ユーザー オブジェクトを作成し、ユーザー アカウントを有効にします。
  2. 次に、ドメイン管理者が、このユーザーのメールボックスを有効にします。これは、ADUnC から行うか、または Collaboration Data Objects for Exchange Management (CDOEXM) の IMailboxStore インターフェイスを介してプログラムによって行います。この資料の「関連情報」には、IMailboxStore インターフェイスの資料へのリンクが含まれています。プログラムによってユーザー オブジェクトのメールボックスを有効にする方法として、CDOEXM 以外の方法はサポートされていません。

    この 2 つの方法を使用することにより、メールボックスを有効にしたときに、ユーザー オブジェクトに対して msExchMailboxSecurityDescriptor 属性およびその他いくつかの属性が正しく設定されます。この手順では、基本的に、Active Directory 内のユーザー オブジェクトに対し、メール属性およびメールボックス属性のごく一部が設定されます。この時点で、ユーザーのメールボックスは、まだアクセスの準備ができていません。
  3. Exchange 2000 または 2003 サーバー上で実行される受信者更新サービス (RUS) が、その実行スケジュールに従って、このユーザー オブジェクトに対するその他すべてのメール関連属性とメールボックス関連属性を設定します。この時点では、Exchange 2000 または 2003 インフォメーション ストア内にそのユーザーのメールボックスはまだ作成されていません。ただし、ユーザーは完全にメールボックスを使用できる状態になっています。メールボックスにいつでもアクセスすることができます。
  4. ユーザーが初めてメールボックスにアクセスしたとき、またはメールボックスに最初のメッセージがルーティングされたときに、Exchange 2000 または 2003 インフォメーション ストア内に実際のメールボックスが作成されます。Exchange によってユーザーのメールボックスが作成されたこの時点で、ストア内のメールボックスのセキュリティ記述子にメールボックスの権利が設定されます。これは、msExchMailboxSecurityDescriptor 属性に設定されているアクセス制御エントリ (ACE) に基づいて設定されます。

msExchMailboxSecurityDesciptor 属性

この属性は、Active Directory 内のユーザー オブジェクトに存在します。この属性には、ユーザーのメールボックス セキュリティ記述子の部分的なコピーが格納されています。この属性は、ユーザーのメールボックス セキュリティ記述子とは逆リンクしていません。

つまり、Exchange インフォメーション ストア内に実際のメールボックスが作成される前にこの属性を設定しない限り、この属性を直接修正しても、インフォメーション ストア内のユーザーのメールボックス上の実際のセキュリティ記述子は更新されません。

Active Directory 内のユーザー オブジェクトの msExchMailboxSecurityDescriptor 属性に反映されたセキュリティ記述子と、インフォメーション ストア内のユーザーのメールボックスに格納されているセキュリティ記述子との間に矛盾がある場合、Exchange は msExchMailboxSecurityDescriptor 属性の方を修正し、ユーザーのメールボックスのセキュリティ記述子を反映するようにします。ADUnC から、または CDOEXM の IExchangeMailbox インターフェイスによって、ユーザーのメールボックスのセキュリティ記述子を修正した場合には、msExchMailboxSecurityDescriptor 属性が自動的に更新され、変更が反映されます。

msExchMailboxSecurityDescriptor 属性を使用する場合の制限事項

  • この属性に対して行った変更は、インフォメーション ストア内にメールボックスが作成される前にこの属性を設定した場合にのみ、ユーザーのメールボックスのセキュリティ記述子に反映されます。Active Directory 内のメールボックスを有効にしたユーザーに対し、Exchange ストア内に Exchange 2000 および 2003 のメールボックスが作成されるのは、ユーザーが最初にメールボックスにアクセスしたとき、またはこのユーザーに対してメールが送信されたときです。
  • この属性のもう 1 つの制限事項は、実際のメールボックスのセキュリティ記述子の継承された ACE が反映されないことです。したがって、このディレクトリ属性を読み取ることは、ユーザーのメールボックスの権利を読み取るための最も正確な方法ではありません。

msExchMailboxSecurityDescriptor 属性を使用する利点

  • この属性は、Active Directory 内のユーザー オブジェクトに定義されています。このため、ADSI API や LDAP API など、LDAP (Lightweight Directory Access Protocol) に準拠した任意の API を使用してアクセスすることが可能です。
  • このコードは CDOEXM を必要としないため、Microsoft Exchange 2000 および 2003 のシステム管理ツールがインストールされていないサーバーからも実行できます。ただし、インフォメーション ストア内にユーザーのメールボックスが作成される前に、メールボックスの権利を設定する必要があります。また、メールボックスの権利はこのユーザーのメールボックスでいつでも読み取ることができますが、この資料に記載されている制限事項 (「msExchMailboxSecurityDescriptor 属性を使用する場合の制限事項」を参照してください) に注意する必要があります。
インフォメーション ストア内に実際のメールボックスが作成される前に、メールボックスを有効にしたユーザーの msExchMailboxSecurityDescriptor 属性を設定していない場合、インフォメーション ストア内のメールボックスの実際のセキュリティ記述子プロパティには、以下の ACE が含まれません。
  • Self に設定された Trustee プロパティ
  • Full Mailbox Access に設定された Access Mask プロパティ
  • Allow に設定された Read アクセス許可
  • Allow に設定された ACE Type
上記に該当する場合、ユーザーがパブリック フォルダまたはローカル Exchange サーバーの外部にある任意のリソースにアクセスしようとしたときに問題が発生する可能性があります。これは、Exchange 2000 または 2003 のストアに対し、プログラムによって Active Directory ユーザーのメールボックスを有効にする方法として、CDOEXM ライブラリの IMailboxStore インターフェイスのみがサポートされている理由の 1 つです。以下のサンプルは、ADSI および CDOEXM を使用して Active Directory 内にメールボックスを有効にしたユーザー オブジェクトを作成する方法を示しています。その後、msExchMailboxSecurityDescriptor インターフェイスを手動で設定し、コード内に指定されたトラスティを持つ ACE を含めます。このサンプルの目的は、過去にこの属性が正しく設定されていなかった場合に、インフォメーション ストア内でユーザーのメールボックスがアクセスされ、作成される前に、この属性を設定する方法を示すことにあります。

Visual Basic サンプルを実行するための Visual Basic 環境の設定

  1. Exchange 2000 または 2003 サーバー上で Microsoft Visual Basic 6.0 を起動します。
  2. 新規の標準 EXE プロジェクトを作成します。これを行うには、[ファイル] メニューの [新しいプロジェクト] をクリックし、[標準 EXE] をダブルクリックします。
  3. [プロジェクト] メニューの [参照設定] をクリックし、[Active DS Type Library] および [Microsoft CDO for Exchange Management Library] を選択します。
  4. フォームのソース ビューで、以下のコードを入力するか貼り付け、Form_Load() サブルーチンを置き換えます。
  5. 変数 sUserADsPath に設定されている値を、メールボックスの権利を表示または変更する Active Directory ユーザー オブジェクトの LDAP パスに変更します。
: このサンプルは、msExchMailboxSecurityDescriptor 属性に格納されているメールボックスの権利のコピーを読み取る方法を示しています。また、メールボックスの権利を修正する方法と、トラスティとして Self の ACE にフル メールボックス アクセスの ACE を追加する方法も示しています。

Visual Basic のコード

'********************************************************************'*'* Function AddAce(dacl, TrusteeName, gAccessMask, gAceType,'*            gAceFlags, gFlags, gObjectType, gInheritedObjectType)'*'* Purpose: Adds an ACE to a DACL'* Input:       dacl            Object's Discretionary Access Control List'*              TrusteeName     SID or Name of the trustee user account'*              gAccessMask     Access Permissions'*              gAceType        ACE Types'*              gAceFlags       Inherit ACEs from the owner of the ACL'*              gFlags          ACE has an object type or inherited object type'*              gObjectType     Used for Extended Rights'*              gInheritedObjectType'*'* Output:  Object - New DACL with the ACE added'*'********************************************************************Function AddAce(dacl, TrusteeName, gAccessMask, gAceType, gAceFlags, gFlags, gObjectType, gInheritedObjectType)    Dim Ace1    ' Create a new ACE object    Set Ace1 = CreateObject("AccessControlEntry")    Ace1.AccessMask = gAccessMask    Ace1.AceType = gAceType    Ace1.AceFlags = gAceFlags    Ace1.Flags = gFlags    Ace1.Trustee = TrusteeName    'Check to see if ObjectType needs to be set    If CStr(gObjectType) <> "0" Then       Ace1.ObjectType = gObjectType    End If    'Check to see if InheritedObjectType needs to be set    If CStr(gInheritedObjectType) <> "0" Then        Ace1.InheritedObjectType = gInheritedObjectType    End If    dacl.AddAce Ace1    ' Destroy objects    Set Ace1 = NothingEnd FunctionPrivate Sub Form_Load()Dim objContainer As IADsContainerDim objUser As IADsUserDim objMailbox As CDOEXM.IMailboxStoreDim oSecurityDescriptor As SecurityDescriptorDim dacl As AccessControlListDim ace As AccessControlEntry' ********************************************************************' You must change this variable according to your environment'sContainerADsPath = "LDAP://domain.com/cn=Users,DC=domain,DC=com"sUserLoginName = "testUser"sUserFirstName = "Test"sUserLastName = "User"sMBXStoreDN = "CN=Mailbox Store (ExServer),CN=First Storage Group," & _   "CN=InformationStore,CN=ExServer,CN=Servers,CN=AdminGP," & _   "CN=Administrative Groups,CN=Microsoft,CN=Microsoft Exchange," & _   "CN=Services,CN=Configuration,DC=domain,DC=com"sTrustee = "domainName\userName"' ********************************************************************' Get directory container object objectSet objContainer = GetObject(sContainerADsPath)' Create the user object in the target container in Active DirectorySet objUser = objContainer.Create("User", "CN=" & sUserFirstName & " " & _              sUserLastName)objUser.Put "samAccountName", sUserLoginNameobjUser.Put "givenName", sUserFirstNameobjUser.Put "sn", sUserLastNameobjUser.SetInfoobjUser.SetPassword "password"objUser.SetInfo' Mailbox-enable the user object by using the CDOEXM::IMailboxStore ' interface' This also sets the msExchMailboxSecurityDescriptor appropriatelySet objMailbox = objUserobjMailbox.CreateMailbox sMBXStoreDNobjUser.SetInfo'**************************************************************************'  The msExchMailboxSecurityDescriptor attribute is a backlink attribute '   from the Exchange Mailbox in the Web store to the directory. What this'   implies is that the mailbox rights are stored on the actual mailbox in'   the Web store and this directory attribute reflects these mailbox '   rights.'  By default, changing this attribute does not affect the mailbox rights '   in the store. This attribute can only be modified before the actual '   mailbox in the store is created. If it is set before the mailbox in '   the Web store is created, Exchange will use the DACL set on this '   attribute as the DACL for mailbox rights on the mailbox in the store.'   Therefore, it can only be set before the mailbox-creation time.'  On installing Exchange 2000 SP2 on the Exchange Server where this code'   is being run, that would enable modifying the actual mailbox rights '   even after mailbox creation.'**************************************************************************' Get the copy Mailbox Security Descriptor (SD) stored on the' msExchMailboxSecurityDescriptor attributeobjUser.GetInfoEx Array("msExchMailboxSecurityDescriptor"), 0Set oSecurityDescriptor = objUser.Get("msExchMailboxSecurityDescriptor")' Extract the Discretionary Access Control List (ACL) using the ' IADsSecurityDescriptor interfaceSet dacl = oSecurityDescriptor.DiscretionaryAcl''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  The following block of code demonstrates reading all the ACEs on a '  DACL for the Exchange 2000 mailbox.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Debug.Print "Here are the existing ACEs the mailbox's DACL - "' Enumerate all the access control entries (ACEs) in the ACL using ' the IADsAccessControlList interface, thus displaying the current ' mailbox rightsDebug.Print "Trustee, AccessMask, ACEType, ACEFlags, Flags, ObjectType, InheritedObjectType"Debug.Print "-------  ----------  -------  --------  -----  ----------" & _            " -------------------"Debug.PrintFor Each ace In dacl' Display all the ACEs' properties by using the IADsAccessControlEntry ' interface    Debug.Print ace.Trustee & ", " & ace.AccessMask & ", " & _       ace.AceType & ", " & ace.AceFlags & ", " & ace.Flags & ", " & _      ace.ObjectType & ", " & ace.InheritedObjectTypeNext''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  The following block of code demonstrates adding a new ACE to the DACL '  for the Exchange 2000 mailbox with the Trustee specified in sTrustee, '  giving allow "Full Control" over this mailbox.'  This is the same task that is performed by ADUnC when selecting Add, '  specifying the Trustee, and checking the "Full Mailbox Access" Rights '  checkbox under the Mailbox Rights in the Exchange Advanced tab on the '  properties of a user.'  Similarly, you could remove ACEs from this ACL as well using the '  IADsAccessControlEntry interfaces.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Template: AddAce(TrusteeName, gAccessMask, gAceType, gAceFlags, gFlags, gObjectType, gInheritedObjectType)' Setting the Access Mask to 131075 enables "full mailbox access" and ' "read" privilegesAddAce dacl, sTrustee, 131075, _       ADS_ACETYPE_ACCESS_ALLOWED, ADS_ACEFLAG_INHERIT_ACE, 0, 0, 0' Add the modified DACL back onto the Security DescriptoroSecurityDescriptor.DiscretionaryAcl = dacl' Save New SD onto the userobjUser.Put "msExchMailboxSecurityDescriptor", oSecurityDescriptor' Commit changes from the property cache to the Information StoreobjUser.SetInfoMsgBox "Done viewing and modifying the copy of the Mailbox Security Descriptor"End Sub				

Visual Basic スクリプトのコード

Dim objContainerDim objUserDim objMailboxDim oSecurityDescriptorDim daclDim ace' ********************************************************************' You must change this variable according to your environment'sContainerADsPath = "LDAP://domain.com/cn=Users,DC=domain,DC=com"sUserLoginName = "testUser"sUserFirstName = "Test"sUserLastName = "User"sMBXStoreDN = "CN=Mailbox Store (ExServer),CN=First Storage Group," & _   "CN=InformationStore,CN=ExServer,CN=Servers,CN=AdminGP," & _   "CN=Administrative Groups,CN=Microsoft,CN=Microsoft Exchange," & _   "CN=Services,CN=Configuration,DC=domain,DC=com"sTrustee = "domainName\userName"' ********************************************************************' Get directory container object objectSet objContainer = GetObject(sContainerADsPath)' Create the user object in the target container in Active DirectorySet objUser = objContainer.Create("User", "CN=" & sUserFirstName & " " & _              sUserLastName)objUser.Put "samAccountName", sUserLoginNameobjUser.Put "givenName", sUserFirstNameobjUser.Put "sn", sUserLastNameobjUser.SetInfoobjUser.SetPassword "password"objUser.SetInfo' Mailbox enable the user object by using the CDOEXM::IMailboxStore ' interface' This also sets the msExchMailboxSecurityDescriptor appropriatelySet objMailbox = objUserobjMailbox.CreateMailbox sMBXStoreDNobjUser.SetInfo'**************************************************************************'  The msExchMailboxSecurityDescriptor attribute is a backlink attribute '   from the Exchange Mailbox in the Web Store to the directory. What this'   implies is that the mailbox rights are stored on the actual mailbox in'   the Web store and this directory attribute reflects these mailbox '   rights.'  By default, changing this attribute does not affect the mailbox rights '   in the store. This attribute can only be modified before the actual '   mailbox in the store is created. If it is set before the mailbox in '   the Web store is created, Exchange will use the DACL set on this '   attribute as the DACL for mailbox rights on the mailbox in the store.'   Therefore, it can only be set before the mailbox creation time.'  On installing Exchange 2000 SP2 on the Exchange Server where this code'   is being run, that would enable modifying the actual mailbox rights '   even after mailbox creation.'**************************************************************************' Get the copy Mailbox Security Descriptor (SD) stored on the' msExchMailboxSecurityDescriptor attributeobjUser.GetInfoEx Array("msExchMailboxSecurityDescriptor"), 0Set oSecurityDescriptor = objUser.Get("msExchMailboxSecurityDescriptor")' Extract the Discretionary Access Control List (ACL) using the ' IADsSecurityDescriptor interfaceSet dacl = oSecurityDescriptor.DiscretionaryAcl''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  The following block of code demonstrates reading all the ACEs on a '  DACL for the Exchange 2000 mailbox.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Wscript.echo "Here are the existing ACEs the mailbox's DACL - "' Enumerate all the access control entries (ACEs) in the ACL using ' the IADsAccessControlList interface, thus displaying the current ' mailbox rightsWscript.echo "Trustee, AccessMask, ACEType, ACEFlags, Flags, ObjectType, InheritedObjectType"Wscript.echo "-------  ----------  -------  --------  -----  ----------" & _            " -------------------"Wscript.echoFor Each ace In dacl' Display all the ACEs' properties using the IADsAccessControlEntry ' interface    Wscript.echo ace.Trustee & ", " & ace.AccessMask & ", " & _       ace.AceType & ", " & ace.AceFlags & ", " & ace.Flags & ", " & _      ace.ObjectType & ", " & ace.InheritedObjectTypeNext''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  The following block of code demonstrates adding a new ACE to the DACL '  for the Exchange 2000 mailbox with the Trustee specified in sTrustee, '  giving allow "Full Control" over this mailbox.'  This is the same task that is performed by ADUnC when selecting Add, '  specifying the Trustee, and checking the "Full Mailbox Access" Rights '  checkbox under the Mailbox Rights in the Exchange Advanced tab on the '  properties of a user.'  Similarly, you could remove ACEs from this ACL as well using the '  IADsAccessControlEntry interfaces.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Template: AddAce(TrusteeName, gAccessMask, gAceType, gAceFlags, gFlags, gObjectType, gInheritedObjectType)' Setting the Access Mask to 131075 enables "full mailbox access" and ' "read" priviledgesAddAce dacl, sTrustee, 131075, _       ADS_ACETYPE_ACCESS_ALLOWED, ADS_ACEFLAG_INHERIT_ACE, 0, 0, 0' Add the modified DACL back onto the Security DescriptoroSecurityDescriptor.DiscretionaryAcl = dacl' Save New SD onto the userobjUser.Put "msExchMailboxSecurityDescriptor", oSecurityDescriptor' Commit changes from the property cache to the information storeobjUser.SetInfoMsgBox "Done viewing and modifying the copy of the Mailbox Security Descriptor"'********************************************************************'*'* Function AddAce(dacl, TrusteeName, gAccessMask, gAceType,'*            gAceFlags, gFlags, gObjectType, gInheritedObjectType)'*'* Purpose: Adds an ACE to a DACL'* Input:       dacl            Object's Discretionary Access Control List'*              TrusteeName     SID or Name of the trustee user account'*              gAccessMask     Access Permissions'*              gAceType        ACE Types'*              gAceFlags       Inherit ACEs from the owner of the ACL'*              gFlags          ACE has an object type or inherited object type'*              gObjectType     Used for Extended Rights'*              gInheritedObjectType'*'* Output:  Object - New DACL with the ACE added'*'********************************************************************Function AddAce(dacl, TrusteeName, gAccessMask, gAceType, gAceFlags, gFlags, gObjectType, gInheritedObjectType)    Dim Ace1    ' Create a new ACE object    Set Ace1 = CreateObject("AccessControlEntry")    Ace1.AccessMask = gAccessMask    Ace1.AceType = gAceType    Ace1.AceFlags = gAceFlags    Ace1.Flags = gFlags    Ace1.Trustee = TrusteeName    'Check to see if ObjectType needs to be set    If CStr(gObjectType) <> "0" Then       Ace1.ObjectType = gObjectType    End If    'Check to see if InheritedObjectType needs to be set    If CStr(gInheritedObjectType) <> "0" Then        Ace1.InheritedObjectType = gInheritedObjectType    End If    dacl.AddAce Ace1    ' Destroy objects    Set Ace1 = NothingEnd Function				
関連情報
CDOEXM IMailboxStore::CreateMailbox の詳細については、以下の MSDN (Microsoft Developer Network) Web サイトを参照してください。ADSI のセキュリティ関連インターフェイスの詳細については、以下の MSDN Web サイトを参照してください。Adssecurity.dll は、Active Directory サービス インターフェイス (ADSI) 2.5 リソース キットに含まれています。ADSI 2.5 リソース キットをダウンロードするには、次のマイクロソフト Web サイトを参照してください。ADsSecurity.dll を登録するには、Regsvr32 を使用します。関連付けられた外部アカウントの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
278888 Exchange 2000 メールボックスまたは Exchange 2003 メールボックスを Windows NT 4.0 アカウントに関連付ける方法
プロパティ

文書番号:304935 - 最終更新日: 01/15/2007 09:08:00 - リビジョン: 7.2

Microsoft Exchange Server 2003 Standard Edition, Microsoft Exchange 2000 Server Standard Edition, Microsoft Windows Server 2003, Standard Edition (32-bit x86), Microsoft Windows 2000 Server, Microsoft Active Directory Service Interfaces 2.5, Microsoft Collaboration Data Objects for Exchange Management 1.1

  • kbhowto kbdswadsi2003swept KB304935
フィードバック