estrutura ACTIVATION_CONTEXT_DETAILED_INFORMATION (winnt.h)
A estrutura ACTIVATION_CONTEXT_DETAILED_INFORMATION é usada pela função QueryActCtxW .
Sintaxe
typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
DWORD dwFlags;
DWORD ulFormatVersion;
DWORD ulAssemblyCount;
DWORD ulRootManifestPathType;
DWORD ulRootManifestPathChars;
DWORD ulRootConfigurationPathType;
DWORD ulRootConfigurationPathChars;
DWORD ulAppDirPathType;
DWORD ulAppDirPathChars;
PCWSTR lpRootManifestPath;
PCWSTR lpRootConfigurationPath;
PCWSTR lpAppDirPath;
} ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION;
Membros
dwFlags
Esse valor é sempre 0.
ulFormatVersion
Esse valor especifica o formato das informações retornadas. No Windows XP e no Windows Server 2003, esse membro é sempre 1.
ulAssemblyCount
Número de assemblies no contexto de ativação.
ulRootManifestPathType
Especifica o tipo de caminho do qual o manifesto do assembly foi carregado.
Esse membro é sempre uma das seguintes constantes:
ulRootManifestPathChars
Número de caracteres no caminho do manifesto.
ulRootConfigurationPathType
Especifica o tipo de caminho do qual o manifesto de configuração de aplicativo desse assembly foi carregado.
Esse membro é sempre uma das seguintes constantes:
ulRootConfigurationPathChars
Número de caracteres em qualquer caminho de arquivo de configuração de aplicativo.
ulAppDirPathType
Especifica o tipo de caminho do qual esse manifesto do aplicativo foi carregado.
Esse membro é sempre uma das seguintes constantes:
ulAppDirPathChars
Número de caracteres no diretório do aplicativo.
lpRootManifestPath
Caminho do manifesto do aplicativo.
lpRootConfigurationPath
Caminho do arquivo de configuração.
lpAppDirPath
Caminho do diretório do aplicativo.
Comentários
Se QueryActCtxW for chamado com a opção ActivationContextDetailedInformation e a função for bem-sucedida, as informações no buffer retornado serão na forma da estrutura ACTIVATION_CONTEXT_DETAILED_INFORMATION . Veja a seguir um exemplo de uma estrutura usada para armazenar informações detalhadas sobre o contexto de ativação e uma chamada de QueryActCtxW.
PACTIVATION_CONTEXT_DETAILED_INFORMATION pAssemblyInfo = NULL;
ACTIVATION_CONTEXT_QUERY_INDEX QueryIndex;
BOOL fSuccess = FALSE;
SIZE_T cbRequired;
HANDLE hActCtx = INVALID_HANDLE_VALUE;
BYTE bTemporaryBuffer[512];
PVOID pvDataBuffer = (PVOID)bTemporaryBuffer;
SIZE_T cbAvailable = sizeof(bTemporaryBuffer);
// Request the first file in the root assembly
QueryIndex.ulAssemblyIndex = 1;
QueryIndex.ulFileIndexInAssembly = 0;
if (GetCurrentActCtx(&hActCtx)) {
// Attempt to use our stack-based buffer first - if that's not large
// enough, allocate from the heap and try again.
fSuccess = QueryActCtxW(
0,
hActCtx,
(PVOID)&QueryIndex,
AssemblyDetailedInformationInActivationContext,
pvDataBuffer,
cbAvailable,
&cbRequired);
// Failed, because the buffer was too small.
if (!fSuccess && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
// Allocate what we need from the heap - fail if there isn't enough
// memory to do so.
pvDataBuffer = HeapAlloc(GetProcessHeap(), 0, cbRequired);
if (pvDataBuffer == NULL) {
fSuccess = FALSE;
goto DoneQuerying;
}
cbAvailable = cbRequired;
// If this fails again, exit out.
fSuccess = QueryActCtxW(
0,
hActCtx,
(PVOID)&QueryIndex,
AssemblyDetailedInformationInActivationContext,
pvDataBuffer,
cbAvailable,
&cbRequired);
}
if (fSuccess) {
// Now that we've found the assembly info, cast our target buffer back to
// the assembly info pointer. Use pAssemblyInfo->lpFileName
pAssemblyInfo = (PACTIVATION_CONTEXT_DETAILED_INFORMATION)pvDataBuffer;
}
}
DoneQuerying:
if (hActCtx != INVALID_HANDLE_VALUE)
ReleaseActCtx(hActCtx);
if (pvDataBuffer && (pvDataBuffer != bTemporaryBuffer)) {
HeapFree(GetProcessHeap(), 0, pvDataBuffer);
pvDataBuffer = 0;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Cabeçalho | winnt.h (inclua Windows.h) |