イベントサービスはイベント内容のテキストを正しく表示しない場合があります。

現象
イベントサービスは、イベントログの内容を表示する際、意図しない、長いテキストを生成することがあります。 
これにより、イベントの説明の内容が、想定よりも長くなることがあります。その結果、イベントの説明の内容に依存するアプリケーションが正しく動作しない場合があります。 
以下の例では、 イベントXML の <Param2> に "%2" という文字列があります。Windows イベントサービスはこの文字列を再帰的に置換します。
-----------------------------------------------------------------------------------------
ログの名前:         Microsoft-Windows-PrintService/Operational
ソース:           Microsoft-Windows-PrintService
日付:            2013/01/25 11:51:16
イベント ID:       310
タスクのカテゴリ:      ドキュメントを削除しています
レベル:           情報
キーワード:         ドキュメント印刷ジョブ,ドキュメント印刷ジョブ
ユーザー:          SYSTEM
コンピューター:       Computer-Name-of-Someone
説明:
ドキュメント 4、http://url.as.printed.document.name/search/result?someArgument=http://url.as.printed.document.name/search/result?someArgument=http://url.as.printed.document.name/search/result?someArgument=http://url.as.printed.document.name/search/result?someArgument=%2C%2C251Chttp://url.as.printed.document.name/search/result?someArgument=%2C%2C251C251Chttp://url.as.printed.document.name/search/result?someArgument=http://url.as.printed.document.name/search/result?someArgument=%2C%2C251Chttp://url.as.printed.document.name/search/result?someArgument=%2C%2C251C251C251Chttp://url.as.printed.document.name/search/result?someArgument=http://url.as.printed.document.name/search/result?someArgument=http://url.as.printed.document.name/search/result?someArgument=%2C%2C251Chttp://url.as.printed.document.name/search/result?someArgument=%2C%2C251C251Chttp://url.as.printed.document.name/search/result?someArgument=http://url.as.printed.document.name/search/result?someArgument=%2C%2C251Chttp://url.as.printed.document.name/search/result?someArgument=%2C%2C251C251C251C251 (所有者 user1) は Microsoft XPS Document Writer で削除されました。ユーザー操作は必要ありません。
イベント XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-PrintService" Guid="{747EF6FD-E535-4D16-B510-42C90F6873A1}" />
    <EventID>310</EventID>
    <Version>0</Version>
    <Level>4</Level>
    <Task>27</Task>
    <Opcode>11</Opcode>
    <Keywords>0x4000000000000840</Keywords>
    <TimeCreated SystemTime="2013-01-25T02:51:16.772316100Z" />
    <EventRecordID>359</EventRecordID>
    <Correlation />
    <Execution ProcessID="1328" ThreadID="1460" />
    <Channel>Microsoft-Windows-PrintService/Operational</Channel>
    <Computer>Computer-Name-of-Someone</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <UserData>
    <DocumentDeleted xmlns:auto-ns3="http://schemas.microsoft.com/win/2004/08/events" xmlns="http://manifests.microsoft.com/win/2005/08/windows/printing/spooler/core/events">
      <Param1>4</Param1>
   <Param2>http://url.as.printed.document.name/search/result?someArgument=%2C%2C251</Param2>
      <Param3>UserName</Param3>
      <Param4>Microsoft XPS Document Writer</Param4>
    </DocumentDeleted>
  </UserData>
</Event>

-----------------------------------------------------------------------------------------
原因
イベントログ内に Win32 エラーコードを表示させる場合、 パラメータに "%%n" という文字列を使用することがあります。n は Win32 エラーコードです。この "%%n" を表示するために、Windows イベントサービスは、各パラメータを再帰的に処理します。このような処理の副作用として、パラメーターに "%2" のようなテキストが含まれていると、再帰的な処理の結果、文字列が非常に長くなることがあります。

解決方法
回避策
アプリケーションでイベントレコードのパラメータを取得する場合、イベントシステムが生成した テキストを使用する代わりに、直接、パラメータを取得してください。
例えば、イベントの XML データを取得して、直接 "<Param2>" などのパラメータを取得してください。

Win32API を使用する場合、ReadEventLog() 関数を使用し、EVENTLOGRECORD 構造体の "NumStrings" 構造体と "StringOffset" メンバーを使用して、パラメータを取得できます。

Microsoft .Net Framework を使用する場合は、 "System.Diagnostics.Eventing.Reader" 名前空間のクラスを使用して、イベントレコードの取得、パラメータの取得を行うことができます。 
状況
マイクロソフトでは、この問題をマイクロソフト製品の問題として認識しています。


詳細
関連情報
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2854997 - 最終更新日: 09/29/2016 10:16:00 - リビジョン: 5.0

  • kbeventservice KB2854997
フィードバック