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

指向以 null 结尾的字符串的指针,该字符串包含程序集标识的文本编码格式。

lpAssemblyManifestPath

指向以 null 结尾的字符串的指针,该字符串指示此程序集清单的原始路径。

lpAssemblyPolicyPath

指向以 null 结尾的字符串的指针,该字符串指示用于确定应加载此版本的程序集的任何策略程序集的路径。 如果此成员为 null,则未使用任何策略来决定加载此版本。

lpAssemblyDirectoryName

指向以 null 结尾的字符串的指针,该字符串指示从中加载此程序集的文件夹。

ulFileCount

注解

如果使用 AssemblyDetailedInformationInActivationContext 选项调用 QueryActCtxW ,并且函数成功,则返回的缓冲区中的信息采用 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)