структура ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION (winnt.h)
Структура ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION используется функцией QueryActCtxW .
Синтаксис
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;
Члены
ulFlags
Это значение всегда равно 0.
ulEncodedAssemblyIdentityLength
Длина удостоверения закодированной сборки в байтах.
ulManifestPathType
Это значение всегда является константой.
ulManifestPathLength
Длина пути к манифесту сборки в байтах.
liManifestLastWriteTime
Время последней записи манифеста. Это структура данных FILETIME .
ulPolicyPathType
Это значение всегда является константой.
ulPolicyPathLength
Длина пути политики издателя в байтах.
liPolicyLastWriteTime
Время последней записи политики. Это структура данных FILETIME .
ulMetadataSatelliteRosterIndex
Индекс вспомогательного списка метаданных.
ulManifestVersionMajor
Основная версия сборки, запрашиваемой QueryActCtxW. Дополнительные сведения см. в разделе Версии сборок.
ulManifestVersionMinor
Дополнительный номер версии сборки, запрашиваемой QueryActCtxW. Дополнительные сведения см. в разделе Версии сборок.
ulPolicyVersionMajor
Основная версия любой политики, если она существует.
ulPolicyVersionMinor
Дополнительная версия любой политики, если она существует.
ulAssemblyDirectoryNameLength
Длина имени каталога сборки в байтах.
lpAssemblyEncodedAssemblyIdentity
Указатель на строку, завершающуюся нулевым значением, которая содержит текстовый формат удостоверения сборки.
lpAssemblyManifestPath
Указатель на строку, завершающуюся null, которая указывает исходный путь к манифесту этой сборки.
lpAssemblyPolicyPath
Указатель на строку, завершающуюся значением NULL, которая указывает путь к любой сборке политики, используемой для определения того, что эта версия сборки должна быть загружена. Если этот элемент имеет значение NULL, политика не использовалась для загрузки этой версии.
lpAssemblyDirectoryName
Указатель на строку, завершающуюся значением NULL, которая указывает папку, из которой была загружена эта сборка.
ulFileCount
Комментарии
Если метод QueryActCtxW вызывается с параметром AssemblyDetailedInformationInActivationContext и функция завершается успешно, то сведения в возвращенном буфере будут в виде структуры 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;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Верхняя часть | winnt.h (включая Windows.h) |