estructura ACTIVATION_CONTEXT_DETAILED_INFORMATION (winnt.h)
La estructura ACTIVATION_CONTEXT_DETAILED_INFORMATION la usa la función QueryActCtxW .
Sintaxis
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;
Miembros
dwFlags
Este valor siempre es 0.
ulFormatVersion
Este valor especifica el formato de la información devuelta. En Windows XP y Windows Server 2003, este miembro siempre es 1.
ulAssemblyCount
Número de ensamblados en el contexto de activación.
ulRootManifestPathType
Especifica el tipo de ruta de acceso desde la que se cargó el manifiesto de este ensamblado.
Este miembro siempre es una de las siguientes constantes:
ulRootManifestPathChars
Número de caracteres de la ruta de acceso del manifiesto.
ulRootConfigurationPathType
Especifica el tipo de ruta de acceso desde la que se cargó el manifiesto de configuración de la aplicación de este ensamblado.
Este miembro siempre es una de las siguientes constantes:
ulRootConfigurationPathChars
Número de caracteres en cualquier ruta de acceso del archivo de configuración de la aplicación.
ulAppDirPathType
Especifica el tipo de ruta de acceso desde la que se cargó este manifiesto de aplicación.
Este miembro siempre es una de las siguientes constantes:
ulAppDirPathChars
Número de caracteres en el directorio de la aplicación.
lpRootManifestPath
Ruta de acceso del manifiesto de aplicación.
lpRootConfigurationPath
Ruta de acceso del archivo de configuración.
lpAppDirPath
Ruta de acceso del directorio de la aplicación.
Comentarios
Si se llama a QueryActCtxW con la opción ActivationContextDetailedInformation y la función se realiza correctamente, la información del búfer devuelto está en forma de estructura de ACTIVATION_CONTEXT_DETAILED_INFORMATION . A continuación se muestra un ejemplo de una estructura que se usa para contener información detallada sobre el contexto de activación y una llamada desde 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 | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado | winnt.h (incluya Windows.h) |