J'ai étendu l'interface MAPI win32comext avec l'interface IExchangeModifyTable pour modifier les ACL via l'interface MAPI. Je peux modifier les entrées ACL existantes, mais je me suis contenté d'ajouter de nouvelles entrées. J'ai besoin de l'ID d'entrée des utilisateurs d'ajouter, selon cet exemple CRécupération des ID d'entrée utilisateur à partir de MAPI
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;
}
Je peux ouvrir le carnet d'adresses, mais HrCreateDirEntryIdEx n'est pas fourni dans le mapi de pywin32. Je l'ai trouvé dans l'extension d'échange, qui ne compile pas sur mon système, le problème de bibliothèque manquant. Avez-vous une idée pour récupérer l'ID d'utilisateur?
Merci.
- Patrick