問題タブ [etw]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Windows ETW:StartTraceがエラー87(ERROR_INVALID_PARAMETER)で失敗する
私はWindowsStartTrace
関数のイベントトレースを呼び出しています:
エラーコード87(ERROR_INVALID_PARAMETER
)で失敗しています。MSDNには、このエラーの一般的な原因がいくつか示されています。
- プロパティはNULLです。
- SessionHandleはNULLです。
- プロパティのLogFileNameOffsetメンバーが無効です。
- プロパティのLoggerNameOffsetメンバーが無効です。
- プロパティのLogFileModeメンバーは、無効なフラグの組み合わせを指定します。
- Wnode.GuidメンバーはSystemTraceControlGuidですが、SessionNameパラメーターはKERNEL_LOGGER_NAMEではありません。
私が呼んでいるコードは次のとおりです。
私の呼び出しの言語に依存しないバージョン:
ここで、TraceHandle
64ビット整数を指します。
そしてInstanceName
、nullで終了するansi文字列へのポインタです。
Properties
構造体へのポインタでありEVENT_TRACE_PROPERTIES
、完全な16進ダンプを再現することは控えます。
重要な値は2つのオフセットです。
これには、有効なnullで終了するansi文字列も含まれています。
「NTカーネルロガー」:
"C:\ Users \ Ian \ foo.etl":
パラメータが正しくないのはなぜですか?
ボーナスリーディング
アップデート:
セッションパラメータ:
これは次のように分類されます。
アラインメントの問題がある場合、私はそれを単独で発見することはできません。
構造:
一緒に:
delphi - Windows ETW: カーネル コンシューマは EventCallback または BufferCallback イベントを受け取りません
ETW カーネル イベントをリッスンしようとしています。
ステップ 1: の呼び出し中に呼び出されるおよびオプションの関数を
/li>OpenTrace
指定して、 を呼び出します。EventCallback
BufferCallback
ProcessTrace
ステップ 2:カーネル イベントを有効にします。これは、 を呼び出すことによって行われ
StartTrace
ます。私の場合、カーネル割り込み(EVENT_TRACE_FLAG_INTERRUPT
) と遅延プロシージャ呼び出し(EVENT_TRACE_FLAG_DPC
) をトレースしたい:そして、ログが正常に開始されます (
foo.etl
5 MB の循環制限まで成長し始めることがわかります)。ステップ 3: を呼び出します。これは、保留中のすべてのイベントをステップ 1 で指定したハンドラー
/li>ProcessTrace
に配信するまでブロックします。EventCallback
繰り返しすぐに返され、コールバックが呼び出されないことを除いてProcessTrace
-etlファイルが存在し、成長している場合でも。
ロギングをファイル ベースからリアルタイムロギングに変更した場合:
ステップ 1 -リアルタイム
/li>OpenTrace
をサポートするための変更:ステップ 2 -リアルタイム
/li>StartTrace
をサポートするための変更:
この場合、返さProcessTrace
れることEventCallback
はありませんが、またはBufferCallback
呼び出されることはありません。
私は何を間違っていますか?
更新:私のコールバック関数:
windows - ソケット/名前付きパイプへの ETW イベントの使用
ETW イベントを作成するアプリケーションがあります。ここまでは、リアルタイム ロガーとファイル ロガーを使用してそのイベントを消費しました。
私は疑問に思っていました-イベントを開いているソケット/名前付きパイプに消費することは可能ですか?
logman のリモート マシンを使用して ETW を使用することは、私が探しているものではないことに注意してください。
前もって感謝します、
タル。
windows - 警告 - wevtutil を実行しているプロバイダー リソースにアクセスできません
Windows イベント プロバイダーを作成しようとすると、「プロバイダー」リソースにアクセスできない問題を解決するための支援が必要です。ManGen ユーティリティを使用してマニフェスト ファイルを作成し、「.exe」ファイルにメッセージおよびリソース ファイルとして名前を付けます。 exe ファイルを含む .rc' ファイルと、予期される '.res' ファイルが生成されますが、wevtutil を実行すると、「リソースにアクセスできません」という警告が表示され続けます。
macros - ETWマクロの定義DoTraceMessage、WPP_CLEANUP、WPP_INIT_TRACING?
Event Tracing for Windows(ETW)のWindowsソフトウェアトレースプリプロセッサ(WPP)コンポーネントを使用する場合は、次の3つのマクロを含むファイルを含める必要があります。
WPP_INIT_TRACING
マクロはソフトウェアトレースをアクティブにしますDoTraceMessage
トレースメッセージをログに記録するマクロWPP_CLEANUP
マクロはソフトウェアトレースを非アクティブ化します
これらのマクロを含むインクルードファイルは、ソースファイルの最後に以下を追加すると自動的に生成されます。
これらはマクロであるため、実際には他のことを行うために拡張されます。これらのマクロが何に展開されるかの例が必要です。
これらの生成されたマクロのサンプルが必要な理由は、Visual Studioを所有しておらず、C / C ++で記述していないか、Microsoftコンパイラを使用していないためです。
ボーナスおしゃべり。Microsoft SDKは、マクロ定義を含むサンプルインクルードファイル(tracedrv.tmh
)を提供します。
delphi - EnumerateTraceGuids が「パラメーターが正しくありません」を返す (87)
Windows API 関数EnumerateTraceGuidsを呼び出そうとしています:
MSDNのコード サンプルから始めます。
コードを Delphi に変換します。
API呼び出しで:
結果コードを取得しますERROR_INVALID_PARAMETER
(87、パラメーターが正しくありません)。
私は何を間違っていますか?
MSDN は何が原因かを説明していますERROR_INVALID_PARAMETER
:
ERROR_INVALID_PARAMETER
次のいずれかが当てはまります。
- PropertyArrayCount がゼロです
- GuidPropertiesArray は NULL です
最初のケースは真です。私の 2 番目のパラメーターPropertyArrayCount
はゼロです。サンプルがそうあるべきだと言っているように。
.net - .NET 用のパフォーマンスおよび監視ツール
Windows/Web アプリケーションのパフォーマンスの監視と診断を識別するさまざまな方法は何ですか (サード パーティのツールではなく、Microsoft が提供するツール/アプリケーションが必要です)。
前もって感謝します!
windows - Microsoft-Windows-NDIS-PacketCapture プロバイダーからのリアルタイム ETW イベントを使用する方法は?
より大きな問題は、リアルタイムの ETW ネットワーク スタック イベントを一般的にどのように使用するかということですが、私は特にMicrosoft-Windows-NDIS-PacketCapture provider に興味があります。他のすべてのネットワーク スタック プロバイダーは部分的に機能しますが、NDIS-PacketCapture (NDIS-PC) はまったく機能しないため、これはおそらくここで尋ねることができる最も簡単な質問です。
次のコードをベースとして使用しており、リアルタイムで動作するようにほとんど変更していません: http://msdn.microsoft.com/en-us/library/windows/desktop/ee441325(v=vs.85) .aspx
私が行った変更は次のとおりです。
StartTrace を呼び出して、他の処理を行う前に NDIS-PC セッションを開始します。プロパティ struct EVENT_TRACE_PROPERTIES で、LogFileMode = EVENT_TRACE_REAL_TIME_MODE、LogFileNameOffset = 0、Wnode.Guid = 何かランダムな GUID を設定します。
呼び出しステータス = EnableTraceEx2(hSession, &Current_Guid, EVENT_CONTROL_CODE_ENABLE_PROVIDER, TRACE_LEVEL_VERBOSE, 0, 0, 0, NULL); ここで、hSession は StartTrace を使用して開始されたセッションであり、Current_Guid は
{0x2ED6006E,0x4729,0x4609,{0xB4,0x23,0x3E,0xE7,0xBC,0xD6,0x78,0xEF}};
次に、LoggerName = ワイド文字列、LogFileName = NULL、および LogFileMode = EVENT_TRACE_REAL_TIME_MODE で OpenTrace を呼び出します。
最後に、先ほど開いたトレース ハンドルで ProcessTrace を呼び出します。
繰り返しますが、他のすべては MSDN の例で提供されているものと同じままにしておきます
プロバイダーを Microsoft-Windows-Winsock-AFD や Microsoft-Windows-TCPIP などの別のものに1 回変更するだけで同じコードを使用すると、定義したレコード コールバックが呼び出されます (ただし、まだできません)。プロパティを取得しますが、この問題をできるだけ単純にするために、これ以上掘り下げることはしません)。NDIS-PC を使用すると、0 コールバックが発生します。ControlTrace を使用して手動でフラッシュしようとしましたが、成功しませんでした。また、「EventRecordCallback」の代わりに「EventCallback」を定義しようとしましたが、成功しませんでした。
このプロセスに関係するすべてのデータ構造を調べて、各プロバイダーを比較したところ、それらはすべて正しく同じに見えました。関数からのすべての戻り値と返されたデータ構造を調べましたが、試したプロバイダー間でも同じように見えます。
「logman "My Trace Session 04" -ets」を呼び出してセッション プロパティを調べたところ、NDIS-PC と TCPIP で同じように見えます。
C:\windows\system32>logman "マイ トレース セッション 04" -ets
名前: マイ トレース セッション 04 状態:
実行中 ルート パス: %systemdrive%\PerfLogs\Admin セグメント:
オフ スケジュール: オン名前: My Trace Session 04\My Trace Session 04 タイプ:
トレース 追加: オフ 循環: オフ 上書き:
オフ バッファー サイズ: 64 失われたバッファー: 0 書き込まれたバッファー: 0 バッファー フラッシュ タイマー: 1 クロック タイプ: パフォーマンス ファイル モード: リアルタイムプロバイダー: 名前: Microsoft-Windows-NDIS-PacketCapture プロバイダー GUID: {2ED6006E-4729-4609-B423-3EE7BCD678EF} レベル:
5 (win:Verbose) KeywordsAll: 0x0 KeywordsAny:
0xffffffffffffffff (Ethernet802.3,WirelessWAN,Tunnel,Nativ e802.11,PacketStart,PacketEnd,ut:SendPath,ut:ReceivePath,ut:L3ConnectPath,ut:L2C onnectPath,ut:ClosePath,ut:Authentication,ut:Configuration,ut: Global,ut:Dropped, ut:PiiPresent,ut:Packet,ut:Address,ut:StdTemplateHint,ut:StateTransition,win:ResponseTime,Microsoft-Windows-NDIS-PacketCapture/Diagnostic,0x2,0x4,0x8,0x10,0x20 , 0x40,0x80,0x100,0x400,0x800,0x1000,0x2000,0x4000,0x20000,0x40000,0x80000,0x10000 0,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0x10000000, 0x20000000,0x400000000000,0x800000000000,0x2000000000000, 0x4000000000000,0x80000 00000000,0x10000000000000,0x20000000000000,0x40000000000000,0x80000000000000,0x1 00000000000000,0x200000000000000,0x400000000000000,0x800000000000000,0x100000000 0000000,0x2000000000000000,0x4000000000000000) プロパティ: 0 フィルター タイプ: 0コマンドは正常に完了しました。
また、logman を使用して手動でセッションを開始し、コードで開いて処理しようとしましたが、それもうまくいきませんでした。また、ETLファイルに書き込もうとしましたが、それも機能しません。私が試したことは他にもたくさんありますが、何も機能していません。
リアルタイム ETW 消費に関係するインターネット上のすべてのもの (MSDN、Google 検索、Stackoverflow など) を調べましたが、リアルタイム ETW イベント消費の完全な例を 1 つも見たことがありません。すべての例は、ETL ファイルからのイベントの使用、または記録されたイベントの ETL ファイルへのエクスポートを示しており、リアルタイムの使用を機能させるためにいくつかのパラメーターを変更することを示しています。上記で要約したコードの変更は、それらの変更を反映していると思います。
私は VS2010 SP1 を使用して 32 ビット コンソール アプリを作成している Win7 Ultimate を使用しています。また、改善なしで64ビットアプリを作成しようとしました。
次の 2 つの投稿は関連性がありますが、試したり実施したりしても何の違いもありませんでした。リアルタイム モードでは、コードはセッション名をプロパティ構造体の末尾にコピーしますが、ログ ファイルのオフセットはとにかく 0 にする必要があります。他のすべてのプロバイダーは問題なく動作するため、アライメントの問題はないと思います。
Windows ETW: カーネル コンシューマーが EventCallback または BufferCallback イベントを受信しない Windows ETW: StartTrace がエラー 87 (ERROR_INVALID_PARAMETER) で失敗する
小さくて些細なことを見逃しているような気がしますが、これでうまくいくはずです。助けていただければ幸いです。
.net - なぜEventLogではなくETWを使用するのですか?
標準の.NETEventLogクラスではなくEventTracingfor Windows(ETW)を使用する必要があるのはなぜですか。その逆も同様です。かなりの数のパフォーマンスカウンターを使用することを知っていると、決定に影響しますか?
私がこれまでに知っていること:
- ETWのパフォーマンスははるかに優れているはずです。
- ETWは、統合する作業がはるかに多くなります(たとえば、Windows用の.NETイベントトレース)
- ETWの標準チャネルの1つ(アプリケーション、システムなど)を選択すると、同じ情報がイベントログで利用可能になります。
c# - ログイベントを挿入するとき、TimeCreated フィールドの精度が不十分です
.net Framework 4 を使用して C# で Windows イベント ログにアプリケーション ログを記録しようとしていますが、ログ エントリを挿入すると、TimeCreated フィールド (イベント ビューアー -> Windows ログ -> アプリケーション -> -> 詳細 -> フレンドリー ビュー) -> System) のような値を取得します
ご覧のとおり、1 秒未満の精度は失われていますが、ビューアーで "." の後に数字がある別のイベントを確認できます。より正確なタイムスタンプを示します。
これは .Net Framework/CLR/C# の何らかの制限ですか、それとも間違ったことをしているだけですか?
ありがとう。
VS2010SP1、Win7/Server 2008 R2環境。
アップデート:
私が試したことに言及することができます
これまでのところ、log4netのEventLogAppender。
更新 2:
そのため、ETW を使用してイベント ログにイベントを挿入すると、実際には SystemTime の分解能が 1 秒未満のイベントが生成されます。これが実際に必要なのかもしれませんが、私の場合はやり過ぎのように感じます。