TRACELOGGING_DEFINE_PROVIDER_STORAGE宏 (traceloggingprovider.h)

为将由用户定义的 TraceLogging 提供程序句柄保留静态存储。 TRACELOGGING_DEFINE_PROVIDER优先于此宏。

语法

void TRACELOGGING_DEFINE_PROVIDER_STORAGE(
  [in]            storageVariable,
  [in]            providerName,
  [in]            providerId,
  [in, optional]  __VA_ARGS__
);

参数

[in] storageVariable

要用于静态提供程序存储变量的名称,例如 MyStaticProviderStorage

[in] providerName

具有 TraceLogging 提供程序名称的字符串文本。 此名称应特定于组织和组件,以便它不会与其他组件的提供程序冲突。 此名称字符串将包含在提供程序生成的每个 ETW 事件中,因此请尝试使用相对较短的名称。 例如,可以使用 或 "MyCompany.MyOrganization.MyComponent""MyCompany.MyComponent"名称。

这必须是字符串文本。 请勿使用变量。

[in] providerId

提供程序的 ETW 控件 GUID,指定为逗号分隔列表(括号中包含 11 个整数)。 例如,GUID {ce5fa4ea-ab00-5402-8b76-9f76ac858fb5} 将表示为 (0xce5fa4ea,0xab00,0x5402,0x8b,0x76,0x9f,0x76,0xac,0x85,0x8f,0xb5)

尽管任何唯一 GUID 都可用于提供程序 ID,但 Microsoft 建议使用使用 ETW 名称哈希算法从提供程序名称生成的 GUID。 有关生成提供程序 ID 的信息,请参阅 TRACELOGGING_DEFINE_PROVIDER

[in, optional] __VA_ARGS__

提供程序的可选参数。 大多数提供程序不需要指定任何可选参数。

如果希望提供程序与 ETW 提供程序组相关联,请添加 TraceLoggingOptionGroup 宏以指定提供程序的组 GUID。 否则,请勿指定任何 __VA_ARGS__ 参数。

返回值

备注

在大多数情况下,你将使用 TRACELOGGING_DEFINE_PROVIDER 而不是此宏。 在某些异常情况下,可能需要使用此宏为 TraceLogging 提供程序分配静态存储,而无需同时声明句柄变量。 代码随后会根据需要声明句柄变量。

TRACELOGGING_DEFINE_PROVIDER_STORAGE 将使用提供程序所需的数据声明静态变量。 然后,可以通过获取此变量的地址来创建句柄。 的调用 TRACELOGGING_DEFINE_PROVIDER_STORAGE(storageVar, ...) 可以视为类似于以下代码:

static TraceLoggingProviderState storageVar = { ... };

用法示例:

TRACELOGGING_DEFINE_PROVIDER_STORAGE( // defines static storageVar
    storageVar, // Name of the storage variable
    "MyCompany.MyComponent", // Human-readable name for the provider
    // {ce5fa4ea-ab00-5402-8b76-9f76ac858fb5}
    (0xce5fa4ea,0xab00,0x5402,0x8b,0x76,0x9f,0x76,0xac,0x85,0x8f,0xb5));

const TraceLoggingHProvider g_hMyProvider = &storageVar; // Make a handle

要求

要求
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 traceloggingprovider.h

另请参阅

TRACELOGGING_DECLARE_PROVIDER

TRACELOGGING_DEFINE_PROVIDER

TraceLoggingWrite