Estabelecendo um contexto de cliente com o Gerenciador de Autorização no C++
No Gerenciador de Autorização, um aplicativo determina se um cliente recebe acesso a uma operação chamando o método AccessCheck de um objeto IAzClientContext, que representa um contexto de cliente.
Um aplicativo pode criar um contexto de cliente com um identificador para um token, um domínio e um nome de usuário ou uma representação de cadeia de caracteres do identificador de segurança (SID) do cliente.
Use os métodos InitializeClientContextFromToken, InitializeClientContextFromNamee InitializeClientContextFromStringSid da interface IAzApplication para criar um contexto de cliente.
O exemplo a seguir mostra como criar um objeto IAzClientContext de um token de cliente. O exemplo pressupõe que há um repositório de política XML existente chamado MyStore.xml no diretório raiz da unidade C, que este repositório contém um aplicativo chamado Expense e que a variável hToken contém um token de cliente válido.
#include <windows.h>
void ExpenseCheck(ULONGLONG hToken)
{
IAzAuthorizationStore* pStore = NULL;
IAzApplication* pApp = NULL;
IAzClientContext* pClientContext = NULL;
BSTR storeName = NULL;
BSTR appName = NULL;
HRESULT hr;
void MyHandleError(char *s);
// Create a null VARIANT for function parameters.
VARIANT myVar;
VariantInit(&myVar);
// Initialize COM.
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize COM.");
// Create the AzAuthorizationStore object.
hr = CoCreateInstance(
/*"b2bcff59-a757-4b0b-a1bc-ea69981da69e"*/
__uuidof(AzAuthorizationStore),
NULL,
CLSCTX_ALL,
/*"edbd9ca9-9b82-4f6a-9e8b-98301e450f14"*/
__uuidof(IAzAuthorizationStore),
(void**)&pStore);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create AzAuthorizationStore object.");
// Allocate a string for the policy store.
if(!(storeName = SysAllocString(L"msxml://c:\\MyStore.xml")))
MyHandleError("Could not allocate string.");
// Initialize the store.
hr = pStore->Initialize(0, storeName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize store.");
// Create an application object.
if (!(appName = SysAllocString(L"Expense")))
MyHandleError("Could not allocate application name string.");
hr = pStore->OpenApplication(appName, myVar, &pApp);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not open application.");
// Create a client context from a token handle.
hr = pApp->InitializeClientContextFromToken(hToken, myVar,
&pClientContext);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create client context.");
// Use the client context as needed.
// Clean up resources.
pStore->Release();
pApp->Release();
pClientContext->Release();
SysFreeString(storeName);
SysFreeString(appName);
VariantClear(&myVar);
CoUninitialize();
}
void MyHandleError(char *s)
{
printf("An error occurred in running the program.\n");
printf("%s\n",s);
printf("Error number %x\n.",GetLastError());
printf("Program terminating.\n");
exit(1);
}