Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die ASSEMBLY_FILE_DETAILED_INFORMATION-Struktur wird von der QueryActCtxW-Funktion verwendet.
Syntax
typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
DWORD ulFlags;
DWORD ulFilenameLength;
DWORD ulPathLength;
PCWSTR lpFileName;
PCWSTR lpFilePath;
} ASSEMBLY_FILE_DETAILED_INFORMATION, *PASSEMBLY_FILE_DETAILED_INFORMATION;
Member
ulFlags
Dieser Wert ist immer 0.
ulFilenameLength
Länge des Dateinamens in Byte, auf den lpFileName verweist. Die Anzahl enthält nicht das abschließende NULL-Zeichen.
ulPathLength
Länge der Pfadzeichenfolge in Bytes, auf die von lpFilePath verwiesen wird. Die Anzahl enthält nicht das abschließende NULL-Zeichen.
lpFileName
Null-beendete Zeichenfolge, die den Namen der Datei angibt.
lpFilePath
Null-terminierte Zeichenfolge, die den Pfad zu der Datei mit dem Namen in lpFileName angibt.
Hinweise
Wenn QueryActCtxW mit der Option FileInformationInAssemblyOfAssemblyInActivationContext aufgerufen wird und die Funktion erfolgreich ist, werden die Informationen im zurückgegebenen Puffer in Form der ASSEMBLY_FILE_DETAILED_INFORMATION-Struktur angezeigt. Im Folgenden finden Sie ein Beispiel für eine Struktur, die verwendet wird, um detaillierte Informationen zum Aktivierungskontext und einen Aufruf von QueryActCtxW zu enthalten.
PASSEMBLY_FILE_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,
FileInformationInAssemblyOfAssemblyInActivationContext,
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,
FileInformationInAssemblyOfAssemblyInActivationContext,
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 = (PASSEMBLY_FILE_DETAILED_INFORMATION)pvDataBuffer;
}
}
DoneQuerying:
if (hActCtx != INVALID_HANDLE_VALUE)
ReleaseActCtx(hActCtx);
if (pvDataBuffer && (pvDataBuffer != bTemporaryBuffer)) {
HeapFree(GetProcessHeap(), 0, pvDataBuffer);
pvDataBuffer = 0;
}
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
| Kopfzeile | winnt.h (windows.h einschließen) |