//0c2c06fa Generated File. Do not edit.
// File created by WPP compiler version 0.01-Sat Apr  1 17:27:32 2000
// on 07/22/2000 at 04:41:51 UTC
//   
//   Source files: name_table.c prefix.c.

#ifndef _WPP_H_
#define _WPP_H_

#define _DFS_ENABLE_USER_AGENT        0x0001
#define _DFS_ENABLE_ERRORS            0x0002
#define _DFS_ENABLE_PREFIX            0x0004
#define _DFS_ENABLE_RPC               0x0008
#define _DFS_ENABLE_REFERRAL_SERVER   0x0010
#define _DFS_ENABLE_UNUSED11          0x0020
#define _DFS_ENABLE_UNUSED10          0x0040
#define _DFS_ENABLE_UNUSED9           0x0080
#define _DFS_ENABLE_UNUSED8           0x0100
#define _DFS_ENABLE_UNUSED7           0x0200
#define _DFS_ENABLE_UNUSED6           0x0400
#define _DFS_ENABLE_UNUSED5           0x0800
#define _DFS_ENABLE_UNUSED4           0x1000
#define _DFS_ENABLE_UNUSED3           0x2000
#define _DFS_ENABLE_UNUSED2           0x4000
#define _DFS_ENABLE_UNUSED1           0x8000


#define _LEVEL_HIGH                    0x1
#define _LEVEL_NORM                    0x2
#define _LEVEL_LOW                     0x4
#define LOG_FLAGS(_flag)      _DFS_ENABLE_ ## _flag


#define LOG_ENABLED( _level, _flags) \
            (( DfsRtlWmiReg.EnableLevel >= (_level) ) &&   \
             ( DfsRtlWmiReg.EnableFlags & _flags ))
            
