ASSEMBLY_FILE_DETAILED_INFORMATION-Struktur (winnt.h)
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) |