MAPI IExchangeModifyTable arabirimini kullanarak Exchange klasör izinlerini değiştirme

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

297493
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Özet
Bir Exchange sunucusuna özel ve ortak klasörün izinlerini IExchangeModifyTable arabirimi kullanılarak erişilebilen Erişim Denetim Listesi'ni (ACL) tablo nesnelerinde depolanır. Bu makalede, eklemek, değiştirmek veya bu arabirimi kullanarak kullanıcı izinlerini kaldırmak gösterilmiştir.
Daha fazla bilgi
IExchangeModifyTable::ModifyTable yöntemi, Exchange klasörleri kullanıcı izinlerini değiştirmek için kullanabilirsiniz. ModifyTable satırları üzerinde gerçekleştirilen işlemleri ve bir tablodan satır temsil eden ROWENTRY yapıları dizisi içeren bir ROWLIST yapısı alır. ROWENTRY yapısında, ulRowFlags alanda gerçekleştirilecek işlemi belirtmeniz gerekir. Ayrıca, bir tabloya eklenecek sütunları değerlerini gösteren SPropValue yapıları dizisi belirtmeniz gerekir. Örneğin,:
  • Bir kullanıcı izin eklemek için <a0></a0>, ulRowFlags ROW_ADD için ayarlanan ve PR_MEMBER_ENTRYID ve PR_MEMBER_RIGHTS SPropValue için belirtin.
  • Kullanıcı bir izni değiştirmek için <a0></a0>, ulRowFlags ROW_MODIFY için ayarlanan ve PR_MEMBER_ID ve PR_MEMBER_RIGHTS SPropValue için belirtin.
  • Bir kullanıcı izni kaldırmak için <a0></a0>, ulRowFlags ROW_REMOVE için ayarlanan ve PR_MEMBER_ID SPropValue için belirtin.

Örnek kod

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; satılabilirlik ve/veya belirli bir amaca uygunluk da dahil, ancak bununla sınırlı olmamak kaydıyla, örtülü veya açık garanti vermez. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek uzmanları, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler.
Programlama deneyiminiz kısıtlıysa, bir Microsoft Sertifikalı İş Ortağı'na veya Microsoft Danışmanlık Hizmetleri'ne başvurabilirsiniz. Daha fazla bilgi için şu Microsoft Web sitelerini ziyaret edin:

Microsoft Partner - https://partner.microsoft.com/global/30000104 Onaylandı

Microsoft danışma belgesi Hizmetleri - http://support.microsoft.com/gp/advisoryservice

Kullanılabilir destek seçenekleri ve Microsoft'a başvurma konusunda daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSÖrnek kod çalıştırmak için şu adımları izleyin:
  1. Win32 Console Application AppWizard kullanarak, yeni, boş bir proje oluşturun ve "ModifyTable" olarak adlandırın.
  2. Yeni bir C++ kaynak dosyası projeye ekleyin ve "ModifyTable.cpp" olarak adlandırın.
  3. Aşağıdaki kodu ModifyTable.cpp yapıştırın.
    #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. Ana işlevi, Klasörüm tüm ortak klasörler altında ortak klasör adla değiştirin.
  5. Ana işlevi, kullanıcı diğer adı, izin eklemek ve her iki ModifyPermission ilk parametreyi değiştirmek istediğiniz AddUserPermission çağrısıyla ve RemovePermission çağrıları ilk parametre ile kullanıcının görünen adını değiştirin.
  6. AddUserPermission işlevinde szServerDN Exchange Kuruluş adınızı ve site adını yansıtacak şekilde değiştirin.
  7. Proje menüsünde Ayarlar ' ı tıklatın ve sonra da bağlantı sekmesini tıklatın. Nesne/Kitaplığı modülleri, edkutils.lib exchsdk.lib mapi32.lib msvcrt.lib kernel32.lib version.lib user32.lib ve advapi32.lib ekleyin. Tüm varsayılan kitaplıkları Yoksay ' ı seçmek için tıklatın.
  8. Derleme ve sonra Projeyi derleyin.
  9. Kesme noktaları ana işlevi AddUserPermission ModifyPermission ve RemovePermission çağrılarında yerleştirin.
  10. Hata Ayıklaması'nı başlatmak için F5 tuşuna basın ve istendiğinde profil adı seçin.
  11. Ilk kesme ulaşıldığında, F10 tuşuna basın. "Publishing Yazar" izni olan kullanıcı izni eklendiğini doğrulamak için Microsoft Outlook klasör iznini denetleyin.
  12. F10 tuşuna yeniden basın ve sonra da kullanıcının iznini "Gözden geçirici için" değiştirildiğinde doğrulayın.
  13. F10 tuşuna yeniden basın ve sonra da kullanıcının iznini kaldırıldığını doğrulayın.
IExchangeModifyTable ModifyTable

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 297493 - Son İnceleme: 02/24/2014 17:48:43 - Düzeltme: 5.6

  • Microsoft Exchange Server 5.5 Standard Edition
  • Microsoft Exchange 2000 Server Standard Edition
  • Microsoft Messaging Application Programming Interface
  • kbnosurvey kbarchive kbmt kbhowto kbmsg KB297493 KbMttr
Geri bildirim