#define DFS_LOG_ENABLED(_ArrayPrefix_, _Id_, _level, _flags) \
	((_ArrayPrefix_ ## ControlGuids[0].EnableFlags & _flags ) && \
        (_ArrayPrefix_ ## ControlGuids[0].EnableLevel >= (_level)))
            
#define DFS_LOG(_level, _flags, _id, _arg) \
    { \
        if ( DFS_LOG_ENABLED(PrefixLib_, _id, _level, _flags) ) { \
            WmlData.Trace( WPP_MSG_NO(_id), \
                     &WPP_TRACE_GUID(PrefixLib_,_id) , \
                     PrefixLib_ ## ControlGuids[0].LoggerHandle, _arg 0); \
        } \
    }            

#define SET_LIB_TRACE(_prefix) \
                _prefix ## ControlGuids = PrefixLib_ ## ControlGuids;

#define DFS_TRACE_NORM(_flags, _msg, _args) \
                DFS_LOG(_LEVEL_NORM, LOG_FLAGS(_flags), MSG_ID_WPP_AUTO_ID, _args)
#define DFS_TRACE_LOW(_flags, _msg, _args) \
                DFS_LOG(_LEVEL_LOW, LOG_FLAGS(_flags), MSG_ID_WPP_AUTO_ID, _args)
#define DFS_TRACE_HIGH( _flag, _msg, _arg)    \
                DFS_LOG(_LEVEL_HIGH, LOG_FLAGS(_flag), MSG_ID_WPP_AUTO_ID, _arg)

#define DFS_TRACE_ERROR_NORM(_status, _flag, _msg, _arg)    \
            DFS_LOG(_LEVEL_NORM, (LOG_FLAGS(_flag) | (NT_ERROR(_status) ? LOG_FLAGS(ERRORS) : 0)), MSG_ID_WPP_AUTO_ID, _arg)

#define DFS_TRACE_ERROR_HIGH(_status, _flag, _msg, _arg)    \
            DFS_LOG(_LEVEL_HIGH, (LOG_FLAGS(_flag) | (NT_ERROR(_status) ? LOG_FLAGS(ERRORS) : 0)), MSG_ID_WPP_AUTO_ID, _arg)

#define DFS_TRACE_ERROR_LOW(_status, _flag, _msg, _arg)    \
            DFS_LOG(_LEVEL_LOW, (LOG_FLAGS(_flag) | (NT_ERROR(_status) ? LOG_FLAGS(ERRORS) : 0)), MSG_ID_WPP_AUTO_ID, _arg)

            


enum WPP_FILES {WPP_FILE_name_table_c,WPP_FILE_prefix_c,};

//
// Unless disabled, WPP selects one of the source
// files as a "guid store". That file will have definitions
// of trace and control arrays
//
#if defined(NAME_TABLE_C)
#define WPP_DEFINE_ARRAYS
#endif
 

#  define WPP_CONTROL_GUID_ARRAY PrefixLib_ControlGuids

//
// Define default flavors of the trace macro
//

#if defined(WMLUM_H) 
extern WML_DATA WmlData;
#  define WPP_TRACE_MESSAGE(_lh,_fl,_guid,_id,_msg,_arg) (*WmlData.Trace)(_id,&_guid,_lh,_arg)
#  define WPP_DECLARE_CONTROL_GUIDS
#elif defined(WMLKM_H)
#  define WPP_TRACE_MESSAGE(_lh,_fl,_guid,_id,_msg,_arg) WmlTrace(_id,&_guid,_lh,_arg)
#  define WPP_DECLARE_CONTROL_GUIDS
#else
#  define WPP_PTRLEN
#  define WPP_USE_WmiTraceMessage
#  if defined(WPP_KERNEL_MODE)
#     define WPP_WMI_TRACE_MESSAGE WmiTraceMessage
#  else
#     define WPP_WMI_TRACE_MESSAGE TraceMessage
#  endif
#  define WPP_TRACE_MESSAGE(_lh,_fl,_guid,_id,_msg,_arg) WPP_WMI_TRACE_MESSAGE(_lh,_fl,_guid,_id,_arg)
#endif


#if defined(WPP_DEFINE_ARRAYS)
#  define WPP_DEFINE_TRACE_GUIDS
#  define WPP_DEFINE_CONTROL_GUIDS
#endif


#define NOARGS // Yep. No args, alright.
#define LOGNOTHING 0,

#  define WPP_DEFINE_GRP_ID(_a,_b) ( ((_a) << 16) | ( _b) )
#  define WPP_CTRL_FLAGS(_id)      (1 << ((_id) & 0xFFFF) )
#  define WPP_CTRL_GUID_NO(_id)    ((_id) >> 16)


#  define WPP_DEFINE_MSG_ID(_a,_b)   ( ((_a) << 16) | ( _b) )
#  define WPP_MSG_NO(_id)            ((_id) & 0xFFFF)
#  define WPP_TRACE_GUID_NO(_id)     ((_id) >> 16)


#define WPP_TRACE_GUID(_ArrayPrefix_,_Id_) (_ArrayPrefix_ ## TraceGuids[ WPP_TRACE_GUID_NO(_Id_) ] )

#define WPP_LOGGER_HANDLE(_ArrayPrefix_,_Id_) (_ArrayPrefix_ ## ControlGuids[ WPP_CTRL_GUID_NO(_Id_) ].LoggerHandle )
#define WPP_ENABLED(_ArrayPrefix_,_Id_) \
	(_ArrayPrefix_ ## ControlGuids[ WPP_CTRL_GUID_NO(_Id_) ].EnableFlags & WPP_CTRL_FLAGS(_Id_) )

#define LOGARSTR(_Value_)	WPP_LOGASTR( _Value_ )
#define LOGBOOLEAN(_Value_)	WPP_LOGTYPEVAL(signed char, _Value_ )
#define LOGPTR(_Value_)	WPP_LOGTYPEVAL(void*, _Value_ )
#define LOGSTATUS(_Value_)	WPP_LOGTYPEVAL(signed int, _Value_ )
 
#  define MSG_ID_prefix_c114	WPP_DEFINE_MSG_ID(0,11)
#  define MSG_ID_prefix_c163	WPP_DEFINE_MSG_ID(0,12)
#  define MSG_ID_prefix_c69	WPP_DEFINE_MSG_ID(0,10)
 
extern GUID                         PrefixLib_TraceGuids[]; 
#define PrefixLib_TraceGuids_len    1      // I don't think we need this [BUGBUG]

#if defined(WPP_DECLARE_CONTROL_GUIDS)
extern WML_CONTROL_GUID_REG         WPP_CONTROL_GUID_ARRAY[]; 
#endif


#ifdef WPP_DEFINE_TRACE_GUIDS
#if 1  // if # traceguids > 0 
GUID PrefixLib_TraceGuids[] = {
 // 0da06be7-a84a-4d9b-be44-70a2e7917f35 prefix.c
 {0x0da06be7,0xa84a,0x4d9b,{0xbe,0x44,0x70,0xa2,0xe7,0x91,0x7f,0x35}}, // prefix.c
};
#endif
#endif // WPP_DEFINE_TRACE_GUIDS

#if defined(WMLUM_H)
# define WPP_INIT_TRACING_SIMPLE_EX(AppName, PrintFunc) \
    do { \
        DWORD status; \
	LOADWML(status, WmlData); \
        SetupReg( \
            AppName, \
            L"%SystemRoot%\\PrefixLib_.log",\
            ); \
	if (status == ERROR_SUCCESS) { \
		status = (*WmlData.Initialize)( \
			   AppName, \
			   PrintFunc, \
                           &WPP_CONTROL_GUID_ARRAY[0]); \
	} \
    } while(0)
# define WPP_INIT_TRACING_SIMPLE(AppName) WPP_INIT_TRACING_SIMPLE_EX(AppName, NULL)
#endif

#ifdef WPP_DEFINE_CONTROL_GUIDS
  #if defined(WMLUM_H) 
     WML_DATA WmlData;
  #endif

# if 0 == 0  // if # CtrlGuids == 0
    WML_CONTROL_GUID_REG WPP_CONTROL_GUID_ARRAY[1];
# else
WML_CONTROL_GUID_REG WPP_CONTROL_GUID_ARRAY[] = {
};
#endif
#endif // WPP_DEFINE_CONTROL_GUIDS


#define WPP_DEFAULT_GROUP_ID WPP_DEFINE_GRP_ID(0,0)

#if !defined(DFS_TRACE_ERROR_HIGH)
#define DFS_TRACE_ERROR_HIGH(_unknown1, _unknown2, MSG, ARG) WPP_LOG(PrefixLib_, WPP_DEFAULT_GROUP_ID, MSG_ID_ ## WPP_AUTO_ID, MSG, ARG -0)
#endif
#if !defined(DFS_TRACE_ERROR_LOW)
#define DFS_TRACE_ERROR_LOW(_unknown1, _unknown2, MSG, ARG) WPP_LOG(PrefixLib_, WPP_DEFAULT_GROUP_ID, MSG_ID_ ## WPP_AUTO_ID, MSG, ARG -0)
#endif
#if !defined(DFS_TRACE_ERROR_NORM)
#define DFS_TRACE_ERROR_NORM(_unknown1, _unknown2, MSG, ARG) WPP_LOG(PrefixLib_, WPP_DEFAULT_GROUP_ID, MSG_ID_ ## WPP_AUTO_ID, MSG, ARG -0)
#endif
#if !defined(DFS_TRACE_HIGH)
#define DFS_TRACE_HIGH(_unknown1, MSG, ARG) WPP_LOG(PrefixLib_, WPP_DEFAULT_GROUP_ID, MSG_ID_ ## WPP_AUTO_ID, MSG, ARG -0)
#endif
#if !defined(DFS_TRACE_LOW)
#define DFS_TRACE_LOW(_unknown1, MSG, ARG) WPP_LOG(PrefixLib_, WPP_DEFAULT_GROUP_ID, MSG_ID_ ## WPP_AUTO_ID, MSG, ARG -0)
#endif
#if !defined(DFS_TRACE_NORM)
#define DFS_TRACE_NORM(_unknown1, MSG, ARG) WPP_LOG(PrefixLib_, WPP_DEFAULT_GROUP_ID, MSG_ID_ ## WPP_AUTO_ID, MSG, ARG -0)
#endif
#if !defined(SimpleTrace)
#define SimpleTrace(MSG, ARG) WPP_LOG(PrefixLib_, WPP_DEFAULT_GROUP_ID, MSG_ID_ ## WPP_AUTO_ID, MSG, ARG -0)
#endif
#if !defined(SimpleTraceEx)
#define SimpleTraceEx(GRP, MSG, ARG) WPP_LOG(PrefixLib_, GRP, MSG_ID_ ## WPP_AUTO_ID, MSG, ARG -0)
#endif
#if 0 // Real check is done in elif
#elif defined(NAME_TABLE_C) // name_table.c
#	define WPP_THIS_FILE name_table_c
#elif defined(PREFIX_C) // prefix.c
#	define WPP_THIS_FILE prefix_c
#endif 

#define WPP_EVAL(_value_) _value_
#define MSG_ID_WPP_AUTO_ID WPP_EVAL(MSG_ID_) ## WPP_EVAL(WPP_THIS_FILE) ## WPP_EVAL(__LINE__)

//
// WPP_CHECKED_ZERO will be expanded to 0, if 
// expression _value has the same size as the type _Type,
// or to division by 0, if the sizes are different
//
// This is poor man compile time argument checking. So don't be surprised
// if a compiler will tell you suddenly that you have a division by 0
// in line such and such
//

#define WPP_CHECKED_ZERO(_Value, _Type) \
    (0 * (1/(int)!(sizeof(_Type) - sizeof(_Value) )))

#define WPP_CHECKED_SIZEOF(_Value, _Type) \
    (sizeof(_Value) + WPP_CHECKED_ZERO( _Value, _Type) )


#if defined(WPP_PTRLEN)
#  define WPP_LOGPAIR(_Size, _Addr) (_Addr),(_Size),
#else
#  define WPP_LOGPAIR(_Size, _Addr) (_Size),(_Addr),
#endif

# define WPP_LOGTYPEVAL(_Type, _Value) \
    WPP_LOGPAIR(WPP_CHECKED_SIZEOF(_Value, _Type), &(_Value))

# define WPP_LOGASTR(_value) \
    WPP_LOGPAIR( strlen(_value) + WPP_CHECKED_SIZEOF((_value)[0],CHAR), _value )

# define WPP_LOGWSTR(_value) \
    WPP_LOGPAIR( wcslen(_value) * sizeof(WCHAR) + WPP_CHECKED_SIZEOF((_value)[0],WCHAR), _value)

# define WPP_LOGCSTR(_x) \
    WPP_LOGPAIR( sizeof((_x).Length) + WPP_CHECKED_ZERO(_x,STRING), &(_x).Length ) \
    WPP_LOGPAIR( (_x).Length, (_x).Buffer )

# define WPP_LOGUSTR(_x)                                                            \
    WPP_LOGPAIR( WPP_CHECKED_SIZEOF((_x).Length, short)                        \
                    + WPP_CHECKED_ZERO((_x),UNICODE_STRING), &(_x).Length)  \
    WPP_LOGPAIR( (_x).Length, (_x).Buffer )

#  define WPP_LOG(_ArrayPrefix_, _Group_, _Id_, _Msg_, _Args_) \
       if (!WPP_ENABLED(_ArrayPrefix_, _Group_)) {;} else \
           WPP_TRACE_MESSAGE(WPP_LOGGER_HANDLE(_ArrayPrefix_, _Group_), \
                             WPP_TRACE_FLAGS, \
                             WPP_TRACE_GUID(_ArrayPrefix_,_Id_), \
                             WPP_MSG_NO(_Id_), _Msg_, _Args_)


#endif // _WPP_H_