Câu hỏi lớn hơn là cách sử dụng các sự kiện ngăn xếp mạng ETW theo thời gian thực nói chung nhưng tôi đặc biệt quan tâm đến nhà cung cấp Microsoft-Windows-NDIS-PacketCapture. Tất cả các nhà cung cấp ngăn xếp mạng khác hoạt động một phần nhưng NDIS-PacketCapture (NDIS-PC) không hoạt động chút nào vì vậy đây có lẽ là câu hỏi đơn giản nhất tôi có thể hỏi ở đây.Làm thế nào để tiêu thụ các sự kiện ETW thời gian thực từ nhà cung cấp Microsoft-Windows-NDIS-PacketCapture?
Tôi đang sử dụng đoạn mã sau như là cơ sở và sửa đổi rất ít cho nó hoạt động trong thời gian thực: http://msdn.microsoft.com/en-us/library/windows/desktop/ee441325(v=vs.85).aspx
thay đổi tôi đã thực hiện là:
Gọi StartTrace để bắt đầu phiên NDIS-PC trước khi thực hiện bất cứ điều gì khác. Trong thuộc tính struct EVENT_TRACE_PROPERTIES, thiết lập LogFileMode = EVENT_TRACE_REAL_TIME_MODE, LogFileNameOffset = 0, và Wnode.Guid = một cái gì đó ngẫu nhiên GUID mà tôi tạo ra.
tình trạng Calling = EnableTraceEx2 (hSession, & Current_Guid, EVENT_CONTROL_CODE_ENABLE_PROVIDER, TRACE_LEVEL_VERBOSE, 0, 0, 0, NULL); trong đó hSession là phiên bắt đầu sử dụng StartTrace và và Current_Guid là
{0x2ED6006E, 0x4729,0x4609, {0xB4,0x23,0x78E, 0xE7,0xBC, 0xD6,0x78,0xEF}};
Sau đó gọi OpenTrace bằng LoggerName = một số chuỗi rộng, LogFileName = NULL và LogFileMode = EVENT_TRACE_REAL_TIME_MODE;
Cuối cùng gọi ProcessTrace trên thanh công cụ theo dõi vừa được mở ở trên.
Một lần nữa, để lại mọi thứ khác giống như được cung cấp trong ví dụ MSDN
Sử dụng mã giống hệt với một sự thay đổi duy nhất của nhà cung cấp để bất cứ điều gì khác như Microsoft-Windows-Winsock-AFD hoặc Microsoft-Windows-TCPIP giúp tôi gọi số vào cuộc gọi lại bản ghi mà tôi đã xác định (Tuy nhiên, tôi vẫn không thể truy xuất thuộc tính nhưng tôi sẽ không nghiên cứu sâu hơn để giữ cho prob này đơn giản nhất có thể) . Khi tôi sử dụng NDIS-PC, tôi nhận được 0 cuộc gọi lại. Tôi đã thử xả bằng tay bằng cách sử dụng ControlTrace mà không có bất kỳ thành công. Tôi cũng đã cố gắng xác định "EventCallback" thay vì "EventRecordCallback" mà không thành công.
Tôi đã xem xét TẤT CẢ các cấu trúc dữ liệu liên quan đến quá trình này và so sánh giữa mỗi nhà cung cấp và tất cả đều trông chính xác và giống nhau. Tôi đã xem xét tất cả các giá trị trả về từ các hàm và các cấu trúc dữ liệu được trả về và chúng cũng giống nhau giữa các nhà cung cấp mà tôi đã thử.
Tôi đã xem xét các thuộc tính phiên bằng cách gọi "logman "My vết phiên 04" -ets" và có vẻ giống hệt nhau cho NDIS-PC và TCPIP:
C: \ windows \ system32> logman "My vết phiên 04" -ets
Tên: My vết phiên 04 Tình trạng:
Chạy gốc Đường dẫn:% systemDrive% \ PerfLogs \ Admin Segment:
Tắt Lịch: TrênTên: My vết phiên 04 \ M y Dấu vết phiên 04 Loại:
vết Nối: Tắt Thông tư: Tắt Overwrite:
Tắt Buffer Size: 64 Buffers Lost: 0 Buffers viết: 0 Buffer Flush Timer: 1 Clock Loại: Chế độ Performance File: thời gian thựcProvider: Tên: Microsoft-Windows-NDIS-PacketCapture Provider Guid: {2ED6006E-4729-4609-B423-3EE7BCD678EF} Level:
5 (thắng: Verbose) KeywordsAll: 0x0 KeywordsAny:
0xffffffffffffffff (Ethernet802. 3, WirelessWAN, Đường hầm, Nativ e802.11, Gói, Bắt đầu, Gói, ut: SendPath, ut: ReceivePath, ut: L3ConnectPath, ut: L 2C onnectPath, ut: ClosePath, ut: Xác thực, ut: Cấu hình, ut: Toàn cục, ut: Đã bỏ, ut: PiiSẵn, ut: Gói, ut: Địa chỉ, ut: StdTemplateHint, ut: StateTransition, giành chiến thắng: Res ponseTime , Microsoft-Windows-NDIS-PacketCapture/Chẩn đoán, 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 Loại Bộ lọc: 0Lệnh đã hoàn tất thành công.
Tôi cũng đã thử bắt đầu các phiên theo cách thủ công bằng cách sử dụng trình đăng nhập và chỉ mở nó trong mã để xử lý nhưng điều đó cũng không hiệu quả đối với tôi. Tôi cũng đã cố gắng để chỉ viết vào một tập tin ETL và điều đó không hoạt động hoặc. Có nhiều thứ tôi đã thử nhưng không có gì làm việc cả.
Tôi đã nuốt tất cả mọi thứ trên Internets mà phải làm với thời gian thực ETW tiêu thụ (MSDN, Google tìm kiếm, Stackoverflow, vv) và tôi đã không nhìn thấy một ví dụ hoàn chỉnh của thời gian thực ETW sự kiện consumptions. Tất cả các ví dụ cho thấy sự kiện tiêu thụ từ một tập tin ETL hoặc xuất khẩu các sự kiện ghi lại vào một tập tin ETL sau đó chỉ nói để thực hiện một vài thay đổi tham số để có được tiêu thụ thời gian thực làm việc. Tôi tin rằng những thay đổi mã tôi tóm tắt ở trên phản ánh những thay đổi đó.
Tôi đang sử dụng Win7 Ultimate bằng cách sử dụng VS2010 SP1 tạo ứng dụng giao diện điều khiển 32 bit. Tôi cũng đã thử tạo ứng dụng 64 bit mà không cần cải thiện.
Follwing hai bài đăng có liên quan nhưng không tạo ra bất kỳ sự khác biệt nào đối với tôi khi tôi cố gắng/thi hành. Trong chế độ thời gian thực, mã sao chép tên phiên vào cuối thuộc tính struct và tệp log offset cần phải là 0.Tôi không nghĩ rằng tôi có bất cứ vấn đề liên kết như tất cả các nhà cung cấp khác chỉ làm việc tốt:
Windows ETW: Kernel consumer receives no EventCallback or BufferCallback events
tôi cảm thấy như tôi là thiếu một cái gì đó nhỏ và tầm thường và điều này nên chỉ làm việc. Tôi đánh giá cao sự giúp đỡ nào.
Hi, tôi đã xác minh điều này bằng cách chạy "netsh trace chụp bắt đầu = yes", sau đó chạy chương trình của tôi. Tôi hiện đang nhận các sự kiện NDIS-PC! Tuy nhiên, trong chức năng EventRecordCallback của tôi, lệnh gọi TdhGetEventInformation trên cấu trúc PEVENT_RECORD được truyền vào là không thành công mỗi lần với ERROR_NOT_FOUND ... Tôi đã viết tất cả về nó nhưng tôi chạy vào giới hạn char đối với các chú thích có nghĩa là tôi nên tạo một bài đăng mới về nó. Cảm ơn đã giúp đỡ! –
Tôi cũng chỉ ra điều này nhờ bài đăng này: http://social.msdn.microsoft.com/Forums/en-US/etw/thread/473ac036-b4a6-464a-9b49-96e11b88c01c/ –
Mọi ý tưởng khác về này (Không có sự kiện gọi lại khi sử dụng Microsoft-NDIS-PacketCapture Provider) Tôi đang cố gắng sử dụng đoạn mã này https://blogs.msdn.microsoft.com/vancem/2013/03/09/using-traceevent-to-mine -information-in-os-registered-etw-providers /. Đã cố gắng bắt đầu theo dõi netsh bên ngoài nhưng vẫn không có đầu ra? –