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

MAPI IExchangeModifyTable インターフェイスを使用して Exchange フォルダーのアクセス許可を変更する方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:297493
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
概要
Exchange サーバーに対してプライベートおよびパブリック フォルダー権限は、 IExchangeModifyTable インターフェイスを使用してアクセスできるアクセス制御リスト (ACL) テーブル オブジェクトに格納されます。 ここを追加、変更、またはこのインターフェイスを使用してユーザーのアクセス許可を削除する方法について説明します。
詳細
Exchange フォルダーのユーザー アクセス許可の変更、 IExchangeModifyTable::ModifyTable メソッドを使えます。 ModifyTable は、テーブルとそれらの行に対して実行される処理の行を表す ROWENTRY 構造体の配列を含む ROWLIST 構造体、します。 ROWENTRY 構造で ulRowFlags フィールドで実行される操作を指定してください。 テーブルに挿入される列の値を表す SPropValue 構造体の配列を指定する必要も。 たとえば。
  • ユーザー アクセス許可を追加、 ulRowFlags ROW_ADD に設定し、 SPropValue の PR_MEMBER_ENTRYID と PR_MEMBER_RIGHTS を指定します。
  • ユーザー アクセス許可を変更、 ulRowFlags ROW_MODIFY に設定し、 SPropValue の PR_MEMBER_ID と PR_MEMBER_RIGHTS を指定します。
  • ユーザー アクセス許可を削除するには、を ROW_REMOVE、 ulRowFlags を設定して、 SPropValue の PR_MEMBER_ID を指定します。

サンプル コード

マイクロソフトは提供プログラミング言語の使用方法の一例としてのみ、姿表現または明示、黙示、黙示または商品性および特定目的に対する適合性に限らずなどです。 この資料は、例示されているプログラミング言語やプロシージャの作成およびデバッグに使用するツールについて理解されているユーザーを対象としています。 Microsoft Support 担当者は、特定のプロシージャの機能についての問い合わせにはお答えできますが、ユーザー固有の目的に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。
プログラミング経験がいない場合、マイクロソフト アドバイザリー サービスのマイクロソフト認定パートナーを連絡することがあります。 詳細については、これらのマイクロソフト Web サイトを参照してください。

マイクロソフト認定パートナー - https://partner.microsoft.com/global/30000104

Microsoft のアドバイザリ サービス - http://support.microsoft.com/gp/advisoryservice

