windows-nt/Source/XPSP1/NT/base/wow64/wow64log/w64logp.h
2020-09-26 16:20:57 +08:00

218 lines
3.7 KiB
C

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
w64logp.h
Abstract:
Private header for wow64log.dll
Author:
03-OCt-1999 SamerA
Revision History:
--*/
#ifndef _W64LOGP_INCLUDE
#define _W64LOGP_INCLUDE
#define _WOW64LOGAPI_
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windef.h>
#include <stdio.h>
#include <stdarg.h>
#include "nt32.h"
#include "wow64.h"
#include "wow64log.h"
//
// bring in INVALID_HANDLE_VALUE
//
#include "winbase.h"
//
// Max buffer size for output logging
//
#define MAX_LOG_BUFFER 1024
//
// Default logging flags if no reg value is found
//
#define LF_DEFAULT (LF_ERROR)
//
// Prototype for data type handler log function
//
typedef NTSTATUS (*PFNLOGDATATYPEHANDLER)(PLOGINFO,
ULONG_PTR,
PSZ,
BOOLEAN);
typedef struct _LOGDATATYPE
{
PFNLOGDATATYPEHANDLER Handler;
} LOGDATATYPE, *PLOGDATATYPE;
//
// The layout of each entry in thunk debug info should be as follow :
//
// "ServiceName1", ServiceNumber, NumerOfArgument,
// "ArgName1", ArgType1, ...., ArgNameN, ArgTypeN
// "ServiceName2", ...and so on
//
typedef struct _ArgTypes
{
char *Name;
ULONG_PTR Type;
} ArgType, *PArgType;
//
// helper structures to help parsing the thunk debugging info
//
typedef struct _ThunkDebugInfo
{
char *ApiName;
UINT_PTR ServiceNumber;
UINT_PTR NumberOfArg;
ArgType Arg[0];
} THUNK_DEBUG_INFO, *PTHUNK_DEBUG_INFO;
typedef struct _LOGINFO
{
PSZ OutputBuffer;
ULONG_PTR BufferSize;
} LOGINFO, *PLOGINFO;
// from whnt32.c
extern PULONG_PTR NtThunkDebugInfo[];
// from whwin32.c
extern PULONG_PTR Win32ThunkDebugInfo[];
// from whcon.c
extern PULONG_PTR ConsoleThunkDebugInfo[];
// from whbase.c
extern PULONG_PTR BaseThunkDebugInfo[];
// from wow64log.c
extern UINT_PTR Wow64LogFlags;
extern HANDLE Wow64LogFileHandle;
NTSTATUS
LogInitializeFlags(
IN OUT PUINT_PTR Flags);
ULONG
GetThunkDebugTableSize(
IN PTHUNK_DEBUG_INFO DebugInfoTable);
NTSTATUS
BuildDebugThunkInfo(
IN PTHUNK_DEBUG_INFO DebugInfoTable,
OUT PULONG_PTR *LogTable);
NTSTATUS
LogTypeValue(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
NTSTATUS
LogTypeUnicodeString(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
NTSTATUS
LogTypePULongInOut(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
NTSTATUS
LogTypePULongOut(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
NTSTATUS
LogTypeObjectAttrbiutes(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
NTSTATUS
LogTypeIoStatusBlock(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
NTSTATUS
LogTypePWStr(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
NTSTATUS
LogTypePRectIn(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
NTSTATUS
LogTypePLargeIntegerIn(
IN OUT PLOGINFO LogInfo,
IN ULONG_PTR Data,
IN PSZ FieldName,
IN BOOLEAN ServiceReturn);
// from logutil.c
NTSTATUS
LogFormat(
IN OUT PLOGINFO LogInfo,
IN PSZ Format,
...);
VOID
LogOut(
IN PSZ Text,
UINT_PTR Flags
);
NTSTATUS
LogWriteFile(
IN HANDLE FileHandle,
IN PSZ LogText);
NTSTATUS
Wow64LogMessageInternal(
IN UINT_PTR Flags,
IN PSZ Format,
IN ...);
#endif