كيفية تعديل أذونات المجلد Exchange باستخدام واجهة IExchangeModifyTable MAPI

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية297493
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
يتم تخزين أذونات المجلد العامة والخاصة ملقم Exchange في قائمة التحكم بالوصول (ACL) جدول الكائنات التي يمكن الوصول إليها باستخدام واجهة IExchangeModifyTable. يوضح هذا المقال كيفية إضافة أو تعديل أو إزالة أذونات المستخدم باستخدام هذه الواجهة.
معلومات أخرى
يمكنك استخدام الأسلوب IExchangeModifyTable::ModifyTable لتغيير أذونات المستخدم من أجل مجلدات Exchange. تأخذ ModifyTable بنية ROWLIST الذي يحتوي على صفيف بنيات ROWENTRY يمثل الصفوف في الجدول و العمليات على تلك الصفوف. في بنية ROWENTRY يجب عليك تحديد بتنفيذ في الحقل ulRowFlags العملية. يجب أيضًا تحديد صفيف بنيات SPropValue تمثل القيم الأعمدة المراد إدراجها في الجدول. على سبيل المثال:
  • لإضافة مستخدم إذن تعيين ulRowFlags إلى ROW_ADD ثم تحديد PR_MEMBER_ENTRYID ومسارات PR_MEMBER_RIGHTS SPropValue.
  • لتعديل مستخدم إذن تعيين ulRowFlags إلى ROW_MODIFY ثم تحديد PR_MEMBER_ID ومسارات PR_MEMBER_RIGHTS SPropValue.
  • لإزالة مستخدم إذن تعيين ulRowFlags إلى ROW_REMOVE وحدد PR_MEMBER_ID لـ SPropValue.

نموذج التعليمات البرمجية

تقدم Microsoft الأمثلة البرمجية فقط دون أي ضمان التعبير عن أو ضمنية ، ، لا الحصر إلى ضمانات القابلية للتسويق و/أو الملاءمة لغرض معين. تفترض هذه المقالة أنك معتاد على لغة البرمجة التي تم شرحها والأدوات المستخدمة لإنشاء الإجراءات وتصحيحها. يمكن أن يساعد إخصائيي الدعم Microsoft شرح وظيفة إجراء محدد ولكن لن يقوموا بتعديل هذه الأمثلة لتقديم وظيفة إضافية أو إنشاء إجراءات لتلبية احتياجاتك المحددة.
إذا كان يجب أن يكون لديك خبرة محدودة في مجال البرمجة، قد تحتاج إلى الاتصال بشريك Microsoft أو خدمات النصائح. لمزيد من المعلومات، قم بزيارة مواقع ويب Microsoft هذه:

Microsoft المعتمدين Partners – https://partner.microsoft.com/global/30000104

خدمات Microsoft المستند الذي يقدم النصائح - http://support.microsoft.com/gp/advisoryservice

للحصول على مزيد من المعلومات حول خيارات الدعم المتوفرة وحول كيفية الاتصال بشركة Microsoft قم بزيارة موقع Microsoft التالي على الويب: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSلتشغيل "نموذج التعليمة البرمجية" ، اتبع الخطوات التالية:
  1. إنشاء مشروع فارغ جديد باستخدام AppWizard التطبيق Win32 وحدة التحكم, ثم اسم "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. في دالة الرئيسي استبدال المعلمة الأولى استدعاء AddUserPermission مع مستخدم الاسم المستعار الذي تريد إضافة الإذن واستبدال المعلمة الأولى إلى كل من ModifyPermission ثم المكالمات RemovePermission اسم العرض الخاص بالمستخدم.
  6. في دالة AddUserPermission استبدال szServerDN لعكس اسم المؤسسة Exchange و اسم الموقع.
  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/28/2014 04:27:45 - المراجعة: 5.6

Microsoft Exchange Server 5.5 Standard Edition, Microsoft Exchange 2000 Server Standard Edition, واجهة برمجة تطبيقات الرسائل من Microsoft

  • kbnosurvey kbarchive kbmt kbhowto kbmsg KB297493 KbMtar
تعليقات