Bagikan melalui


Fungsi UMDEtwRegister (umdprovider.h)

Mendaftarkan penyedia pelacakan peristiwa. Driver harus memanggil fungsi ini sebelum melakukan panggilan apa pun untuk mencatat peristiwa.

Sintaks

void UMDEtwRegister(
  PFNUMDETW_RUNDOWN CbRundown
);

Parameter

CbRundown

Penunjuk ke fungsi panggilan balik yang mengembalikan informasi tentang status driver mode pengguna saat ini.

Fungsi panggilan balik ini harus memanggil fungsi UMDEtwLogMapAllocation untuk setiap pemetaan alokasi saat ini.

Nilai kembali

Tidak ada

Keterangan

Jenis data untuk parameter CbRundown didefinisikan sebagai:

typedef void (*PFNUMDETW_RUNDOWN)();

UMDEtwRegister didefinisikan sebaris dalam Umdprovider.h sebagai:

// GUID for UMD ETW provider
// {A688EE40-D8D9-4736-B6F9-6B74935BA3B1}
static const GUID UMDEtwProviderId = 
{ 0xa688ee40, 0xd8d9, 0x4736, { 0xb6, 0xf9, 0x6b, 0x74, 0x93, 0x5b, 0xa3, 0xb1 } };

// Registration handle, returned by EventRegister and passed to EventUnregister
__declspec(selectany) REGHANDLE RegHandle = NULL;

// Whether any level of logging is enabled.
__declspec(selectany) BOOLEAN Enabled = FALSE;

// Whether we are currently in a rundown
__declspec(selectany) BOOLEAN InRundown = FALSE;

// Callback to the driver when a rundown is needed
__declspec(selectany) PFNUMDETW_RUNDOWN Rundown = NULL;

FORCEINLINE void NTAPI EnableCallback(
  __in      LPCGUID SourceId,
  __in      ULONG IsEnabled,
  __in      UCHAR Level,
  __in      ULONGLONG MatchAnyKeyword,
  __in      ULONGLONG MatchAllKeywords,
  __in_opt  PEVENT_FILTER_DESCRIPTOR FilterData,
  __in_opt  PVOID CallbackContext
)
{
    switch (IsEnabled)
    {
        case EVENT_CONTROL_CODE_DISABLE_PROVIDER:
            Enabled = FALSE;
            break;
        case EVENT_CONTROL_CODE_ENABLE_PROVIDER:
            Enabled = TRUE;
            break;
        case EVENT_CONTROL_CODE_CAPTURE_STATE:
            // Temporarily enable logging during the rundown
            BOOLEAN OldEnabled = Enabled;
            Enabled = TRUE;
            
            InRundown = TRUE;
            Rundown();
            InRundown = FALSE;

            // Restore Enabled to its original state
            Enabled = OldEnabled;
            
            break;
    }
}

FORCEINLINE void UMDEtwRegister(PFNUMDETW_RUNDOWN RundownCb)
{
    Rundown = RundownCb;

    // Register the provider
    EventRegister(&UMDEtwProviderId,
                  EnableCallback,
                  NULL,
                  &RegHandle);
}

Fungsi EventRegister dan nilai EVENT_CONTROL_CODE_XXX dijelaskan dalam dokumentasi Peristiwa Windows .

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8
Server minimum yang didukung Windows Server 2012
Target Platform Desktop
Header umdprovider.h (termasuk Umdprovider.h)

Lihat juga

UMDEtwLogMapAllocation

UMDEtwUnregister