使用可能なサポート オプションおよびマイクロソフトに連絡する方法についての詳細については、次のマイクロソフト Web サイトを参照してください: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSサンプルを実行するには、次の手順を実行します:
  1. Win32 コンソール アプリケーション AppWizard を使用して、新しい空プロジェクト作成し、"ModifyTable"という名前です。
  2. プロジェクトに新しい C++ ソース ファイルを追加し、"ModifyTable.cpp"を名前します。
  3. ModifyTable.cpp に次のコードを貼り付けます
    #include <windows.h>#include <stdio.h>#include "edk.h"typedef enum ACLRIGHTS    {  RIGHTS_EDIT_OWN = 0x8, RIGHTS_EDIT_ALL = 0x20, RIGHTS_DELETE_OWN = 0x10, RIGHTS_DELETE_ALL = 0x40, RIGHTS_READ_ITEMS = 0x1, RIGHTS_CREATE_ITEMS = 0x2, RIGHTS_CREATE_SUBFOLDERS = 0x80, RIGHTS_FOLDER_OWNER = 0x100, RIGHTS_FOLDER_CONTACT = 0x200, RIGHTS_FOLDER_VISIBLE = 0x400, RIGHTS_NONE = 0, ROLE_OWNER = 0x5e3, ROLE_PUBLISH_EDITOR = 0x4e3, ROLE_EDITOR = 0x463, ROLE_PUBLISH_AUTHOR = 0x49b, ROLE_AUTHOR = 0x41b, ROLE_NONEDITING_AUTHOR = 0x413, ROLE_REVIEWER = 0x401, ROLE_CONTRIBUTOR = 0x402, ROLE_NONE = 0x400    } ACLRIGHTS;enum {    ePR_MEMBER_ENTRYID,     ePR_MEMBER_RIGHTS,      ePR_MEMBER_ID,     ePR_MEMBER_NAME,     NUM_COLS};SizedSPropTagArray(NUM_COLS, rgPropTag) ={    NUM_COLS,    {        PR_MEMBER_ENTRYID,  // Unique across directory.        PR_MEMBER_RIGHTS,          PR_MEMBER_ID,       // Unique within ACL table.         PR_MEMBER_NAME,     // Display name.    }};STDMETHODIMP AddUserPermission(   LPSTR szUserAlias,    LPMAPISESSION lpSession,   LPEXCHANGEMODIFYTABLE lpExchModTbl,    ACLRIGHTS frights);STDMETHODIMP ModifyUserPermission(   LPSTR szDisplayName,    LPEXCHANGEMODIFYTABLE lpExchModTbl,    ACLRIGHTS frights);STDMETHODIMP RemoveUserPermission(   LPSTR szDisplayName,    LPEXCHANGEMODIFYTABLE lpExchModTbl);void  main(){ HRESULT               hr = NULL; LPMAPISESSION         lpSession = NULL; LPMDB                 lpPubStore = NULL; LPMAPIFOLDER          lpPubFolder = NULL; LPMAPIFOLDER          lpMyFolder = NULL; LPEXCHANGEMODIFYTABLE lpExchModTbl= NULL;   hr = MAPIInitialize(NULL); if (FAILED(hr)) return; hr = MAPILogonEx(0,      NULL,      NULL,      MAPI_LOGON_UI | MAPI_NEW_SESSION,      &lpSession); if (FAILED(hr)) goto cleanup0;   // Open public folder store. hr = HrOpenExchangePublicStore(lpSession,                             &lpPubStore); if (FAILED(hr)) goto cleanup;  // Open all public folders. hr = HrOpenExchangePublicFolders(lpPubStore,                                 &lpPubFolder);   if (FAILED(hr)) goto cleanup;  // Replace with your public folder name. hr = HrMAPIOpenSubfolderEx(lpPubFolder,                          '\\',                         "\\MyFolder",                          &lpMyFolder); if (FAILED(hr)) goto cleanup; hr = lpMyFolder->OpenProperty(PR_ACL_TABLE,                              &IID_IExchangeModifyTable,                              0,                              MAPI_DEFERRED_ERRORS,                              (LPUNKNOWN*)&lpExchModTbl);    if(FAILED(hr)) goto cleanup; // Replace first parameter with user alias. // Add user with publishing author rights. hr = AddUserPermission(   "userone",    lpSession,   lpExchModTbl,    ROLE_PUBLISH_AUTHOR);   // Replace first parameter with user display name. // Modify user to have reviewer rights. hr = ModifyUserPermission(   "User One",    lpExchModTbl,    ROLE_REVIEWER); // Replace first parameter with user display name. // Remove user rights. hr = RemoveUserPermission(   "User One",    lpExchModTbl);cleanup: if (lpExchModTbl)   lpExchModTbl->Release();  if (lpMyFolder)  lpMyFolder->Release(); if (lpPubFolder)  lpPubFolder->Release(); if (lpPubStore)  lpPubStore->Release(); lpSession->Logoff(0, MAPI_LOGOFF_UI, 0); lpSession->Release();cleanup0: MAPIUninitialize();  return; }STDMETHODIMP AddUserPermission(   LPSTR szUserAlias,    LPMAPISESSION lpSession,   LPEXCHANGEMODIFYTABLE lpExchModTbl,    ACLRIGHTS frights){ HRESULT     hr = S_OK; LPADRBOOK   lpAdrBook;   ULONG       cbEid; LPENTRYID   lpEid = NULL; SPropValue  prop[2] = {0}; ROWLIST     rowList  = {0};  char szExName[MAX_PATH];  // Replace with "/o=OrganizationName/ou=SiteName/cn=Recipients/cn=" char* szServerDN = "/o=org/ou=site/cn=Recipients/cn="; strcpy(szExName, szServerDN); strcat(szExName, szUserAlias); // Open the address book. hr = lpSession->OpenAddressBook(0,                                 0,                                  MAPI_ACCESS_MODIFY,                                  &lpAdrBook ); if ( FAILED( hr ) ) goto cleanup; // Obtain the entry ID for the recipient. hr = HrCreateDirEntryIdEx(lpAdrBook,                            szExName,                            &cbEid,                            &lpEid); if ( FAILED( hr ) ) goto cleanup;  prop[0].ulPropTag  = PR_MEMBER_ENTRYID; prop[0].Value.bin.cb = cbEid; prop[0].Value.bin.lpb = (BYTE*)lpEid; prop[1].ulPropTag  = PR_MEMBER_RIGHTS; prop[1].Value.l   = frights; rowList.cEntries = 1; rowList.aEntries->ulRowFlags = ROW_ADD; rowList.aEntries->cValues  = 2; rowList.aEntries->rgPropVals = &prop[0];  hr = lpExchModTbl->ModifyTable(0, &rowList); if(FAILED(hr)) goto cleanup; printf("Added user permission. \n");cleanup: if (lpAdrBook)  lpAdrBook->Release(); return hr;}STDMETHODIMP ModifyUserPermission(   LPSTR szDisplayName,    LPEXCHANGEMODIFYTABLE lpExchModTbl,    ACLRIGHTS frights){ HRESULT      hr = S_OK; LPMAPITABLE  lpMapiTbl = NULL; ULONG        ulFlagsTable = 0; ULONG        lpulCount = NULL; LPSRowSet    pRows = NULL; UINT         i = 0; SPropValue   prop[2] = {0}; ROWLIST      rowList  = {0}; BOOLEAN      bFound = false;  // Retrieve MAPI table.  hr = lpExchModTbl->GetTable(0,                          &lpMapiTbl); if (FAILED(hr)) goto cleanup; hr = lpMapiTbl->GetRowCount(ulFlagsTable,                          &lpulCount); if (FAILED(hr)) goto cleanup;  hr = lpMapiTbl->SetColumns((LPSPropTagArray)&rgPropTag,                             0 ); if (FAILED(hr)) goto cleanup; hr = HrQueryAllRows(lpMapiTbl,                     NULL,                      NULL,                      NULL,                      lpulCount,                     &pRows); if (FAILED(hr)) goto cleanup; for (i = 0; i < pRows -> cRows; i++) {  if(PR_MEMBER_NAME == pRows ->aRow[i].lpProps[ePR_MEMBER_NAME].ulPropTag)  {   if (!strcmp(pRows -> aRow[i].lpProps[ePR_MEMBER_NAME].Value.lpszA, szDisplayName))   {    bFound = true;    if (PR_MEMBER_ID == pRows -> aRow[i].lpProps[ePR_MEMBER_ID].ulPropTag)    {     prop[0].ulPropTag  = PR_MEMBER_ID;     prop[0].Value.bin.cb = pRows -> aRow[i].lpProps[ePR_MEMBER_ID].Value.bin.cb;     prop[0].Value.bin.lpb = (BYTE*)pRows -> aRow[i].lpProps[ePR_MEMBER_ID].Value.bin.lpb;     prop[1].ulPropTag  = PR_MEMBER_RIGHTS;     prop[1].Value.l   = frights;     rowList.cEntries    = 1;     rowList.aEntries->ulRowFlags = ROW_MODIFY;     rowList.aEntries->cValues  = 2;     rowList.aEntries->rgPropVals = &prop[0];          hr = lpExchModTbl->ModifyTable(0, &rowList);     if(FAILED(hr)) goto cleanup;     printf("Modified user permission.\n");    }   }  } } if (!bFound)  printf("User not there, no need to modify ...\n");cleanup: if (lpMapiTbl)   lpMapiTbl->Release(); if (pRows)  FreeProws(pRows); return hr;}STDMETHODIMP RemoveUserPermission(   LPSTR szDisplayName,    LPEXCHANGEMODIFYTABLE lpExchModTbl){ HRESULT      hr = S_OK; LPMAPITABLE  lpMapiTbl = NULL; ULONG        ulFlagsTable = 0; ULONG        lpulCount = NULL; LPSRowSet    pRows = NULL; UINT         i = 0; SPropValue   prop[1] = {0}; ROWLIST      rowList  = {0}; BOOLEAN      bFound = false;  // Retrieve MAPI table. hr = lpExchModTbl->GetTable(0,                           &lpMapiTbl); if (FAILED(hr)) goto cleanup; hr = lpMapiTbl->GetRowCount(ulFlagsTable,                          &lpulCount); if (FAILED(hr)) goto cleanup;  hr = lpMapiTbl->SetColumns((LPSPropTagArray)&rgPropTag,                            0 ); if (FAILED(hr)) goto cleanup; hr = HrQueryAllRows(lpMapiTbl,                     NULL,                      NULL,                      NULL,                      lpulCount,                     &pRows); if (FAILED(hr)) goto cleanup; for (i = 0; i < pRows -> cRows; i++) {  if(PR_MEMBER_NAME == pRows -> aRow[i].lpProps[ePR_MEMBER_NAME].ulPropTag)  {   if (!strcmp(pRows -> aRow[i].lpProps[ePR_MEMBER_NAME].Value.lpszA, szDisplayName))   {    printf("Found User to remove\n");    bFound = true;    if (PR_MEMBER_ID == pRows -> aRow[i].lpProps[ePR_MEMBER_ID].ulPropTag)    {     prop[0].ulPropTag  = PR_MEMBER_ID;     prop[0].Value.bin.cb = pRows -> aRow[i].lpProps[ePR_MEMBER_ID].Value.bin.cb;     prop[0].Value.bin.lpb = (BYTE*)pRows -> aRow[i].lpProps[ePR_MEMBER_ID].Value.bin.lpb;     rowList.cEntries    = 1;     rowList.aEntries->ulRowFlags = ROW_REMOVE;     rowList.aEntries->cValues  = 1;     rowList.aEntries->rgPropVals = &prop[0];         hr = lpExchModTbl->ModifyTable(0,                                 &rowList);     if(FAILED(hr)) goto cleanup;     printf("Removed user permission. \n");    }   }  } } if (!bFound)  printf("User not there, no need to remove. \n");cleanup: if (lpMapiTbl)   lpMapiTbl->Release(); if (pRows)  FreeProws(pRows); return hr;}
  4. メイン 関数で MyFolder [すべてのパブリック フォルダーの下にあるパブリック フォルダー名に置き換えます。
  5. メイン 関数で、ユーザーの表示名、エイリアスをする、アクセス許可を追加して、両方の ModifyPermission を最初のパラメーターの置換をユーザーに AddUserPermission の呼び出しと RemovePermission の呼び出し、最初のパラメーターを置き換えます。
  6. AddUserPermission 関数で、Exchange 組織名とサイト名を反映する szServerDN を置き換えます。
  7. [ プロジェクト ] メニューの [ 設定 ] をクリックし、[ リンク ] タブ。 オブジェクト/ライブラリ モジュール ] で edkutils.lib exchsdk.lib mapi32.lib msvcrt.lib kernel32.lib version.lib user32.lib と advapi32.lib を追加します。 すべての既定のライブラリを無視する をクリックします。
  8. コンパイルし、[プロジェクトをビルドします。
  9. メイン 関数で、AddUserPermission、ModifyPermission、RemovePermission の呼び出しにブレークポイントを置きます。
  10. 、デバッグを開始する F5 を押しますが表示されたら、プロファイル名を選択します。
  11. 最初のブレークポイントに達した F10 キーを押してください。 「発行作成者」権限を持つユーザーのアクセス許可が追加されたことを確認する Microsoft Outlook からフォルダー アクセス許可をチェックします。
  12. ここでも、F10 キーを押し、ユーザーのアクセス許可が「参照者」に変更されたことを確認します。
  13. ここでも、F10 キーを押し、ユーザーのアクセス許可が削除されることを確認します。
IExchangeModifyTable ModifyTable

警告: この記事は自動翻訳されています

プロパティ

文書番号:297493 - 最終更新日: 02/24/2014 15:32:48 - リビジョン: 5.6

Microsoft Exchange Server 5.5 Standard Edition, Microsoft Exchange 2000 Server Standard Edition, Microsoft Messaging Application Programming Interface

  • kbnosurvey kbarchive kbhowto kbmsg kbmt KB297493 KbMtja
フィードバック