/*++

Copyright (c) 2000  Microsoft Corporation

Module Name:
    wtrace.idl

Abstract:
    This module contains the WinTrace interfaces.

Author:
    Michael Tsang (MikeTs) 29-Jun-2000

Environment:
    User mode

Revision History:

--*/

import "WTypes.idl";

[
uuid(5484d3bb-d1f6-47fd-93c1-130252f31660),
version(1.0),
pointer_default(unique)
]

interface WTServer
{
    //
    // Implementation constants
    //
    const int MAX_PROCNAME_LEN = 32;
    const int NUM_TRIGPTS = 10;

    typedef struct _SETTINGS
    {
        int   iVerboseLevel;
        int   iTraceLevel;
        DWORD dwfSettings;
    } SETTINGS, *PSETTINGS;

    //
    // Settings flags (Settings.dwfSettings)
    //
    const DWORD SETTINGS_TRIGMODE_ENABLED = 0x00000001;
    const DWORD SETTINGS_TRACE_TO_DEBUGGER = 0x00000002;

    typedef struct _TRIGPT
    {
        char  szProcName[MAX_PROCNAME_LEN];
        DWORD dwfTrigPt;
    } TRIGPT, *PTRIGPT;

    //
    // Trigger Point flags (TrigPt.dwfTrigPt)
    //
    const DWORD TRIGPT_TRACE_ENABLED = 0x00000001;
    const DWORD TRIGPT_BREAK_ENABLED = 0x00000002;

    typedef struct _CLIENTINFO
    {
        SETTINGS Settings;
        TRIGPT   TrigPts[NUM_TRIGPTS];
    } CLIENTINFO, *PCLIENTINFO;

    typedef DWORD_PTR HCLIENT;

    HCLIENT
    WTRegisterClient(
        [in]        handle_t       hBinding,
        [in,string] unsigned char *pszClientName
        );

    void
    WTDeregisterClient(
        [in] handle_t hBinding,
        [in] HCLIENT  hClient
        );

    void
    WTTraceProc(
        [in]        handle_t       hBinding,
        [in]        HCLIENT        hClient,
        [in]        DWORD          dwThreadId,
        [in]        int            iIndentLevel,
        [in,string] unsigned char *pszText
        );

    void
    WTTraceMsg(
        [in]        handle_t       hBinding,
        [in]        HCLIENT        hClient,
        [in,string] unsigned char *pszMsg
        );

    void
    WTDispatchServerRequests(
        [in] handle_t hBinding,
        [in] HCLIENT  hClient
        );

    [callback]
    void
    WTGetClientInfo(
        [out] PCLIENTINFO ClientInfo
        );

    [callback]
    void
    WTSetClientInfo(
        [in] PCLIENTINFO ClientInfo
        );

}
