estrutura ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION (winnt.h)
A estrutura ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION é usada pela função QueryActCtxW .
Sintaxe
typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
DWORD ulFlags;
DWORD ulEncodedAssemblyIdentityLength;
DWORD ulManifestPathType;
DWORD ulManifestPathLength;
LARGE_INTEGER liManifestLastWriteTime;
DWORD ulPolicyPathType;
DWORD ulPolicyPathLength;
LARGE_INTEGER liPolicyLastWriteTime;
DWORD ulMetadataSatelliteRosterIndex;
DWORD ulManifestVersionMajor;
DWORD ulManifestVersionMinor;
DWORD ulPolicyVersionMajor;
DWORD ulPolicyVersionMinor;
DWORD ulAssemblyDirectoryNameLength;
PCWSTR lpAssemblyEncodedAssemblyIdentity;
PCWSTR lpAssemblyManifestPath;
PCWSTR lpAssemblyPolicyPath;
PCWSTR lpAssemblyDirectoryName;
DWORD ulFileCount;
} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
Membros
ulFlags
Esse valor é sempre 0.
ulEncodedAssemblyIdentityLength
Comprimento da identidade do assembly codificado em bytes.
ulManifestPathType
Esse valor sempre é uma constante.
ulManifestPathLength
Comprimento do caminho do manifesto do assembly em bytes.
liManifestLastWriteTime
A última vez que o manifesto foi gravado. Isso está na forma de uma estrutura de dados FILETIME .
ulPolicyPathType
Esse valor sempre é uma constante.
ulPolicyPathLength
Comprimento do caminho da política do editor em bytes.
liPolicyLastWriteTime
A última vez que a política foi escrita. Isso está na forma de uma estrutura de dados FILETIME .
ulMetadataSatelliteRosterIndex
Índice de lista de metadados satélite.
ulManifestVersionMajor
Versão principal do assembly consultado por QueryActCtxW. Para obter mais informações, consulte Versões do assembly.
ulManifestVersionMinor
Versão secundária do assembly consultado por QueryActCtxW. Para obter mais informações, consulte Versões do assembly.
ulPolicyVersionMajor
Versão principal de qualquer política, se houver.
ulPolicyVersionMinor
Versão secundária de qualquer política, se houver.
ulAssemblyDirectoryNameLength
Comprimento do nome do diretório do assembly em bytes.
lpAssemblyEncodedAssemblyIdentity
Ponteiro para uma cadeia de caracteres terminada em nulo que contém um formato codificado textually da identidade do assembly.
lpAssemblyManifestPath
Ponteiro para uma cadeia de caracteres terminada em nulo que indica o caminho original para o manifesto desse assembly.
lpAssemblyPolicyPath
Ponteiro para uma cadeia de caracteres terminada em nulo que indica o caminho de qualquer assembly de política usado para determinar que essa versão do assembly deve ser carregada. Se esse membro for nulo, nenhuma política foi usada para decidir carregar essa versão.
lpAssemblyDirectoryName
Ponteiro para uma cadeia de caracteres terminada em nulo que indica a pasta da qual esse assembly foi carregado.
ulFileCount
Comentários
Se QueryActCtxW for chamado com a opção AssemblyDetailedInformationInActivationContext e a função for bem-sucedida, as informações no buffer retornado estão na forma da estrutura ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION .
PACTIVATION_CONTEXT_ASSEMBLY_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_ASSEMBLY_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) |