代码之家  ›  专栏  ›  技术社区  ›  Seva Alekseyev

通过新建WinEvent设置Windows事件的UserData

  •  0
  • Seva Alekseyev  · 技术社区  · 1 年前

    我正在尝试使用Powershell的NewWinEvent来模拟某个Windows事件的创建。我尝试模拟的事件在事件查看器的XML视图中具有以下顶级结构:

    <Event>
      <System>
        <!--ID, provider, etc-->
      </System>
      <UserData>
        <!-- Data specific to this particular event type-->
      </UserData>
    </Event>
    

    现在,我使用以下行创建的事件

    New-WinEvent -ProviderName Microsoft-Windows-XXX -Id 999 -Payload @("Hello world")
    

    使用相同的提供程序和ID,获取以下XML:

    <Event>
      <System>
        <!--ID, provider, etc-->
      </System>
      <EventData>
        <Data Name="EventWriteData">Hello world</Data>
      </EventData>
    </Event>
    

    所以有效载荷进入 EventData 而不是 UserData 。是否可以初始化后者?如果不是通过New WinEvent,可以直接通过。NET API(例如。 System.Diagnostics.EventLog.WriteEvent() )?


    The Event schema 说:

    通常,此部分将包含EventData或UserData部分。如果模板不包含UserData节,则使用EventData节。

    假设事件模板是从提供程序的资源文件加载的。如果您提供(例如)两个字符串作为有效负载,cmdlet将发出警告,说明数据不符合模板。

    使用 ProviderMetadata ,我已经按ID提取了该事件的模板。它是:

    <template xmlns="http://schemas.microsoft.com/win/2004/08/events">
      <data name="EventWriteData" inType="win:UnicodeString" outType="win:Xml"/>
    </template>
    

    这是非常通用的——字符串输入,XML输出。没有任何迹象表明 用户数据

    0 回复  |  直到 1 年前
    推荐文章