diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /src/win32ctl | |
download | pcp-debian.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'src/win32ctl')
28 files changed, 4382 insertions, 0 deletions
diff --git a/src/win32ctl/GNUmakefile b/src/win32ctl/GNUmakefile new file mode 100644 index 0000000..6ae7223 --- /dev/null +++ b/src/win32ctl/GNUmakefile @@ -0,0 +1,36 @@ +# +# Copyright (c) 2008-2011 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +TOPDIR = ../.. +include $(TOPDIR)/src/include/builddefs + +SUBDIRS = include lib \ + eventlog services setevent +BATCHES = pcp.bat pmafm.bat mkaf.bat pmsignal.bat +LSRCFILES = $(BATCHES) + +default :: default_pcp + +default_pcp : $(SUBDIRS) + $(SUBDIRS_MAKERULE) + +install :: default_pcp install_pcp + +install_pcp : $(SUBDIRS) + $(SUBDIRS_MAKERULE) +ifeq "$(TARGET_OS)" "mingw" + $(INSTALL) -m 755 $(BATCHES) $(PCP_BIN_DIR) +endif + +include $(BUILDRULES) diff --git a/src/win32ctl/eventlog/GNUmakefile b/src/win32ctl/eventlog/GNUmakefile new file mode 100644 index 0000000..cab11e1 --- /dev/null +++ b/src/win32ctl/eventlog/GNUmakefile @@ -0,0 +1,38 @@ +# +# Copyright (c) 2008-2009 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +CFILES = pcp-eventlog.c +CMDTARGET = pcp-eventlog.exe +LLDLIBS = $(PCPLIB) +LSRCFILES = $(WRAPPERS) + +default: build-me + +include $(BUILDRULES) + +ifeq "$(TARGET_OS)" "mingw" +build-me: $(CMDTARGET) +install: default + $(INSTALL) -m 755 $(CMDTARGET) $(PCP_BIN_DIR)/$(CMDTARGET) +else +build-me: +install: +endif + +default_pcp: default + +install_pcp: install diff --git a/src/win32ctl/eventlog/pcp-eventlog.c b/src/win32ctl/eventlog/pcp-eventlog.c new file mode 100644 index 0000000..e8f8fe3 --- /dev/null +++ b/src/win32ctl/eventlog/pcp-eventlog.c @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2008 Aconex. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ +#include "pmapi.h" +#include "impl.h" +#include <string.h> +#include <winbase.h> + +int +posix2win32(char *pri) +{ + if (strcmp(pri, "alert") == 0 || strcmp(pri, "warning") == 0 || + strcmp(pri, "warn") == 0) + return EVENTLOG_WARNING_TYPE; + if (strcmp(pri, "crit") == 0 || strcmp(pri, "emerg") == 0 || + strcmp(pri, "err") == 0 || strcmp(pri, "error") == 0 || + strcmp(pri, "panic") == 0) + return EVENTLOG_ERROR_TYPE; + if (strcmp(pri, "info") == 0 || strcmp(pri, "notice") == 0 || + strcmp(pri, "debug") == 0) + return EVENTLOG_INFORMATION_TYPE; + return -1; +} + +void +append(char *buffer, int bsize, char *string) +{ + static int spaced; /* first argument needs no whitespace-prefix */ + static int offset; + + if (spaced) + offset += snprintf(buffer + offset, bsize - offset, " %s", string); + else { + offset += snprintf(buffer + offset, bsize - offset, "%s", string); + spaced = 1; /* remainder will all be space-prefixed */ + } +} + +int +main(int argc, char **argv) +{ + HANDLE sink; + LPCSTR msgptr; + char buffer[256]; + char msg[32*1024]; + char *pri = NULL; + char *tag = NULL; + int error = 0; + int iflag = 0; + int sflag = 0; + int priority; + int c; + + __pmSetProgname(argv[0]); + + while ((c = getopt(argc, argv, "ip:st:?")) != EOF) { + switch (c) { + case 'i': /* process ID */ + iflag = 1; + break; + case 'p': /* pri (facility.level) */ + pri = optarg; + break; + case 's': /* stderr too */ + sflag = 1; + break; + case 't': /* tag (prefix) */ + tag = optarg; + break; + default: + error++; + } + } + + if (error) { + fprintf(stderr, "Usage: %s [ options ] message\n\n" + "Options:\n" + " -i log process identifier with each line\n" + " -s log message to standard error as well\n" + " -p pri enter message with specified priority\n" + " -t tag mark the line with the specified tag\n", + pmProgname); + return 2; + } + + /* + * Parse priority. Discard facility, pick out valid level names. + */ + if (!pri) + priority = EVENTLOG_INFORMATION_TYPE; /* default event type */ + else { + char *p = strrchr(pri, '.'); + if (p) + pri = p; + priority = posix2win32(pri); + if (!priority) + priority = EVENTLOG_INFORMATION_TYPE; /* default event type */ + } + + /* + * Construct the message from all contributing components. + */ + if (iflag) { + snprintf(buffer, sizeof(buffer), "[%" FMT_PID "]", getpid()); + append(msg, sizeof(msg), buffer); + } + if (tag) { + snprintf(buffer, sizeof(buffer), "%s:", tag); + append(msg, sizeof(msg), buffer); + } + for (c = optind; c < argc; c++) /* insert the remaining text */ + append(msg, sizeof(msg), argv[c]); + + /* + * Optionally write to the standard error stream (as well). + */ + if (sflag) { + fputs(msg, stderr); + fputc('\n', stderr); + } + + sink = RegisterEventSource(NULL, "Application"); + if (!sink) { + fprintf(stderr, "%s: RegisterEventSource failed (%ld)\n", + pmProgname, GetLastError()); + return 1; + } + msgptr = msg; + if (!ReportEvent(sink, priority, 0, 0, NULL, 1, 0, &msgptr, NULL)) + fprintf(stderr, "%s: ReportEvent failed (%ld)\n", + pmProgname, GetLastError()); + DeregisterEventSource(sink); + return 0; +} diff --git a/src/win32ctl/include/GNUmakefile b/src/win32ctl/include/GNUmakefile new file mode 100644 index 0000000..ce72f8e --- /dev/null +++ b/src/win32ctl/include/GNUmakefile @@ -0,0 +1,32 @@ +# +# Copyright (c) 2011 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +HFILES = _mingw_unicode.h pshpack8.h \ + evntcons.h evntprov.h evntrace.h \ + pdh.h pdhmsg.h \ + tdh.h tdhmsg.h \ + winevt.h winmeta.h winperf.h wmistr.h + +default :: default_pcp + +default_pcp : + +include $(BUILDRULES) + +install :: default_pcp install_pcp + +install_pcp : default_pcp diff --git a/src/win32ctl/include/_mingw_unicode.h b/src/win32ctl/include/_mingw_unicode.h new file mode 100644 index 0000000..38334bc --- /dev/null +++ b/src/win32ctl/include/_mingw_unicode.h @@ -0,0 +1,33 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +#if !defined(_INC_CRT_UNICODE_MACROS) +/* _INC_CRT_UNICODE_MACROS defined based on UNICODE flag */ + +#if defined(UNICODE) +# define _INC_CRT_UNICODE_MACROS 1 +# define __MINGW_NAME_AW(func) func##W +# define __MINGW_NAME_AW_EXT(func,ext) func##W##ext +# define __MINGW_NAME_UAW(func) func##_W +# define __MINGW_NAME_UAW_EXT(func,ext) func##_W_##ext +# define __MINGW_STRING_AW(str) L##str /* same as TEXT() from winnt.h */ +# define __MINGW_PROCNAMEEXT_AW "W" +#else +# define _INC_CRT_UNICODE_MACROS 2 +# define __MINGW_NAME_AW(func) func##A +# define __MINGW_NAME_AW_EXT(func,ext) func##A##ext +# define __MINGW_NAME_UAW(func) func##_A +# define __MINGW_NAME_UAW_EXT(func,ext) func##_A_##ext +# define __MINGW_STRING_AW(str) str /* same as TEXT() from winnt.h */ +# define __MINGW_PROCNAMEEXT_AW "A" +#endif + +#define __MINGW_TYPEDEF_AW(type) \ + typedef __MINGW_NAME_AW(type) type; +#define __MINGW_TYPEDEF_UAW(type) \ + typedef __MINGW_NAME_UAW(type) type; + +#endif /* !defined(_INC_CRT_UNICODE_MACROS) */ diff --git a/src/win32ctl/include/evntcons.h b/src/win32ctl/include/evntcons.h new file mode 100644 index 0000000..8c15a20 --- /dev/null +++ b/src/win32ctl/include/evntcons.h @@ -0,0 +1,158 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _EVNTCONS_H_ +#define _EVNTCONS_H_ + +/* --- start added by kenj */ +#undef __MINGW_EXTENSION +#if defined(__GNUC__) || defined(__GNUG__) +#define __MINGW_EXTENSION __extension__ +#else +#define __MINGW_EXTENSION +#endif +/* --- end added by kenj */ + +#include <wmistr.h> +#include <evntrace.h> +#include <evntprov.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum EVENTSECURITYOPERATION { + EventSecuritySetDACL, + EventSecuritySetSACL, + EventSecurityAddDACL, + EventSecurityAddSACL, + EventSecurityMax +} EVENTSECURITYOPERATION; + +typedef struct _EVENT_EXTENDED_ITEM_INSTANCE { + ULONG InstanceId; + ULONG ParentInstanceId; + GUID ParentGuid; +} EVENT_EXTENDED_ITEM_INSTANCE, *PEVENT_EXTENDED_ITEM_INSTANCE; + +typedef struct _EVENT_EXTENDED_ITEM_TS_ID { + ULONG SessionId; +} EVENT_EXTENDED_ITEM_TS_ID, *PEVENT_EXTENDED_ITEM_TS_ID; + +typedef struct _EVENT_EXTENDED_ITEM_RELATED_ACTIVITYID { + GUID RelatedActivityId; +} EVENT_EXTENDED_ITEM_RELATED_ACTIVITYID, *PEVENT_EXTENDED_ITEM_RELATED_ACTIVITYID; + +typedef struct _EVENT_HEADER_EXTENDED_DATA_ITEM { + USHORT Reserved1; + USHORT ExtType; + __MINGW_EXTENSION struct { + USHORT Linkage : 1; + USHORT Reserved2 :15; + } DUMMYSTRUCTNAME; + USHORT DataSize; + ULONGLONG DataPtr; +} EVENT_HEADER_EXTENDED_DATA_ITEM, *PEVENT_HEADER_EXTENDED_DATA_ITEM; + +typedef struct _EVENT_HEADER { + USHORT Size; + USHORT HeaderType; + USHORT Flags; + USHORT EventProperty; + ULONG ThreadId; + ULONG ProcessId; + LARGE_INTEGER TimeStamp; + GUID ProviderId; + EVENT_DESCRIPTOR EventDescriptor; + __MINGW_EXTENSION union { + __MINGW_EXTENSION struct { + ULONG KernelTime; + ULONG UserTime; + } DUMMYSTRUCTNAME; + ULONG64 ProcessorTime; + } DUMMYUNIONNAME; + GUID ActivityId; +} EVENT_HEADER, *PEVENT_HEADER; + +#define EVENT_HEADER_PROPERTY_XML 0x0001 +#define EVENT_HEADER_PROPERTY_FORWARDED_XML 0x0002 +#define EVENT_HEADER_PROPERTY_LEGACY_EVENTLOG 0x0004 + +#define EVENT_HEADER_FLAG_EXTENDED_INFO 0x0001 +#define EVENT_HEADER_FLAG_PRIVATE_SESSION 0x0002 +#define EVENT_HEADER_FLAG_STRING_ONLY 0x0004 +#define EVENT_HEADER_FLAG_TRACE_MESSAGE 0x0008 +#define EVENT_HEADER_FLAG_NO_CPUTIME 0x0010 +#define EVENT_HEADER_FLAG_32_BIT_HEADER 0x0020 +#define EVENT_HEADER_FLAG_64_BIT_HEADER 0x0040 +#define EVENT_HEADER_FLAG_CLASSIC_HEADER 0x0100 + +#define EVENT_HEADER_EXT_TYPE_RELATED_ACTIVITYID 0x0001 +#define EVENT_HEADER_EXT_TYPE_SID 0x0002 +#define EVENT_HEADER_EXT_TYPE_TS_ID 0x0003 +#define EVENT_HEADER_EXT_TYPE_INSTANCE_INFO 0x0004 +#define EVENT_HEADER_EXT_TYPE_STACK_TRACE32 0x0005 +#define EVENT_HEADER_EXT_TYPE_STACK_TRACE64 0x0006 + +struct _EVENT_RECORD { + EVENT_HEADER EventHeader; + ETW_BUFFER_CONTEXT BufferContext; + USHORT ExtendedDataCount; + USHORT UserDataLength; + PEVENT_HEADER_EXTENDED_DATA_ITEM ExtendedData; + PVOID UserData; + PVOID UserContext; +}; +#ifndef DEFINED_PEVENT_RECORD +typedef struct _EVENT_RECORD EVENT_RECORD, *PEVENT_RECORD; +#define DEFINED_PEVENT_RECORD 1 +#endif /* for evntrace.h */ + +#if (_WIN32_WINNT >= 0x0601) +typedef struct _EVENT_EXTENDED_ITEM_STACK_TRACE32 { + ULONG64 MatchId; + ULONG Address[ANYSIZE_ARRAY]; +} EVENT_EXTENDED_ITEM_STACK_TRACE32, *PEVENT_EXTENDED_ITEM_STACK_TRACE32; + +typedef struct _EVENT_EXTENDED_ITEM_STACK_TRACE64 { + ULONG64 MatchId; + ULONG64 Address[ANYSIZE_ARRAY]; +} EVENT_EXTENDED_ITEM_STACK_TRACE64, *PEVENT_EXTENDED_ITEM_STACK_TRACE64; +#endif /*(_WIN32_WINNT >= 0x0601)*/ + +#define EVENT_ENABLE_PROPERTY_SID 0x00000001 +#define EVENT_ENABLE_PROPERTY_TS_ID 0x00000002 +#define EVENT_ENABLE_PROPERTY_STACK_TRACE 0x00000004 + +#define PROCESS_TRACE_MODE_REAL_TIME 0x00000100 +#define PROCESS_TRACE_MODE_RAW_TIMESTAMP 0x00001000 +#define PROCESS_TRACE_MODE_EVENT_RECORD 0x10000000 + +#if (_WIN32_WINNT >= 0x0600) +ULONG EVNTAPI EventAccessControl( + LPGUID Guid, + ULONG Operation, + PSID Sid, + ULONG Rights, + BOOLEAN AllowOrDeny +); + +ULONG EVNTAPI EventAccessQuery( + LPGUID Guid, + PSECURITY_DESCRIPTOR Buffer, + PULONG BufferSize +); + +ULONG EVNTAPI EventAccessRemove( + LPGUID Guid +); +#endif /*(_WIN32_WINNT >= 0x0600)*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _EVNTCONS_H_ */ + diff --git a/src/win32ctl/include/evntprov.h b/src/win32ctl/include/evntprov.h new file mode 100644 index 0000000..c0dc243 --- /dev/null +++ b/src/win32ctl/include/evntprov.h @@ -0,0 +1,354 @@ +/* + * evntprov.h + * + * This file is part of the ReactOS PSDK package. + * + * Contributors: + * Created by Amine Khaldi. + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef _EVNTPROV_H_ +#define _EVNTPROV_H_ + +#ifndef EVNTAPI +#ifndef MIDL_PASS +#ifdef _EVNT_SOURCE_ +#define EVNTAPI __stdcall +#else +#define EVNTAPI DECLSPEC_IMPORT __stdcall +#endif /* _EVNT_SOURCE_ */ +#endif /* MIDL_PASS */ +#endif /* EVNTAPI */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define EVENT_MIN_LEVEL 0 +#define EVENT_MAX_LEVEL 0xff + +#define EVENT_ACTIVITY_CTRL_GET_ID 1 +#define EVENT_ACTIVITY_CTRL_SET_ID 2 +#define EVENT_ACTIVITY_CTRL_CREATE_ID 3 +#define EVENT_ACTIVITY_CTRL_GET_SET_ID 4 +#define EVENT_ACTIVITY_CTRL_CREATE_SET_ID 5 + +typedef ULONGLONG REGHANDLE, *PREGHANDLE; + +#define MAX_EVENT_DATA_DESCRIPTORS 128 +#define MAX_EVENT_FILTER_DATA_SIZE 1024 + +#define EVENT_FILTER_TYPE_SCHEMATIZED 0x80000000 + +typedef struct _EVENT_DESCRIPTOR { + USHORT Id; + UCHAR Version; + UCHAR Channel; + UCHAR Level; + UCHAR Opcode; + USHORT Task; + ULONGLONG Keyword; +} EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR; +typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR; + +typedef struct _EVENT_DATA_DESCRIPTOR { + ULONGLONG Ptr; + ULONG Size; + ULONG Reserved; +} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR; + +struct _EVENT_FILTER_DESCRIPTOR { + ULONGLONG Ptr; + ULONG Size; + ULONG Type; +}; +#ifndef DEFINED_PEVENT_FILTER_DESC +typedef struct _EVENT_FILTER_DESCRIPTOR EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR; +#define DEFINED_PEVENT_FILTER_DESC 1 +#endif /* for evntrace.h */ + +typedef struct _EVENT_FILTER_HEADER { + USHORT Id; + UCHAR Version; + UCHAR Reserved[5]; + ULONGLONG InstanceId; + ULONG Size; + ULONG NextOffset; +} EVENT_FILTER_HEADER, *PEVENT_FILTER_HEADER; + + +#ifndef _ETW_KM_ /* for wdm.h */ + +typedef VOID +(NTAPI *PENABLECALLBACK)( + LPCGUID SourceId, + ULONG IsEnabled, + UCHAR Level, + ULONGLONG MatchAnyKeyword, + ULONGLONG MatchAllKeyword, + PEVENT_FILTER_DESCRIPTOR FilterData, + PVOID CallbackContext); + +#if (_WIN32_WINNT >= 0x0600) +ULONG EVNTAPI EventRegister( + LPCGUID ProviderId, + PENABLECALLBACK EnableCallback, + PVOID CallbackContext, + PREGHANDLE RegHandle +); + +ULONG EVNTAPI EventUnregister( + REGHANDLE RegHandle +); + +BOOLEAN EVNTAPI EventEnabled( + REGHANDLE RegHandle, + PCEVENT_DESCRIPTOR EventDescriptor +); + +BOOLEAN EVNTAPI EventProviderEnabled( + REGHANDLE RegHandle, + UCHAR Level, + ULONGLONG Keyword +); + +ULONG EVNTAPI EventWrite( + REGHANDLE RegHandle, + PCEVENT_DESCRIPTOR EventDescriptor, + ULONG UserDataCount, + PEVENT_DATA_DESCRIPTOR UserData +); + +ULONG EVNTAPI EventWriteTransfer( + REGHANDLE RegHandle, + PCEVENT_DESCRIPTOR EventDescriptor, + LPCGUID ActivityId, + LPCGUID RelatedActivityId, + ULONG UserDataCount, + PEVENT_DATA_DESCRIPTOR UserData +); + +ULONG EVNTAPI EventWriteString( + REGHANDLE RegHandle, + UCHAR Level, + ULONGLONG Keyword, + PCWSTR String +); + +ULONG EVNTAPI EventActivityIdControl( + ULONG ControlCode, + LPGUID ActivityId +); + +#endif /*(_WIN32_WINNT >= 0x0600)*/ + +#if (_WIN32_WINNT >= 0x0601) +ULONG EVNTAPI EventWriteEx( + REGHANDLE RegHandle, + PCEVENT_DESCRIPTOR EventDescriptor, + ULONG64 Filter, + ULONG Flags, + LPCGUID ActivityId, + LPCGUID RelatedActivityId, + ULONG UserDataCount, + PEVENT_DATA_DESCRIPTOR UserData +); +#endif /*(_WIN32_WINNT >= 0x0601)*/ + +#endif /* _ETW_KM_ */ + +FORCEINLINE +VOID +EventDataDescCreate( + PEVENT_DATA_DESCRIPTOR EventDataDescriptor, + const VOID* DataPtr, + ULONG DataSize) +{ + EventDataDescriptor->Ptr = (ULONGLONG)(ULONG_PTR)DataPtr; + EventDataDescriptor->Size = DataSize; + EventDataDescriptor->Reserved = 0; +} + +FORCEINLINE +VOID +EventDescCreate( + PEVENT_DESCRIPTOR EventDescriptor, + USHORT Id, + UCHAR Version, + UCHAR Channel, + UCHAR Level, + USHORT Task, + UCHAR Opcode, + ULONGLONG Keyword) +{ + EventDescriptor->Id = Id; + EventDescriptor->Version = Version; + EventDescriptor->Channel = Channel; + EventDescriptor->Level = Level; + EventDescriptor->Task = Task; + EventDescriptor->Opcode = Opcode; + EventDescriptor->Keyword = Keyword; +} + +FORCEINLINE +VOID +EventDescZero( + PEVENT_DESCRIPTOR EventDescriptor) +{ + memset(EventDescriptor, 0, sizeof(EVENT_DESCRIPTOR)); +} + +FORCEINLINE +USHORT +EventDescGetId( + PCEVENT_DESCRIPTOR EventDescriptor) +{ + return (EventDescriptor->Id); +} + +FORCEINLINE +UCHAR +EventDescGetVersion( + PCEVENT_DESCRIPTOR EventDescriptor) +{ + return (EventDescriptor->Version); +} + +FORCEINLINE +USHORT +EventDescGetTask( + PCEVENT_DESCRIPTOR EventDescriptor) +{ + return (EventDescriptor->Task); +} + +FORCEINLINE +UCHAR +EventDescGetOpcode( + PCEVENT_DESCRIPTOR EventDescriptor) +{ + return (EventDescriptor->Opcode); +} + +FORCEINLINE +UCHAR +EventDescGetChannel( + PCEVENT_DESCRIPTOR EventDescriptor) +{ + return (EventDescriptor->Channel); +} + +FORCEINLINE +UCHAR +EventDescGetLevel( + PCEVENT_DESCRIPTOR EventDescriptor) +{ + return (EventDescriptor->Level); +} + +FORCEINLINE +ULONGLONG +EventDescGetKeyword( + PCEVENT_DESCRIPTOR EventDescriptor) +{ + return (EventDescriptor->Keyword); +} + +FORCEINLINE +PEVENT_DESCRIPTOR +EventDescSetId( + PEVENT_DESCRIPTOR EventDescriptor, + USHORT Id) +{ + EventDescriptor->Id = Id; + return (EventDescriptor); +} + +FORCEINLINE +PEVENT_DESCRIPTOR +EventDescSetVersion( + PEVENT_DESCRIPTOR EventDescriptor, + UCHAR Version) +{ + EventDescriptor->Version = Version; + return (EventDescriptor); +} + +FORCEINLINE +PEVENT_DESCRIPTOR +EventDescSetTask( + PEVENT_DESCRIPTOR EventDescriptor, + USHORT Task) +{ + EventDescriptor->Task = Task; + return (EventDescriptor); +} + +FORCEINLINE +PEVENT_DESCRIPTOR +EventDescSetOpcode( + PEVENT_DESCRIPTOR EventDescriptor, + UCHAR Opcode) +{ + EventDescriptor->Opcode = Opcode; + return (EventDescriptor); +} + +FORCEINLINE +PEVENT_DESCRIPTOR +EventDescSetLevel( + PEVENT_DESCRIPTOR EventDescriptor, + UCHAR Level) +{ + EventDescriptor->Level = Level; + return (EventDescriptor); +} + +FORCEINLINE +PEVENT_DESCRIPTOR +EventDescSetChannel( + PEVENT_DESCRIPTOR EventDescriptor, + UCHAR Channel) +{ + EventDescriptor->Channel = Channel; + return (EventDescriptor); +} + +FORCEINLINE +PEVENT_DESCRIPTOR +EventDescSetKeyword( + PEVENT_DESCRIPTOR EventDescriptor, + ULONGLONG Keyword) +{ + EventDescriptor->Keyword = Keyword; + return (EventDescriptor); +} + + +FORCEINLINE +PEVENT_DESCRIPTOR +EventDescOrKeyword( + PEVENT_DESCRIPTOR EventDescriptor, + ULONGLONG Keyword) +{ + EventDescriptor->Keyword |= Keyword; + return (EventDescriptor); +} + +#ifdef __cplusplus +} +#endif + +#endif /* _EVNTPROV_H_ */ + diff --git a/src/win32ctl/include/evntrace.h b/src/win32ctl/include/evntrace.h new file mode 100644 index 0000000..6e9e2a0 --- /dev/null +++ b/src/win32ctl/include/evntrace.h @@ -0,0 +1,841 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _EVNTRACE_ +#define _EVNTRACE_ + +/* --- start added by kenj */ +#undef __MINGW_EXTENSION +#if defined(__GNUC__) || defined(__GNUG__) +#define __MINGW_EXTENSION __extension__ +#else +#define __MINGW_EXTENSION +#endif +/* --- end added by kenj */ + +#if defined(_WINNT_) || defined(WINNT) + +#ifndef WMIAPI +#ifndef MIDL_PASS +#ifdef _WMI_SOURCE_ +#define WMIAPI __stdcall +#else +#define WMIAPI DECLSPEC_IMPORT __stdcall +#endif +#endif /* MIDL_PASS */ +#endif /* WMIAPI */ + +DEFINE_GUID (EventTraceGuid,0x68fdd900,0x4a3e,0x11d1,0x84,0xf4,0x00,0x00,0xf8,0x04,0x64,0xe3); +DEFINE_GUID (SystemTraceControlGuid,0x9e814aad,0x3204,0x11d2,0x9a,0x82,0x00,0x60,0x08,0xa8,0x69,0x39); +DEFINE_GUID (EventTraceConfigGuid,0x01853a65,0x418f,0x4f36,0xae,0xfc,0xdc,0x0f,0x1d,0x2f,0xd2,0x35); +DEFINE_GUID (DefaultTraceSecurityGuid,0x0811c1af,0x7a07,0x4a06,0x82,0xed,0x86,0x94,0x55,0xcd,0xf7,0x13); + +#define KERNEL_LOGGER_NAMEW L"NT Kernel Logger" +#define GLOBAL_LOGGER_NAMEW L"GlobalLogger" +#define EVENT_LOGGER_NAMEW L"Event Log" +#define DIAG_LOGGER_NAMEW L"DiagLog" + +#define KERNEL_LOGGER_NAMEA "NT Kernel Logger" +#define GLOBAL_LOGGER_NAMEA "GlobalLogger" +#define EVENT_LOGGER_NAMEA "Event Log" +#define DIAG_LOGGER_NAMEA "DiagLog" + +#define MAX_MOF_FIELDS 16 + +#ifndef _TRACEHANDLE_DEFINED +#define _TRACEHANDLE_DEFINED +typedef ULONG64 TRACEHANDLE,*PTRACEHANDLE; +#endif + +#define SYSTEM_EVENT_TYPE 1 + +#define EVENT_TRACE_TYPE_INFO 0x00 +#define EVENT_TRACE_TYPE_START 0x01 +#define EVENT_TRACE_TYPE_END 0x02 +#define EVENT_TRACE_TYPE_STOP 0x02 +#define EVENT_TRACE_TYPE_DC_START 0x03 +#define EVENT_TRACE_TYPE_DC_END 0x04 +#define EVENT_TRACE_TYPE_EXTENSION 0x05 +#define EVENT_TRACE_TYPE_REPLY 0x06 +#define EVENT_TRACE_TYPE_DEQUEUE 0x07 +#define EVENT_TRACE_TYPE_RESUME 0x07 +#define EVENT_TRACE_TYPE_CHECKPOINT 0x08 +#define EVENT_TRACE_TYPE_SUSPEND 0x08 +#define EVENT_TRACE_TYPE_WINEVT_SEND 0x09 +#define EVENT_TRACE_TYPE_WINEVT_RECEIVE 0XF0 + +#define TRACE_LEVEL_NONE 0 +#define TRACE_LEVEL_CRITICAL 1 +#define TRACE_LEVEL_FATAL 1 +#define TRACE_LEVEL_ERROR 2 +#define TRACE_LEVEL_WARNING 3 +#define TRACE_LEVEL_INFORMATION 4 +#define TRACE_LEVEL_VERBOSE 5 +#define TRACE_LEVEL_RESERVED6 6 +#define TRACE_LEVEL_RESERVED7 7 +#define TRACE_LEVEL_RESERVED8 8 +#define TRACE_LEVEL_RESERVED9 9 + +#define EVENT_TRACE_TYPE_LOAD 0x0A + +#define EVENT_TRACE_TYPE_IO_READ 0x0A +#define EVENT_TRACE_TYPE_IO_WRITE 0x0B +#define EVENT_TRACE_TYPE_IO_READ_INIT 0x0C +#define EVENT_TRACE_TYPE_IO_WRITE_INIT 0x0D +#define EVENT_TRACE_TYPE_IO_FLUSH 0x0E +#define EVENT_TRACE_TYPE_IO_FLUSH_INIT 0x0F + +#define EVENT_TRACE_TYPE_MM_TF 0x0A +#define EVENT_TRACE_TYPE_MM_DZF 0x0B +#define EVENT_TRACE_TYPE_MM_COW 0x0C +#define EVENT_TRACE_TYPE_MM_GPF 0x0D +#define EVENT_TRACE_TYPE_MM_HPF 0x0E +#define EVENT_TRACE_TYPE_MM_AV 0x0F + +#define EVENT_TRACE_TYPE_SEND 0x0A +#define EVENT_TRACE_TYPE_RECEIVE 0x0B +#define EVENT_TRACE_TYPE_CONNECT 0x0C +#define EVENT_TRACE_TYPE_DISCONNECT 0x0D +#define EVENT_TRACE_TYPE_RETRANSMIT 0x0E +#define EVENT_TRACE_TYPE_ACCEPT 0x0F +#define EVENT_TRACE_TYPE_RECONNECT 0x10 +#define EVENT_TRACE_TYPE_CONNFAIL 0x11 +#define EVENT_TRACE_TYPE_COPY_TCP 0x12 +#define EVENT_TRACE_TYPE_COPY_ARP 0x13 +#define EVENT_TRACE_TYPE_ACKFULL 0x14 +#define EVENT_TRACE_TYPE_ACKPART 0x15 +#define EVENT_TRACE_TYPE_ACKDUP 0x16 + +#define EVENT_TRACE_TYPE_GUIDMAP 0x0A +#define EVENT_TRACE_TYPE_CONFIG 0x0B +#define EVENT_TRACE_TYPE_SIDINFO 0x0C +#define EVENT_TRACE_TYPE_SECURITY 0x0D + +#define EVENT_TRACE_TYPE_REGCREATE 0x0A +#define EVENT_TRACE_TYPE_REGOPEN 0x0B +#define EVENT_TRACE_TYPE_REGDELETE 0x0C +#define EVENT_TRACE_TYPE_REGQUERY 0x0D +#define EVENT_TRACE_TYPE_REGSETVALUE 0x0E +#define EVENT_TRACE_TYPE_REGDELETEVALUE 0x0F +#define EVENT_TRACE_TYPE_REGQUERYVALUE 0x10 +#define EVENT_TRACE_TYPE_REGENUMERATEKEY 0x11 +#define EVENT_TRACE_TYPE_REGENUMERATEVALUEKEY 0x12 +#define EVENT_TRACE_TYPE_REGQUERYMULTIPLEVALUE 0x13 +#define EVENT_TRACE_TYPE_REGSETINFORMATION 0x14 +#define EVENT_TRACE_TYPE_REGFLUSH 0x15 +#define EVENT_TRACE_TYPE_REGKCBCREATE 0x16 +#define EVENT_TRACE_TYPE_REGKCBDELETE 0x17 +#define EVENT_TRACE_TYPE_REGKCBRUNDOWNBEGIN 0x18 +#define EVENT_TRACE_TYPE_REGKCBRUNDOWNEND 0x19 +#define EVENT_TRACE_TYPE_REGVIRTUALIZE 0x1A +#define EVENT_TRACE_TYPE_REGCLOSE 0x1B +#define EVENT_TRACE_TYPE_REGSETSECURITY 0x1C +#define EVENT_TRACE_TYPE_REGQUERYSECURITY 0x1D +#define EVENT_TRACE_TYPE_REGCOMMIT 0x1E +#define EVENT_TRACE_TYPE_REGPREPARE 0x1F +#define EVENT_TRACE_TYPE_REGROLLBACK 0x20 +#define EVENT_TRACE_TYPE_REGMOUNTHIVE 0x21 + +#define EVENT_TRACE_TYPE_CONFIG_CPU 0x0A +#define EVENT_TRACE_TYPE_CONFIG_PHYSICALDISK 0x0B +#define EVENT_TRACE_TYPE_CONFIG_LOGICALDISK 0x0C +#define EVENT_TRACE_TYPE_CONFIG_NIC 0x0D +#define EVENT_TRACE_TYPE_CONFIG_VIDEO 0x0E +#define EVENT_TRACE_TYPE_CONFIG_SERVICES 0x0F +#define EVENT_TRACE_TYPE_CONFIG_POWER 0x10 +#define EVENT_TRACE_TYPE_CONFIG_NETINFO 0x11 + +#define EVENT_TRACE_TYPE_CONFIG_IRQ 0x15 +#define EVENT_TRACE_TYPE_CONFIG_PNP 0x16 +#define EVENT_TRACE_TYPE_CONFIG_IDECHANNEL 0x17 +#define EVENT_TRACE_TYPE_CONFIG_PLATFORM 0x19 + +#define EVENT_TRACE_FLAG_PROCESS 0x00000001 +#define EVENT_TRACE_FLAG_THREAD 0x00000002 +#define EVENT_TRACE_FLAG_IMAGE_LOAD 0x00000004 + +#define EVENT_TRACE_FLAG_DISK_IO 0x00000100 +#define EVENT_TRACE_FLAG_DISK_FILE_IO 0x00000200 + +#define EVENT_TRACE_FLAG_MEMORY_PAGE_FAULTS 0x00001000 +#define EVENT_TRACE_FLAG_MEMORY_HARD_FAULTS 0x00002000 + +#define EVENT_TRACE_FLAG_NETWORK_TCPIP 0x00010000 + +#define EVENT_TRACE_FLAG_REGISTRY 0x00020000 +#define EVENT_TRACE_FLAG_DBGPRINT 0x00040000 + +#define EVENT_TRACE_FLAG_PROCESS_COUNTERS 0x00000008 +#define EVENT_TRACE_FLAG_CSWITCH 0x00000010 +#define EVENT_TRACE_FLAG_DPC 0x00000020 +#define EVENT_TRACE_FLAG_INTERRUPT 0x00000040 +#define EVENT_TRACE_FLAG_SYSTEMCALL 0x00000080 + +#define EVENT_TRACE_FLAG_DISK_IO_INIT 0x00000400 + +#define EVENT_TRACE_FLAG_ALPC 0x00100000 +#define EVENT_TRACE_FLAG_SPLIT_IO 0x00200000 + +#define EVENT_TRACE_FLAG_DRIVER 0x00800000 +#define EVENT_TRACE_FLAG_PROFILE 0x01000000 +#define EVENT_TRACE_FLAG_FILE_IO 0x02000000 +#define EVENT_TRACE_FLAG_FILE_IO_INIT 0x04000000 + +#define EVENT_TRACE_FLAG_DISPATCHER 0x00000800 +#define EVENT_TRACE_FLAG_VIRTUAL_ALLOC 0x00004000 + +#define EVENT_TRACE_FLAG_EXTENSION 0x80000000 +#define EVENT_TRACE_FLAG_FORWARD_WMI 0x40000000 +#define EVENT_TRACE_FLAG_ENABLE_RESERVE 0x20000000 + +#define EVENT_TRACE_FILE_MODE_NONE 0x00000000 +#define EVENT_TRACE_FILE_MODE_SEQUENTIAL 0x00000001 +#define EVENT_TRACE_FILE_MODE_CIRCULAR 0x00000002 +#define EVENT_TRACE_FILE_MODE_APPEND 0x00000004 +#define EVENT_TRACE_FILE_MODE_NEWFILE 0x00000008 +#define EVENT_TRACE_FILE_MODE_PREALLOCATE 0x00000020 + +#define EVENT_TRACE_NONSTOPPABLE_MODE 0x00000040 +#define EVENT_TRACE_SECURE_MODE 0x00000080 +#define EVENT_TRACE_USE_KBYTES_FOR_SIZE 0x00002000 +#define EVENT_TRACE_PRIVATE_IN_PROC 0x00020000 +#define EVENT_TRACE_MODE_RESERVED 0x00100000 + +#define EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING 0x10000000 + +#define EVENT_TRACE_REAL_TIME_MODE 0x00000100 +#define EVENT_TRACE_DELAY_OPEN_FILE_MODE 0x00000200 +#define EVENT_TRACE_BUFFERING_MODE 0x00000400 +#define EVENT_TRACE_PRIVATE_LOGGER_MODE 0x00000800 +#define EVENT_TRACE_ADD_HEADER_MODE 0x00001000 + +#define EVENT_TRACE_USE_GLOBAL_SEQUENCE 0x00004000 +#define EVENT_TRACE_USE_LOCAL_SEQUENCE 0x00008000 + +#define EVENT_TRACE_RELOG_MODE 0x00010000 + +#define EVENT_TRACE_USE_PAGED_MEMORY 0x01000000 + +#define EVENT_TRACE_CONTROL_QUERY 0 +#define EVENT_TRACE_CONTROL_STOP 1 +#define EVENT_TRACE_CONTROL_UPDATE 2 +#define EVENT_TRACE_CONTROL_FLUSH 3 + +#define TRACE_MESSAGE_SEQUENCE 1 +#define TRACE_MESSAGE_GUID 2 +#define TRACE_MESSAGE_COMPONENTID 4 +#define TRACE_MESSAGE_TIMESTAMP 8 +#define TRACE_MESSAGE_PERFORMANCE_TIMESTAMP 16 +#define TRACE_MESSAGE_SYSTEMINFO 32 + +#define TRACE_MESSAGE_POINTER32 0x0040 +#define TRACE_MESSAGE_POINTER64 0x0080 + +#define TRACE_MESSAGE_FLAG_MASK 0xFFFF + +#define TRACE_HEADER_FLAG_USE_TIMESTAMP 0x00000200 +#define TRACE_HEADER_FLAG_TRACED_GUID 0x00020000 +#define TRACE_HEADER_FLAG_LOG_WNODE 0x00040000 +#define TRACE_HEADER_FLAG_USE_GUID_PTR 0x00080000 +#define TRACE_HEADER_FLAG_USE_MOF_PTR 0x00100000 + +#define TRACE_MESSAGE_MAXIMUM_SIZE 8*1024 + +#define ETW_NULL_TYPE_VALUE 0 +#define ETW_OBJECT_TYPE_VALUE 1 +#define ETW_STRING_TYPE_VALUE 2 +#define ETW_SBYTE_TYPE_VALUE 3 +#define ETW_BYTE_TYPE_VALUE 4 +#define ETW_INT16_TYPE_VALUE 5 +#define ETW_UINT16_TYPE_VALUE 6 +#define ETW_INT32_TYPE_VALUE 7 +#define ETW_UINT32_TYPE_VALUE 8 +#define ETW_INT64_TYPE_VALUE 9 +#define ETW_UINT64_TYPE_VALUE 10 +#define ETW_CHAR_TYPE_VALUE 11 +#define ETW_SINGLE_TYPE_VALUE 12 +#define ETW_DOUBLE_TYPE_VALUE 13 +#define ETW_BOOLEAN_TYPE_VALUE 14 +#define ETW_DECIMAL_TYPE_VALUE 15 + +#define ETW_GUID_TYPE_VALUE 101 +#define ETW_ASCIICHAR_TYPE_VALUE 102 +#define ETW_ASCIISTRING_TYPE_VALUE 103 +#define ETW_COUNTED_STRING_TYPE_VALUE 104 +#define ETW_POINTER_TYPE_VALUE 105 +#define ETW_SIZET_TYPE_VALUE 106 +#define ETW_HIDDEN_TYPE_VALUE 107 +#define ETW_BOOL_TYPE_VALUE 108 +#define ETW_COUNTED_ANSISTRING_TYPE_VALUE 109 +#define ETW_REVERSED_COUNTED_STRING_TYPE_VALUE 110 +#define ETW_REVERSED_COUNTED_ANSISTRING_TYPE_VALUE 111 +#define ETW_NON_NULL_TERMINATED_STRING_TYPE_VALUE 112 +#define ETW_REDUCED_ANSISTRING_TYPE_VALUE 113 +#define ETW_REDUCED_STRING_TYPE_VALUE 114 +#define ETW_SID_TYPE_VALUE 115 +#define ETW_VARIANT_TYPE_VALUE 116 +#define ETW_PTVECTOR_TYPE_VALUE 117 +#define ETW_WMITIME_TYPE_VALUE 118 +#define ETW_DATETIME_TYPE_VALUE 119 +#define ETW_REFRENCE_TYPE_VALUE 120 + +#define TRACE_PROVIDER_FLAG_LEGACY 0x00000001 +#define TRACE_PROVIDER_FLAG_PRE_ENABLE 0x00000002 + +#define EVENT_CONTROL_CODE_DISABLE_PROVIDER 0 +#define EVENT_CONTROL_CODE_ENABLE_PROVIDER 1 +#define EVENT_CONTROL_CODE_CAPTURE_STATE 2 + +#define EVENT_TRACE_USE_PROCTIME 0x0001 +#define EVENT_TRACE_USE_NOCPUTIME 0x0002 + +typedef struct _EVENT_TRACE_HEADER { + USHORT Size; + __MINGW_EXTENSION union { + USHORT FieldTypeFlags; + __MINGW_EXTENSION struct { + UCHAR HeaderType; + UCHAR MarkerFlags; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + __MINGW_EXTENSION union { + ULONG Version; + struct { + UCHAR Type; + UCHAR Level; + USHORT Version; + } Class; + } DUMMYUNIONNAME2; + ULONG ThreadId; + ULONG ProcessId; + LARGE_INTEGER TimeStamp; + __MINGW_EXTENSION union { + GUID Guid; + ULONGLONG GuidPtr; + } DUMMYUNIONNAME3; + __MINGW_EXTENSION union { + __MINGW_EXTENSION struct { + ULONG KernelTime; + ULONG UserTime; + } DUMMYSTRUCTNAME; + ULONG64 ProcessorTime; + __MINGW_EXTENSION struct { + ULONG ClientContext; + ULONG Flags; + } DUMMYSTRUCTNAME2; + } DUMMYUNIONNAME4; +} EVENT_TRACE_HEADER,*PEVENT_TRACE_HEADER; + +typedef struct _EVENT_INSTANCE_HEADER { + USHORT Size; + __MINGW_EXTENSION union { + USHORT FieldTypeFlags; + __MINGW_EXTENSION struct { + UCHAR HeaderType; + UCHAR MarkerFlags; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME; + __MINGW_EXTENSION union { + ULONG Version; + struct { + UCHAR Type; + UCHAR Level; + USHORT Version; + } Class; + } DUMMYUNIONNAME2; + ULONG ThreadId; + ULONG ProcessId; + LARGE_INTEGER TimeStamp; + ULONGLONG RegHandle; + ULONG InstanceId; + ULONG ParentInstanceId; + __MINGW_EXTENSION union { + __MINGW_EXTENSION struct { + ULONG KernelTime; + ULONG UserTime; + } DUMMYSTRUCTNAME; + ULONG64 ProcessorTime; + __MINGW_EXTENSION struct { + ULONG EventId; + ULONG Flags; + } DUMMYSTRUCTNAME2; + } DUMMYUNIONNAME3; + ULONGLONG ParentRegHandle; +} EVENT_INSTANCE_HEADER,*PEVENT_INSTANCE_HEADER; + +#define DEFINE_TRACE_MOF_FIELD(MOF,ptr,length,type) \ + (MOF)->DataPtr = (ULONG64) (ULONG_PTR) ptr; \ + (MOF)->Length = (ULONG) length; \ + (MOF)->DataType = (ULONG) type; + +typedef struct _MOF_FIELD { + ULONG64 DataPtr; + ULONG Length; + ULONG DataType; +} MOF_FIELD,*PMOF_FIELD; + +#if !(defined(_NTDDK_) || defined(_NTIFS_)) || defined(_WMIKM_) + +typedef struct _TRACE_LOGFILE_HEADER { + ULONG BufferSize; + __MINGW_EXTENSION union { + ULONG Version; + struct { + UCHAR MajorVersion; + UCHAR MinorVersion; + UCHAR SubVersion; + UCHAR SubMinorVersion; + } VersionDetail; + } DUMMYUNIONNAME; + ULONG ProviderVersion; + ULONG NumberOfProcessors; + LARGE_INTEGER EndTime; + ULONG TimerResolution; + ULONG MaximumFileSize; + ULONG LogFileMode; + ULONG BuffersWritten; + __MINGW_EXTENSION union { + GUID LogInstanceGuid; + __MINGW_EXTENSION struct { + ULONG StartBuffers; + ULONG PointerSize; + ULONG EventsLost; + ULONG CpuSpeedInMHz; + } DUMMYSTRUCTNAME; + } DUMMYUNIONNAME2; +#if defined(_WMIKM_) + PWCHAR LoggerName; + PWCHAR LogFileName; + RTL_TIME_ZONE_INFORMATION TimeZone; +#else + LPWSTR LoggerName; + LPWSTR LogFileName; + TIME_ZONE_INFORMATION TimeZone; +#endif + LARGE_INTEGER BootTime; + LARGE_INTEGER PerfFreq; + LARGE_INTEGER StartTime; + ULONG ReservedFlags; + ULONG BuffersLost; +} TRACE_LOGFILE_HEADER,*PTRACE_LOGFILE_HEADER; + +typedef struct _TRACE_LOGFILE_HEADER32 { + ULONG BufferSize; + __MINGW_EXTENSION union { + ULONG Version; + struct { + UCHAR MajorVersion; + UCHAR MinorVersion; + UCHAR SubVersion; + UCHAR SubMinorVersion; + } VersionDetail; + }; + ULONG ProviderVersion; + ULONG NumberOfProcessors; + LARGE_INTEGER EndTime; + ULONG TimerResolution; + ULONG MaximumFileSize; + ULONG LogFileMode; + ULONG BuffersWritten; + __MINGW_EXTENSION union { + GUID LogInstanceGuid; + __MINGW_EXTENSION struct { + ULONG StartBuffers; + ULONG PointerSize; + ULONG EventsLost; + ULONG CpuSpeedInMHz; + }; + }; +#if defined(_WMIKM_) + ULONG32 LoggerName; + ULONG32 LogFileName; + RTL_TIME_ZONE_INFORMATION TimeZone; +#else + ULONG32 LoggerName; + ULONG32 LogFileName; + TIME_ZONE_INFORMATION TimeZone; +#endif + LARGE_INTEGER BootTime; + LARGE_INTEGER PerfFreq; + LARGE_INTEGER StartTime; + ULONG ReservedFlags; + ULONG BuffersLost; +} TRACE_LOGFILE_HEADER32, *PTRACE_LOGFILE_HEADER32; + +typedef struct _TRACE_LOGFILE_HEADER64 { + ULONG BufferSize; + __MINGW_EXTENSION union { + ULONG Version; + struct { + UCHAR MajorVersion; + UCHAR MinorVersion; + UCHAR SubVersion; + UCHAR SubMinorVersion; + } VersionDetail; + }; + ULONG ProviderVersion; + ULONG NumberOfProcessors; + LARGE_INTEGER EndTime; + ULONG TimerResolution; + ULONG MaximumFileSize; + ULONG LogFileMode; + ULONG BuffersWritten; + __MINGW_EXTENSION union { + GUID LogInstanceGuid; + __MINGW_EXTENSION struct { + ULONG StartBuffers; + ULONG PointerSize; + ULONG EventsLost; + ULONG CpuSpeedInMHz; + }; + }; +#if defined(_WMIKM_) + ULONG64 LoggerName; + ULONG64 LogFileName; + RTL_TIME_ZONE_INFORMATION TimeZone; +#else + ULONG64 LoggerName; + ULONG64 LogFileName; + TIME_ZONE_INFORMATION TimeZone; +#endif + LARGE_INTEGER BootTime; + LARGE_INTEGER PerfFreq; + LARGE_INTEGER StartTime; + ULONG ReservedFlags; + ULONG BuffersLost; +} TRACE_LOGFILE_HEADER64, *PTRACE_LOGFILE_HEADER64; + +#endif /* !_NTDDK_ || _WMIKM_ */ + +typedef struct _EVENT_INSTANCE_INFO { + HANDLE RegHandle; + ULONG InstanceId; +} EVENT_INSTANCE_INFO,*PEVENT_INSTANCE_INFO; + +#if !defined(_WMIKM_) && !defined(_NTDDK_) && !defined(_NTIFS_) + +typedef struct _EVENT_TRACE_PROPERTIES { + WNODE_HEADER Wnode; + ULONG BufferSize; + ULONG MinimumBuffers; + ULONG MaximumBuffers; + ULONG MaximumFileSize; + ULONG LogFileMode; + ULONG FlushTimer; + ULONG EnableFlags; + LONG AgeLimit; + + ULONG NumberOfBuffers; + ULONG FreeBuffers; + ULONG EventsLost; + ULONG BuffersWritten; + ULONG LogBuffersLost; + ULONG RealTimeBuffersLost; + HANDLE LoggerThreadId; + ULONG LogFileNameOffset; + ULONG LoggerNameOffset; +} EVENT_TRACE_PROPERTIES,*PEVENT_TRACE_PROPERTIES; + +typedef struct _TRACE_GUID_REGISTRATION { + LPCGUID Guid; + HANDLE RegHandle; +} TRACE_GUID_REGISTRATION,*PTRACE_GUID_REGISTRATION; + +#endif /* !_NTDDK_ || _WMIKM_ */ + +typedef struct _TRACE_GUID_PROPERTIES { + GUID Guid; + ULONG GuidType; + ULONG LoggerId; + ULONG EnableLevel; + ULONG EnableFlags; + BOOLEAN IsEnable; +} TRACE_GUID_PROPERTIES,*PTRACE_GUID_PROPERTIES; + +typedef struct _ETW_BUFFER_CONTEXT { + UCHAR ProcessorNumber; + UCHAR Alignment; + USHORT LoggerId; +} ETW_BUFFER_CONTEXT, *PETW_BUFFER_CONTEXT; + +typedef struct _TRACE_ENABLE_INFO { + ULONG IsEnabled; + UCHAR Level; + UCHAR Reserved1; + USHORT LoggerId; + ULONG EnableProperty; + ULONG Reserved2; + ULONGLONG MatchAnyKeyword; + ULONGLONG MatchAllKeyword; +} TRACE_ENABLE_INFO, *PTRACE_ENABLE_INFO; + +typedef struct _TRACE_PROVIDER_INSTANCE_INFO { + ULONG NextOffset; + ULONG EnableCount; + ULONG Pid; + ULONG Flags; +} TRACE_PROVIDER_INSTANCE_INFO, *PTRACE_PROVIDER_INSTANCE_INFO; + +typedef struct _TRACE_GUID_INFO { + ULONG InstanceCount; + ULONG Reserved; +} TRACE_GUID_INFO, *PTRACE_GUID_INFO; + +typedef struct _EVENT_TRACE { + EVENT_TRACE_HEADER Header; + ULONG InstanceId; + ULONG ParentInstanceId; + GUID ParentGuid; + PVOID MofData; + ULONG MofLength; + __MINGW_EXTENSION union { + ULONG ClientContext; + ETW_BUFFER_CONTEXT BufferContext; /* MSDN says ULONG, for XP and older? */ + } DUMMYUNIONNAME; +} EVENT_TRACE,*PEVENT_TRACE; + +#if !defined(_WMIKM_) && !defined(_NTDDK_) && !defined(_NTIFS_) + +#ifndef DEFINED_PEVENT_RECORD +typedef struct _EVENT_RECORD EVENT_RECORD, *PEVENT_RECORD; +#define DEFINED_PEVENT_RECORD 1 +#endif /* for evntcons.h */ +#ifndef DEFINED_PEVENT_FILTER_DESC +typedef struct _EVENT_FILTER_DESCRIPTOR EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR; +#define DEFINED_PEVENT_FILTER_DESC 1 +#endif /* for evntprov.h */ +typedef struct _EVENT_TRACE_LOGFILEW EVENT_TRACE_LOGFILEW,*PEVENT_TRACE_LOGFILEW; +typedef struct _EVENT_TRACE_LOGFILEA EVENT_TRACE_LOGFILEA,*PEVENT_TRACE_LOGFILEA; +typedef ULONG (WINAPI *PEVENT_TRACE_BUFFER_CALLBACKW)(PEVENT_TRACE_LOGFILEW Logfile); +typedef ULONG (WINAPI *PEVENT_TRACE_BUFFER_CALLBACKA)(PEVENT_TRACE_LOGFILEA Logfile); +typedef VOID (WINAPI *PEVENT_CALLBACK)(PEVENT_TRACE pEvent); +typedef VOID (WINAPI *PEVENT_RECORD_CALLBACK)(PEVENT_RECORD EventRecord); +typedef ULONG (WINAPI *WMIDPREQUEST)(WMIDPREQUESTCODE RequestCode,PVOID RequestContext,ULONG *BufferSize,PVOID Buffer); + +struct _EVENT_TRACE_LOGFILEW { + LPWSTR LogFileName; + LPWSTR LoggerName; + LONGLONG CurrentTime; + ULONG BuffersRead; + __MINGW_EXTENSION union { + ULONG LogFileMode; + ULONG ProcessTraceMode; + } DUMMYUNIONNAME; + EVENT_TRACE CurrentEvent; + TRACE_LOGFILE_HEADER LogfileHeader; + PEVENT_TRACE_BUFFER_CALLBACKW BufferCallback; + ULONG BufferSize; + ULONG Filled; + ULONG EventsLost; + __MINGW_EXTENSION union { + PEVENT_CALLBACK EventCallback; + PEVENT_RECORD_CALLBACK EventRecordCallback; + } DUMMYUNIONNAME2; + ULONG IsKernelTrace; + PVOID Context; +}; + +struct _EVENT_TRACE_LOGFILEA { + LPSTR LogFileName; + LPSTR LoggerName; + LONGLONG CurrentTime; + ULONG BuffersRead; + __MINGW_EXTENSION union { + ULONG LogFileMode; + ULONG ProcessTraceMode; + } DUMMYUNIONNAME; + EVENT_TRACE CurrentEvent; + TRACE_LOGFILE_HEADER LogfileHeader; + PEVENT_TRACE_BUFFER_CALLBACKA BufferCallback; + ULONG BufferSize; + ULONG Filled; + ULONG EventsLost; + __MINGW_EXTENSION union { + PEVENT_CALLBACK EventCallback; + PEVENT_RECORD_CALLBACK EventRecordCallback; + } DUMMYUNIONNAME2; + ULONG IsKernelTrace; + PVOID Context; +}; + +#if defined(_UNICODE) || defined(UNICODE) +#define PEVENT_TRACE_BUFFER_CALLBACK PEVENT_TRACE_BUFFER_CALLBACKW +#define EVENT_TRACE_LOGFILE EVENT_TRACE_LOGFILEW +#define PEVENT_TRACE_LOGFILE PEVENT_TRACE_LOGFILEW +#define KERNEL_LOGGER_NAME KERNEL_LOGGER_NAMEW +#define GLOBAL_LOGGER_NAME GLOBAL_LOGGER_NAMEW +#define EVENT_LOGGER_NAME EVENT_LOGGER_NAMEW +#else +#define PEVENT_TRACE_BUFFER_CALLBACK PEVENT_TRACE_BUFFER_CALLBACKA +#define EVENT_TRACE_LOGFILE EVENT_TRACE_LOGFILEA +#define PEVENT_TRACE_LOGFILE PEVENT_TRACE_LOGFILEA +#define KERNEL_LOGGER_NAME KERNEL_LOGGER_NAMEA +#define GLOBAL_LOGGER_NAME GLOBAL_LOGGER_NAMEA +#define EVENT_LOGGER_NAME EVENT_LOGGER_NAMEA +#endif /* defined(_UNICODE) || defined(UNICODE) */ + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_C ULONG WMIAPI StartTraceW(PTRACEHANDLE TraceHandle,LPCWSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI StartTraceA(PTRACEHANDLE TraceHandle,LPCSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI StopTraceW(TRACEHANDLE TraceHandle,LPCWSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI StopTraceA(TRACEHANDLE TraceHandle,LPCSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI QueryTraceW(TRACEHANDLE TraceHandle,LPCWSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI QueryTraceA(TRACEHANDLE TraceHandle,LPCSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI UpdateTraceW(TRACEHANDLE TraceHandle,LPCWSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI UpdateTraceA(TRACEHANDLE TraceHandle,LPCSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI FlushTraceW(TRACEHANDLE TraceHandle,LPCWSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI FlushTraceA(TRACEHANDLE TraceHandle,LPCSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties); +EXTERN_C ULONG WMIAPI ControlTraceW(TRACEHANDLE TraceHandle,LPCWSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties,ULONG ControlCode); +EXTERN_C ULONG WMIAPI ControlTraceA(TRACEHANDLE TraceHandle,LPCSTR InstanceName,PEVENT_TRACE_PROPERTIES Properties,ULONG ControlCode); +EXTERN_C ULONG WMIAPI QueryAllTracesW(PEVENT_TRACE_PROPERTIES *PropertyArray,ULONG PropertyArrayCount,PULONG LoggerCount); +EXTERN_C ULONG WMIAPI QueryAllTracesA(PEVENT_TRACE_PROPERTIES *PropertyArray,ULONG PropertyArrayCount,PULONG LoggerCount); +EXTERN_C ULONG WMIAPI EnableTrace(ULONG Enable,ULONG EnableFlag,ULONG EnableLevel,LPCGUID ControlGuid,TRACEHANDLE TraceHandle); + +#if (_WIN32_WINNT >= 0x0600) +EXTERN_C ULONG WMIAPI EnableTraceEx( + LPCGUID ProviderId, + LPCGUID SourceId, + TRACEHANDLE TraceHandle, + ULONG IsEnabled, + UCHAR Level, + ULONGLONG MatchAnyKeyword, + ULONGLONG MatchAllKeyword, + ULONG EnableProperty, + PEVENT_FILTER_DESCRIPTOR EnableFilterDesc +); +#endif /* _WIN32_WINNT >= 0x0600 */ + +#define ENABLE_TRACE_PARAMETERS_VERSION 1 + +typedef struct _ENABLE_TRACE_PARAMETERS { + ULONG Version; + ULONG EnableProperty; + ULONG ControlFlags; + GUID SourceId; + PEVENT_FILTER_DESCRIPTOR EnableFilterDesc; +} ENABLE_TRACE_PARAMETERS, *PENABLE_TRACE_PARAMETERS; + +#if (_WIN32_WINNT >= 0x0601) +EXTERN_C ULONG WMIAPI EnableTraceEx2( + TRACEHANDLE TraceHandle, + LPCGUID ProviderId, + ULONG ControlCode, + UCHAR Level, + ULONGLONG MatchAnyKeyword, + ULONGLONG MatchAllKeyword, + ULONG Timeout, + PENABLE_TRACE_PARAMETERS EnableParameters +); +#endif /* _WIN32_WINNT >= 0x0601 */ + +typedef enum _TRACE_QUERY_INFO_CLASS { + TraceGuidQueryList, + TraceGuidQueryInfo, + TraceGuidQueryProcess, + TraceStackTracingInfo, + MaxTraceSetInfoClass +} TRACE_QUERY_INFO_CLASS, TRACE_INFO_CLASS; + +#if (_WIN32_WINNT >= 0x0600) +EXTERN_C ULONG WMIAPI EnumerateTraceGuidsEx( + TRACE_QUERY_INFO_CLASS TraceQueryInfoClass, + PVOID InBuffer, + ULONG InBufferSize, + PVOID OutBuffer, + ULONG OutBufferSize, + PULONG ReturnLength +); +#endif /* _WIN32_WINNT >= 0x0600 */ + +/*To enable the read event type for disk IO events, set GUID to 3d6fa8d4-fe05-11d0-9dda-00c04fd7ba7c and Type to 10.*/ +typedef struct _CLASSIC_EVENT_ID { + GUID EventGuid; + UCHAR Type; + UCHAR Reserved[7]; +} CLASSIC_EVENT_ID, *PCLASSIC_EVENT_ID; + +#if (_WIN32_WINNT >= 0x0601) +EXTERN_C ULONG WMIAPI TraceSetInformation( + TRACEHANDLE SessionHandle, + TRACE_INFO_CLASS InformationClass, + PVOID TraceInformation, + ULONG InformationLength +); +#endif /* _WIN32_WINNT >= 0x0601 */ + +EXTERN_C ULONG WMIAPI CreateTraceInstanceId(HANDLE RegHandle,PEVENT_INSTANCE_INFO pInstInfo); +EXTERN_C ULONG WMIAPI TraceEvent(TRACEHANDLE TraceHandle,PEVENT_TRACE_HEADER EventTrace); +EXTERN_C ULONG WMIAPI TraceEventInstance(TRACEHANDLE TraceHandle,PEVENT_INSTANCE_HEADER EventTrace,PEVENT_INSTANCE_INFO pInstInfo,PEVENT_INSTANCE_INFO pParentInstInfo); +EXTERN_C ULONG WMIAPI RegisterTraceGuidsW(WMIDPREQUEST RequestAddress,PVOID RequestContext,LPCGUID ControlGuid,ULONG GuidCount,PTRACE_GUID_REGISTRATION TraceGuidReg,LPCWSTR MofImagePath,LPCWSTR MofResourceName,PTRACEHANDLE RegistrationHandle); +EXTERN_C ULONG WMIAPI RegisterTraceGuidsA(WMIDPREQUEST RequestAddress,PVOID RequestContext,LPCGUID ControlGuid,ULONG GuidCount,PTRACE_GUID_REGISTRATION TraceGuidReg,LPCSTR MofImagePath,LPCSTR MofResourceName,PTRACEHANDLE RegistrationHandle); +EXTERN_C ULONG WMIAPI EnumerateTraceGuids(PTRACE_GUID_PROPERTIES *GuidPropertiesArray,ULONG PropertyArrayCount,PULONG GuidCount); +EXTERN_C ULONG WMIAPI UnregisterTraceGuids(TRACEHANDLE RegistrationHandle); +EXTERN_C TRACEHANDLE WMIAPI GetTraceLoggerHandle(PVOID Buffer); +EXTERN_C UCHAR WMIAPI GetTraceEnableLevel(TRACEHANDLE TraceHandle); +EXTERN_C ULONG WMIAPI GetTraceEnableFlags(TRACEHANDLE TraceHandle); +EXTERN_C TRACEHANDLE WMIAPI OpenTraceA(PEVENT_TRACE_LOGFILEA Logfile); +EXTERN_C TRACEHANDLE WMIAPI OpenTraceW(PEVENT_TRACE_LOGFILEW Logfile); +EXTERN_C ULONG WMIAPI ProcessTrace(PTRACEHANDLE HandleArray,ULONG HandleCount,LPFILETIME StartTime,LPFILETIME EndTime); +EXTERN_C ULONG WMIAPI CloseTrace(TRACEHANDLE TraceHandle); +EXTERN_C ULONG WMIAPI SetTraceCallback(LPCGUID pGuid,PEVENT_CALLBACK EventCallback); +EXTERN_C ULONG WMIAPI RemoveTraceCallback (LPCGUID pGuid); +EXTERN_C ULONG __cdecl TraceMessage(TRACEHANDLE LoggerHandle,ULONG MessageFlags,LPCGUID MessageGuid,USHORT MessageNumber,...); +EXTERN_C ULONG WMIAPI TraceMessageVa(TRACEHANDLE LoggerHandle,ULONG MessageFlags,LPCGUID MessageGuid,USHORT MessageNumber,va_list MessageArgList); + +#ifdef __cplusplus +} +#endif + +#define INVALID_PROCESSTRACE_HANDLE ((TRACEHANDLE)INVALID_HANDLE_VALUE) + +#if defined(UNICODE) || defined(_UNICODE) +#define RegisterTraceGuids RegisterTraceGuidsW +#define StartTrace StartTraceW +#define ControlTrace ControlTraceW + +#if defined(__TRACE_W2K_COMPATIBLE) +#define StopTrace(a,b,c) ControlTraceW((a),(b),(c),EVENT_TRACE_CONTROL_STOP) +#define QueryTrace(a,b,c) ControlTraceW((a),(b),(c),EVENT_TRACE_CONTROL_QUERY) +#define UpdateTrace(a,b,c) ControlTraceW((a),(b),(c),EVENT_TRACE_CONTROL_UPDATE) +#else +#define StopTrace StopTraceW +#define QueryTrace QueryTraceW +#define UpdateTrace UpdateTraceW +#endif /* defined(__TRACE_W2K_COMPATIBLE) */ + +#define FlushTrace FlushTraceW +#define QueryAllTraces QueryAllTracesW +#define OpenTrace OpenTraceW + +#else /* defined(UNICODE) || defined(_UNICODE) */ + +#define RegisterTraceGuids RegisterTraceGuidsA +#define StartTrace StartTraceA +#define ControlTrace ControlTraceA + +#if defined(__TRACE_W2K_COMPATIBLE) +#define StopTrace(a,b,c) ControlTraceA((a),(b),(c),EVENT_TRACE_CONTROL_STOP) +#define QueryTrace(a,b,c) ControlTraceA((a),(b),(c),EVENT_TRACE_CONTROL_QUERY) +#define UpdateTrace(a,b,c) ControlTraceA((a),(b),(c),EVENT_TRACE_CONTROL_UPDATE) +#else +#define StopTrace StopTraceA +#define QueryTrace QueryTraceA +#define UpdateTrace UpdateTraceA +#endif /* defined(__TRACE_W2K_COMPATIBLE) */ + +#define FlushTrace FlushTraceA +#define QueryAllTraces QueryAllTracesA +#define OpenTrace OpenTraceA +#endif /* defined(UNICODE) || defined(_UNICODE) */ + +#endif /* !defined(_WMIKM_) && !defined(_NTDDK_) && !defined(_NTIFS_) */ + +#endif /* defined(_WINNT_) || defined(WINNT) */ + +#endif /* _EVNTRACE_ */ + diff --git a/src/win32ctl/include/pdh.h b/src/win32ctl/include/pdh.h new file mode 100644 index 0000000..d7828a4 --- /dev/null +++ b/src/win32ctl/include/pdh.h @@ -0,0 +1,605 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _PDH_H_ +#define _PDH_H_ + +/* --- start added by kenj */ +#undef __MINGW_EXTENSION +#if defined(__GNUC__) || defined(__GNUG__) +#define __MINGW_EXTENSION __extension__ +#else +#define __MINGW_EXTENSION +#endif +/* --- end added by kenj */ + +#include <_mingw_unicode.h> +#include <windows.h> +#include <winperf.h> + +#ifdef __cplusplus +extern "C" { +#endif + + typedef LONG PDH_STATUS; + +#define PDH_FUNCTION PDH_STATUS WINAPI + +#define PDH_CVERSION_WIN40 ((DWORD)(0x0400)) +#define PDH_CVERSION_WIN50 ((DWORD)(0x0500)) + +#define PDH_VERSION ((DWORD)((PDH_CVERSION_WIN50) + 0x0003)) + +#define IsSuccessSeverity(ErrorCode) ((((DWORD)(ErrorCode) & (0xC0000000L))==0x00000000L) ? TRUE : FALSE) +#define IsInformationalSeverity(ErrorCode) ((((DWORD)(ErrorCode) & (0xC0000000L))==0x40000000L) ? TRUE : FALSE) +#define IsWarningSeverity(ErrorCode) ((((DWORD)(ErrorCode) & (0xC0000000L))==0x80000000L) ? TRUE : FALSE) +#define IsErrorSeverity(ErrorCode) ((((DWORD)(ErrorCode) & (0xC0000000L))==0xC0000000L) ? TRUE : FALSE) + +#define MAX_COUNTER_PATH 256 + +#define PDH_MAX_COUNTER_NAME 1024 +#define PDH_MAX_INSTANCE_NAME 1024 +#define PDH_MAX_COUNTER_PATH 2048 +#define PDH_MAX_DATASOURCE_PATH 1024 + + typedef HANDLE PDH_HCOUNTER; + typedef HANDLE PDH_HQUERY; + typedef HANDLE PDH_HLOG; + + typedef PDH_HCOUNTER HCOUNTER; + typedef PDH_HQUERY HQUERY; +#ifndef _LMHLOGDEFINED_ + typedef PDH_HLOG HLOG; +#endif + +#ifdef INVALID_HANDLE_VALUE +#undef INVALID_HANDLE_VALUE +#define INVALID_HANDLE_VALUE ((HANDLE)((LONG_PTR)-1)) +#endif + +#define H_REALTIME_DATASOURCE NULL +#define H_WBEM_DATASOURCE INVALID_HANDLE_VALUE + + typedef struct _PDH_RAW_COUNTER { + DWORD CStatus; + FILETIME TimeStamp; + LONGLONG FirstValue; + LONGLONG SecondValue; + DWORD MultiCount; + } PDH_RAW_COUNTER,*PPDH_RAW_COUNTER; + + typedef struct _PDH_RAW_COUNTER_ITEM_A { + LPSTR szName; + PDH_RAW_COUNTER RawValue; + } PDH_RAW_COUNTER_ITEM_A,*PPDH_RAW_COUNTER_ITEM_A; + + typedef struct _PDH_RAW_COUNTER_ITEM_W { + LPWSTR szName; + PDH_RAW_COUNTER RawValue; + } PDH_RAW_COUNTER_ITEM_W,*PPDH_RAW_COUNTER_ITEM_W; + + typedef struct _PDH_FMT_COUNTERVALUE { + DWORD CStatus; + __MINGW_EXTENSION union { + LONG longValue; + double doubleValue; + LONGLONG largeValue; + LPCSTR AnsiStringValue; + LPCWSTR WideStringValue; + }; + } PDH_FMT_COUNTERVALUE,*PPDH_FMT_COUNTERVALUE; + + typedef struct _PDH_FMT_COUNTERVALUE_ITEM_A { + LPSTR szName; + PDH_FMT_COUNTERVALUE FmtValue; + } PDH_FMT_COUNTERVALUE_ITEM_A,*PPDH_FMT_COUNTERVALUE_ITEM_A; + + typedef struct _PDH_FMT_COUNTERVALUE_ITEM_W { + LPWSTR szName; + PDH_FMT_COUNTERVALUE FmtValue; + } PDH_FMT_COUNTERVALUE_ITEM_W,*PPDH_FMT_COUNTERVALUE_ITEM_W; + + typedef struct _PDH_STATISTICS { + DWORD dwFormat; + DWORD count; + PDH_FMT_COUNTERVALUE min; + PDH_FMT_COUNTERVALUE max; + PDH_FMT_COUNTERVALUE mean; + } PDH_STATISTICS,*PPDH_STATISTICS; + + typedef struct _PDH_COUNTER_PATH_ELEMENTS_A { + LPSTR szMachineName; + LPSTR szObjectName; + LPSTR szInstanceName; + LPSTR szParentInstance; + DWORD dwInstanceIndex; + LPSTR szCounterName; + } PDH_COUNTER_PATH_ELEMENTS_A,*PPDH_COUNTER_PATH_ELEMENTS_A; + + typedef struct _PDH_COUNTER_PATH_ELEMENTS_W { + LPWSTR szMachineName; + LPWSTR szObjectName; + LPWSTR szInstanceName; + LPWSTR szParentInstance; + DWORD dwInstanceIndex; + LPWSTR szCounterName; + } PDH_COUNTER_PATH_ELEMENTS_W,*PPDH_COUNTER_PATH_ELEMENTS_W; + + typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A { + LPSTR szMachineName; + GUID ObjectGUID; + DWORD dwItemId; + LPSTR szInstanceName; + } PDH_DATA_ITEM_PATH_ELEMENTS_A,*PPDH_DATA_ITEM_PATH_ELEMENTS_A; + + typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W { + LPWSTR szMachineName; + GUID ObjectGUID; + DWORD dwItemId; + LPWSTR szInstanceName; + } PDH_DATA_ITEM_PATH_ELEMENTS_W,*PPDH_DATA_ITEM_PATH_ELEMENTS_W; + + typedef struct _PDH_COUNTER_INFO_A { + DWORD dwLength; + DWORD dwType; + DWORD CVersion; + DWORD CStatus; + LONG lScale; + LONG lDefaultScale; + DWORD_PTR dwUserData; + DWORD_PTR dwQueryUserData; + LPSTR szFullPath; + __MINGW_EXTENSION union { + PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath; + PDH_COUNTER_PATH_ELEMENTS_A CounterPath; + __MINGW_EXTENSION struct { + LPSTR szMachineName; + LPSTR szObjectName; + LPSTR szInstanceName; + LPSTR szParentInstance; + DWORD dwInstanceIndex; + LPSTR szCounterName; + }; + }; + LPSTR szExplainText; + DWORD DataBuffer[1]; + } PDH_COUNTER_INFO_A,*PPDH_COUNTER_INFO_A; + + typedef struct _PDH_COUNTER_INFO_W { + DWORD dwLength; + DWORD dwType; + DWORD CVersion; + DWORD CStatus; + LONG lScale; + LONG lDefaultScale; + DWORD_PTR dwUserData; + DWORD_PTR dwQueryUserData; + LPWSTR szFullPath; + __MINGW_EXTENSION union { + PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath; + PDH_COUNTER_PATH_ELEMENTS_W CounterPath; + __MINGW_EXTENSION struct { + LPWSTR szMachineName; + LPWSTR szObjectName; + LPWSTR szInstanceName; + LPWSTR szParentInstance; + DWORD dwInstanceIndex; + LPWSTR szCounterName; + }; + }; + LPWSTR szExplainText; + DWORD DataBuffer[1]; + } PDH_COUNTER_INFO_W,*PPDH_COUNTER_INFO_W; + + typedef struct _PDH_TIME_INFO { + LONGLONG StartTime; + LONGLONG EndTime; + DWORD SampleCount; + } PDH_TIME_INFO,*PPDH_TIME_INFO; + + typedef struct _PDH_RAW_LOG_RECORD { + DWORD dwStructureSize; + DWORD dwRecordType; + DWORD dwItems; + UCHAR RawBytes[1]; + } PDH_RAW_LOG_RECORD,*PPDH_RAW_LOG_RECORD; + + typedef struct _PDH_LOG_SERVICE_QUERY_INFO_A { + DWORD dwSize; + DWORD dwFlags; + DWORD dwLogQuota; + LPSTR szLogFileCaption; + LPSTR szDefaultDir; + LPSTR szBaseFileName; + DWORD dwFileType; + DWORD dwReserved; + __MINGW_EXTENSION union { + __MINGW_EXTENSION struct { + DWORD PdlAutoNameInterval; + DWORD PdlAutoNameUnits; + LPSTR PdlCommandFilename; + LPSTR PdlCounterList; + DWORD PdlAutoNameFormat; + DWORD PdlSampleInterval; + FILETIME PdlLogStartTime; + FILETIME PdlLogEndTime; + }; + __MINGW_EXTENSION struct { + DWORD TlNumberOfBuffers; + DWORD TlMinimumBuffers; + DWORD TlMaximumBuffers; + DWORD TlFreeBuffers; + DWORD TlBufferSize; + DWORD TlEventsLost; + DWORD TlLoggerThreadId; + DWORD TlBuffersWritten; + DWORD TlLogHandle; + LPSTR TlLogFileName; + }; + }; + } PDH_LOG_SERVICE_QUERY_INFO_A,*PPDH_LOG_SERVICE_QUERY_INFO_A; + + typedef struct _PDH_LOG_SERVICE_QUERY_INFO_W { + DWORD dwSize; + DWORD dwFlags; + DWORD dwLogQuota; + LPWSTR szLogFileCaption; + LPWSTR szDefaultDir; + LPWSTR szBaseFileName; + DWORD dwFileType; + DWORD dwReserved; + __MINGW_EXTENSION union { + __MINGW_EXTENSION struct { + DWORD PdlAutoNameInterval; + DWORD PdlAutoNameUnits; + LPWSTR PdlCommandFilename; + LPWSTR PdlCounterList; + DWORD PdlAutoNameFormat; + DWORD PdlSampleInterval; + FILETIME PdlLogStartTime; + FILETIME PdlLogEndTime; + }; + __MINGW_EXTENSION struct { + DWORD TlNumberOfBuffers; + DWORD TlMinimumBuffers; + DWORD TlMaximumBuffers; + DWORD TlFreeBuffers; + DWORD TlBufferSize; + DWORD TlEventsLost; + DWORD TlLoggerThreadId; + DWORD TlBuffersWritten; + DWORD TlLogHandle; + LPWSTR TlLogFileName; + }; + }; + } PDH_LOG_SERVICE_QUERY_INFO_W,*PPDH_LOG_SERVICE_QUERY_INFO_W; + +#define MAX_TIME_VALUE ((LONGLONG) 0x7FFFFFFFFFFFFFFF) +#define MIN_TIME_VALUE ((LONGLONG) 0) + + PDH_FUNCTION PdhGetDllVersion(LPDWORD lpdwVersion); + PDH_FUNCTION PdhOpenQueryW(LPCWSTR szDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery); + PDH_FUNCTION PdhOpenQueryA(LPCSTR szDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery); + PDH_FUNCTION PdhAddCounterW(PDH_HQUERY hQuery,LPCWSTR szFullCounterPath,DWORD_PTR dwUserData,PDH_HCOUNTER *phCounter); + PDH_FUNCTION PdhAddCounterA(PDH_HQUERY hQuery,LPCSTR szFullCounterPath,DWORD_PTR dwUserData,PDH_HCOUNTER *phCounter); + PDH_FUNCTION PdhRemoveCounter(PDH_HCOUNTER hCounter); + PDH_FUNCTION PdhCollectQueryData(PDH_HQUERY hQuery); + PDH_FUNCTION PdhCloseQuery(PDH_HQUERY hQuery); + PDH_FUNCTION PdhGetFormattedCounterValue(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwType,PPDH_FMT_COUNTERVALUE pValue); + PDH_FUNCTION PdhGetFormattedCounterArrayA(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_FMT_COUNTERVALUE_ITEM_A ItemBuffer); + PDH_FUNCTION PdhGetFormattedCounterArrayW(PDH_HCOUNTER hCounter,DWORD dwFormat,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_FMT_COUNTERVALUE_ITEM_W ItemBuffer); + +#define PDH_FMT_RAW ((DWORD) 0x00000010) +#define PDH_FMT_ANSI ((DWORD) 0x00000020) +#define PDH_FMT_UNICODE ((DWORD) 0x00000040) +#define PDH_FMT_LONG ((DWORD) 0x00000100) +#define PDH_FMT_DOUBLE ((DWORD) 0x00000200) +#define PDH_FMT_LARGE ((DWORD) 0x00000400) +#define PDH_FMT_NOSCALE ((DWORD) 0x00001000) +#define PDH_FMT_1000 ((DWORD) 0x00002000) +#define PDH_FMT_NODATA ((DWORD) 0x00004000) +#define PDH_FMT_NOCAP100 ((DWORD) 0x00008000) +#define PERF_DETAIL_COSTLY ((DWORD) 0x00010000) +#define PERF_DETAIL_STANDARD ((DWORD) 0x0000FFFF) + + PDH_FUNCTION PdhGetRawCounterValue(PDH_HCOUNTER hCounter,LPDWORD lpdwType,PPDH_RAW_COUNTER pValue); + PDH_FUNCTION PdhGetRawCounterArrayA(PDH_HCOUNTER hCounter,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_RAW_COUNTER_ITEM_A ItemBuffer); + PDH_FUNCTION PdhGetRawCounterArrayW(PDH_HCOUNTER hCounter,LPDWORD lpdwBufferSize,LPDWORD lpdwItemCount,PPDH_RAW_COUNTER_ITEM_W ItemBuffer); + PDH_FUNCTION PdhCalculateCounterFromRawValue(PDH_HCOUNTER hCounter,DWORD dwFormat,PPDH_RAW_COUNTER rawValue1,PPDH_RAW_COUNTER rawValue2,PPDH_FMT_COUNTERVALUE fmtValue); + PDH_FUNCTION PdhComputeCounterStatistics(PDH_HCOUNTER hCounter,DWORD dwFormat,DWORD dwFirstEntry,DWORD dwNumEntries,PPDH_RAW_COUNTER lpRawValueArray,PPDH_STATISTICS data); + PDH_FUNCTION PdhGetCounterInfoW(PDH_HCOUNTER hCounter,BOOLEAN bRetrieveExplainText,LPDWORD pdwBufferSize,PPDH_COUNTER_INFO_W lpBuffer); + PDH_FUNCTION PdhGetCounterInfoA(PDH_HCOUNTER hCounter,BOOLEAN bRetrieveExplainText,LPDWORD pdwBufferSize,PPDH_COUNTER_INFO_A lpBuffer); + +#define PDH_MAX_SCALE (7L) +#define PDH_MIN_SCALE (-7L) + + PDH_FUNCTION PdhSetCounterScaleFactor(PDH_HCOUNTER hCounter,LONG lFactor); + PDH_FUNCTION PdhConnectMachineW(LPCWSTR szMachineName); + PDH_FUNCTION PdhConnectMachineA(LPCSTR szMachineName); + PDH_FUNCTION PdhEnumMachinesW(LPCWSTR szDataSource,LPWSTR mszMachineList,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhEnumMachinesA(LPCSTR szDataSource,LPSTR mszMachineList,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhEnumObjectsW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPWSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh); + PDH_FUNCTION PdhEnumObjectsA(LPCSTR szDataSource,LPCSTR szMachineName,LPSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh); + PDH_FUNCTION PdhEnumObjectItemsW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR mszCounterList,LPDWORD pcchCounterListLength,LPWSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags); + PDH_FUNCTION PdhEnumObjectItemsA(LPCSTR szDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR mszCounterList,LPDWORD pcchCounterListLength,LPSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags); + +#define PDH_OBJECT_HAS_INSTANCES ((DWORD) 0x00000001) + + PDH_FUNCTION PdhMakeCounterPathW(PPDH_COUNTER_PATH_ELEMENTS_W pCounterPathElements,LPWSTR szFullPathBuffer,LPDWORD pcchBufferSize,DWORD dwFlags); + PDH_FUNCTION PdhMakeCounterPathA(PPDH_COUNTER_PATH_ELEMENTS_A pCounterPathElements,LPSTR szFullPathBuffer,LPDWORD pcchBufferSize,DWORD dwFlags); + PDH_FUNCTION PdhParseCounterPathW(LPCWSTR szFullPathBuffer,PPDH_COUNTER_PATH_ELEMENTS_W pCounterPathElements,LPDWORD pdwBufferSize,DWORD dwFlags); + PDH_FUNCTION PdhParseCounterPathA(LPCSTR szFullPathBuffer,PPDH_COUNTER_PATH_ELEMENTS_A pCounterPathElements,LPDWORD pdwBufferSize,DWORD dwFlags); + +#define PDH_PATH_WBEM_RESULT ((DWORD) 0x00000001) +#define PDH_PATH_WBEM_INPUT ((DWORD) 0x00000002) + +#define PDH_PATH_LANG_FLAGS(LangId,Flags) ((DWORD)(((LangId & 0x0000FFFF) << 16) | (Flags & 0x0000FFFF))) + + PDH_FUNCTION PdhParseInstanceNameW(LPCWSTR szInstanceString,LPWSTR szInstanceName,LPDWORD pcchInstanceNameLength,LPWSTR szParentName,LPDWORD pcchParentNameLength,LPDWORD lpIndex); + PDH_FUNCTION PdhParseInstanceNameA(LPCSTR szInstanceString,LPSTR szInstanceName,LPDWORD pcchInstanceNameLength,LPSTR szParentName,LPDWORD pcchParentNameLength,LPDWORD lpIndex); + PDH_FUNCTION PdhValidatePathW(LPCWSTR szFullPathBuffer); + PDH_FUNCTION PdhValidatePathA(LPCSTR szFullPathBuffer); + PDH_FUNCTION PdhGetDefaultPerfObjectW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPWSTR szDefaultObjectName,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhGetDefaultPerfObjectA(LPCSTR szDataSource,LPCSTR szMachineName,LPSTR szDefaultObjectName,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhGetDefaultPerfCounterW(LPCWSTR szDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR szDefaultCounterName,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhGetDefaultPerfCounterA(LPCSTR szDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR szDefaultCounterName,LPDWORD pcchBufferSize); + + typedef PDH_STATUS (WINAPI *CounterPathCallBack)(DWORD_PTR); + + typedef struct _BrowseDlgConfig_HW { + DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved : 22; + HWND hWndOwner; + PDH_HLOG hDataSource; + LPWSTR szReturnPathBuffer; + DWORD cchReturnPathLength; + CounterPathCallBack pCallBack; + DWORD_PTR dwCallBackArg; + PDH_STATUS CallBackStatus; + DWORD dwDefaultDetailLevel; + LPWSTR szDialogBoxCaption; + } PDH_BROWSE_DLG_CONFIG_HW,*PPDH_BROWSE_DLG_CONFIG_HW; + + typedef struct _BrowseDlgConfig_HA { + DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22; + HWND hWndOwner; + PDH_HLOG hDataSource; + LPSTR szReturnPathBuffer; + DWORD cchReturnPathLength; + CounterPathCallBack pCallBack; + DWORD_PTR dwCallBackArg; + PDH_STATUS CallBackStatus; + DWORD dwDefaultDetailLevel; + LPSTR szDialogBoxCaption; + } PDH_BROWSE_DLG_CONFIG_HA,*PPDH_BROWSE_DLG_CONFIG_HA; + + typedef struct _BrowseDlgConfig_W { + DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22; + HWND hWndOwner; + LPWSTR szDataSource; + LPWSTR szReturnPathBuffer; + DWORD cchReturnPathLength; + CounterPathCallBack pCallBack; + DWORD_PTR dwCallBackArg; + PDH_STATUS CallBackStatus; + DWORD dwDefaultDetailLevel; + LPWSTR szDialogBoxCaption; + } PDH_BROWSE_DLG_CONFIG_W,*PPDH_BROWSE_DLG_CONFIG_W; + + typedef struct _BrowseDlgConfig_A { + DWORD bIncludeInstanceIndex : 1,bSingleCounterPerAdd : 1,bSingleCounterPerDialog : 1,bLocalCountersOnly : 1,bWildCardInstances : 1,bHideDetailBox : 1,bInitializePath : 1,bDisableMachineSelection : 1,bIncludeCostlyObjects : 1,bShowObjectBrowser : 1,bReserved:22; + HWND hWndOwner; + LPSTR szDataSource; + LPSTR szReturnPathBuffer; + DWORD cchReturnPathLength; + CounterPathCallBack pCallBack; + DWORD_PTR dwCallBackArg; + PDH_STATUS CallBackStatus; + DWORD dwDefaultDetailLevel; + LPSTR szDialogBoxCaption; + } PDH_BROWSE_DLG_CONFIG_A,*PPDH_BROWSE_DLG_CONFIG_A; + + PDH_FUNCTION PdhBrowseCountersW(PPDH_BROWSE_DLG_CONFIG_W pBrowseDlgData); + PDH_FUNCTION PdhBrowseCountersA(PPDH_BROWSE_DLG_CONFIG_A pBrowseDlgData); + PDH_FUNCTION PdhExpandCounterPathW(LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength); + PDH_FUNCTION PdhExpandCounterPathA(LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength); + PDH_FUNCTION PdhLookupPerfNameByIndexW(LPCWSTR szMachineName,DWORD dwNameIndex,LPWSTR szNameBuffer,LPDWORD pcchNameBufferSize); + PDH_FUNCTION PdhLookupPerfNameByIndexA(LPCSTR szMachineName,DWORD dwNameIndex,LPSTR szNameBuffer,LPDWORD pcchNameBufferSize); + PDH_FUNCTION PdhLookupPerfIndexByNameW(LPCWSTR szMachineName,LPCWSTR szNameBuffer,LPDWORD pdwIndex); + PDH_FUNCTION PdhLookupPerfIndexByNameA(LPCSTR szMachineName,LPCSTR szNameBuffer,LPDWORD pdwIndex); + +#define PDH_NOEXPANDCOUNTERS 1 +#define PDH_NOEXPANDINSTANCES 2 +#define PDH_REFRESHCOUNTERS 4 + + PDH_FUNCTION PdhExpandWildCardPathA(LPCSTR szDataSource,LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags); + PDH_FUNCTION PdhExpandWildCardPathW(LPCWSTR szDataSource,LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags); + +#define PDH_LOG_READ_ACCESS ((DWORD) 0x00010000) +#define PDH_LOG_WRITE_ACCESS ((DWORD) 0x00020000) +#define PDH_LOG_UPDATE_ACCESS ((DWORD) 0x00040000) +#define PDH_LOG_ACCESS_MASK ((DWORD) 0x000F0000) + +#define PDH_LOG_CREATE_NEW ((DWORD) 0x00000001) +#define PDH_LOG_CREATE_ALWAYS ((DWORD) 0x00000002) +#define PDH_LOG_OPEN_ALWAYS ((DWORD) 0x00000003) +#define PDH_LOG_OPEN_EXISTING ((DWORD) 0x00000004) +#define PDH_LOG_CREATE_MASK ((DWORD) 0x0000000F) + +#define PDH_LOG_OPT_USER_STRING ((DWORD) 0x01000000) +#define PDH_LOG_OPT_CIRCULAR ((DWORD) 0x02000000) +#define PDH_LOG_OPT_MAX_IS_BYTES ((DWORD) 0x04000000) +#define PDH_LOG_OPT_APPEND ((DWORD) 0x08000000) +#define PDH_LOG_OPT_MASK ((DWORD) 0x0F000000) + +#define PDH_LOG_TYPE_UNDEFINED 0 +#define PDH_LOG_TYPE_CSV 1 +#define PDH_LOG_TYPE_TSV 2 + +#define PDH_LOG_TYPE_TRACE_KERNEL 4 +#define PDH_LOG_TYPE_TRACE_GENERIC 5 +#define PDH_LOG_TYPE_PERFMON 6 +#define PDH_LOG_TYPE_SQL 7 +#define PDH_LOG_TYPE_BINARY 8 + + PDH_FUNCTION PdhOpenLogW(LPCWSTR szLogFileName,DWORD dwAccessFlags,LPDWORD lpdwLogType,PDH_HQUERY hQuery,DWORD dwMaxSize,LPCWSTR szUserCaption,PDH_HLOG *phLog); + PDH_FUNCTION PdhOpenLogA(LPCSTR szLogFileName,DWORD dwAccessFlags,LPDWORD lpdwLogType,PDH_HQUERY hQuery,DWORD dwMaxSize,LPCSTR szUserCaption,PDH_HLOG *phLog); + PDH_FUNCTION PdhUpdateLogW(PDH_HLOG hLog,LPCWSTR szUserString); + PDH_FUNCTION PdhUpdateLogA(PDH_HLOG hLog,LPCSTR szUserString); + PDH_FUNCTION PdhUpdateLogFileCatalog(PDH_HLOG hLog); + PDH_FUNCTION PdhGetLogFileSize(PDH_HLOG hLog,LONGLONG *llSize); + PDH_FUNCTION PdhCloseLog(PDH_HLOG hLog,DWORD dwFlags); + +#define PDH_FLAGS_CLOSE_QUERY ((DWORD) 0x00000001) +#define PDH_FLAGS_FILE_BROWSER_ONLY ((DWORD) 0x00000001) + + PDH_FUNCTION PdhSelectDataSourceW(HWND hWndOwner,DWORD dwFlags,LPWSTR szDataSource,LPDWORD pcchBufferLength); + PDH_FUNCTION PdhSelectDataSourceA(HWND hWndOwner,DWORD dwFlags,LPSTR szDataSource,LPDWORD pcchBufferLength); + WINBOOL PdhIsRealTimeQuery(PDH_HQUERY hQuery); + PDH_FUNCTION PdhSetQueryTimeRange(PDH_HQUERY hQuery,PPDH_TIME_INFO pInfo); + PDH_FUNCTION PdhGetDataSourceTimeRangeW(LPCWSTR szDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD pdwBufferSize); + PDH_FUNCTION PdhGetDataSourceTimeRangeA(LPCSTR szDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD dwBufferSize); + PDH_FUNCTION PdhCollectQueryDataEx(PDH_HQUERY hQuery,DWORD dwIntervalTime,HANDLE hNewDataEvent); + PDH_FUNCTION PdhFormatFromRawValue(DWORD dwCounterType,DWORD dwFormat,LONGLONG *pTimeBase,PPDH_RAW_COUNTER pRawValue1,PPDH_RAW_COUNTER pRawValue2,PPDH_FMT_COUNTERVALUE pFmtValue); + PDH_FUNCTION PdhGetCounterTimeBase(PDH_HCOUNTER hCounter,LONGLONG *pTimeBase); + PDH_FUNCTION PdhReadRawLogRecord(PDH_HLOG hLog,FILETIME ftRecord,PPDH_RAW_LOG_RECORD pRawLogRecord,LPDWORD pdwBufferLength); + +#define DATA_SOURCE_REGISTRY ((DWORD) 0x00000001) +#define DATA_SOURCE_LOGFILE ((DWORD) 0x00000002) +#define DATA_SOURCE_WBEM ((DWORD) 0x00000004) + + PDH_FUNCTION PdhSetDefaultRealTimeDataSource(DWORD dwDataSourceId); + PDH_FUNCTION PdhBindInputDataSourceW(PDH_HLOG *phDataSource,LPCWSTR LogFileNameList); + PDH_FUNCTION PdhBindInputDataSourceA(PDH_HLOG *phDataSource,LPCSTR LogFileNameList); + PDH_FUNCTION PdhOpenQueryH(PDH_HLOG hDataSource,DWORD_PTR dwUserData,PDH_HQUERY *phQuery); + PDH_FUNCTION PdhEnumMachinesHW(PDH_HLOG hDataSource,LPWSTR mszMachineList,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhEnumMachinesHA(PDH_HLOG hDataSource,LPSTR mszMachineList,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhEnumObjectsHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPWSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh); + PDH_FUNCTION PdhEnumObjectsHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPSTR mszObjectList,LPDWORD pcchBufferSize,DWORD dwDetailLevel,WINBOOL bRefresh); + PDH_FUNCTION PdhEnumObjectItemsHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR mszCounterList,LPDWORD pcchCounterListLength,LPWSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags); + PDH_FUNCTION PdhEnumObjectItemsHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR mszCounterList,LPDWORD pcchCounterListLength,LPSTR mszInstanceList,LPDWORD pcchInstanceListLength,DWORD dwDetailLevel,DWORD dwFlags); + PDH_FUNCTION PdhExpandWildCardPathHW(PDH_HLOG hDataSource,LPCWSTR szWildCardPath,LPWSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags); + PDH_FUNCTION PdhExpandWildCardPathHA(PDH_HLOG hDataSource,LPCSTR szWildCardPath,LPSTR mszExpandedPathList,LPDWORD pcchPathListLength,DWORD dwFlags); + PDH_FUNCTION PdhGetDataSourceTimeRangeH(PDH_HLOG hDataSource,LPDWORD pdwNumEntries,PPDH_TIME_INFO pInfo,LPDWORD pdwBufferSize); + PDH_FUNCTION PdhGetDefaultPerfObjectHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPWSTR szDefaultObjectName,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhGetDefaultPerfObjectHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPSTR szDefaultObjectName,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhGetDefaultPerfCounterHW(PDH_HLOG hDataSource,LPCWSTR szMachineName,LPCWSTR szObjectName,LPWSTR szDefaultCounterName,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhGetDefaultPerfCounterHA(PDH_HLOG hDataSource,LPCSTR szMachineName,LPCSTR szObjectName,LPSTR szDefaultCounterName,LPDWORD pcchBufferSize); + PDH_FUNCTION PdhBrowseCountersHW(PPDH_BROWSE_DLG_CONFIG_HW pBrowseDlgData); + PDH_FUNCTION PdhBrowseCountersHA(PPDH_BROWSE_DLG_CONFIG_HA pBrowseDlgData); + PDH_FUNCTION PdhVerifySQLDBW(LPCWSTR szDataSource); + PDH_FUNCTION PdhVerifySQLDBA(LPCSTR szDataSource); + PDH_FUNCTION PdhCreateSQLTablesW(LPCWSTR szDataSource); + PDH_FUNCTION PdhCreateSQLTablesA(LPCSTR szDataSource); + PDH_FUNCTION PdhEnumLogSetNamesW(LPCWSTR szDataSource,LPWSTR mszDataSetNameList,LPDWORD pcchBufferLength); + PDH_FUNCTION PdhEnumLogSetNamesA(LPCSTR szDataSource,LPSTR mszDataSetNameList,LPDWORD pcchBufferLength); + PDH_FUNCTION PdhGetLogSetGUID(PDH_HLOG hLog,GUID *pGuid,int *pRunId); + PDH_FUNCTION PdhSetLogSetRunID(PDH_HLOG hLog,int RunId); + +#if defined(UNICODE) +#ifndef _UNICODE +#define _UNICODE +#endif +#endif + +#if defined(_UNICODE) +#if !defined(UNICODE) +#define UNICODE +#endif +#endif + +#define PDH_COUNTER_INFO __MINGW_NAME_UAW(PDH_COUNTER_INFO) +#define PPDH_COUNTER_INFO __MINGW_NAME_UAW(PPDH_COUNTER_INFO) +#define PDH_COUNTER_PATH_ELEMENTS __MINGW_NAME_UAW(PDH_COUNTER_PATH_ELEMENTS) +#define PPDH_COUNTER_PATH_ELEMENTS __MINGW_NAME_UAW(PPDH_COUNTER_PATH_ELEMENTS) +#define PDH_BROWSE_DLG_CONFIG __MINGW_NAME_UAW(PDH_BROWSE_DLG_CONFIG) +#define PPDH_BROWSE_DLG_CONFIG __MINGW_NAME_UAW(PPDH_BROWSE_DLG_CONFIG) +#define PDH_FMT_COUNTERVALUE_ITEM __MINGW_NAME_UAW(PDH_FMT_COUNTERVALUE_ITEM) +#define PPDH_FMT_COUNTERVALUE_ITEM __MINGW_NAME_UAW(PPDH_FMT_COUNTERVALUE_ITEM) +#define PDH_RAW_COUNTER_ITEM __MINGW_NAME_UAW(PDH_RAW_COUNTER_ITEM) +#define PPDH_RAW_COUNTER_ITEM __MINGW_NAME_UAW(PPDH_RAW_COUNTER_ITEM) +#define PDH_LOG_SERVICE_QUERY_INFO __MINGW_NAME_UAW(PDH_LOG_SERVICE_QUERY_INFO) +#define PPDH_LOG_SERVICE_QUERY_INFO __MINGW_NAME_UAW(PPDH_LOG_SERVICE_QUERY_INFO) + +#define PDH_BROWSE_DLG_CONFIG_H __MINGW_NAME_AW(PDH_BROWSE_DLG_CONFIG_H) +#define PPDH_BROWSE_DLG_CONFIG_H __MINGW_NAME_AW(PPDH_BROWSE_DLG_CONFIG_H) + +#define PdhOpenQuery __MINGW_NAME_AW(PdhOpenQuery) +#define PdhAddCounter __MINGW_NAME_AW(PdhAddCounter) +#define PdhGetCounterInfo __MINGW_NAME_AW(PdhGetCounterInfo) +#define PdhConnectMachine __MINGW_NAME_AW(PdhConnectMachine) +#define PdhEnumMachines __MINGW_NAME_AW(PdhEnumMachines) +#define PdhEnumObjects __MINGW_NAME_AW(PdhEnumObjects) +#define PdhEnumObjectItems __MINGW_NAME_AW(PdhEnumObjectItems) +#define PdhMakeCounterPath __MINGW_NAME_AW(PdhMakeCounterPath) +#define PdhParseCounterPath __MINGW_NAME_AW(PdhParseCounterPath) +#define PdhParseInstanceName __MINGW_NAME_AW(PdhParseInstanceName) +#define PdhValidatePath __MINGW_NAME_AW(PdhValidatePath) +#define PdhGetDefaultPerfObject __MINGW_NAME_AW(PdhGetDefaultPerfObject) +#define PdhGetDefaultPerfCounter __MINGW_NAME_AW(PdhGetDefaultPerfCounter) +#define PdhBrowseCounters __MINGW_NAME_AW(PdhBrowseCounters) +#define PdhBrowseCountersH __MINGW_NAME_AW(PdhBrowseCountersH) +#define PdhExpandCounterPath __MINGW_NAME_AW(PdhExpandCounterPath) +#define PdhGetFormattedCounterArray __MINGW_NAME_AW(PdhGetFormattedCounterArray) +#define PdhGetRawCounterArray __MINGW_NAME_AW(PdhGetRawCounterArray) +#define PdhLookupPerfNameByIndex __MINGW_NAME_AW(PdhLookupPerfNameByIndex) +#define PdhLookupPerfIndexByName __MINGW_NAME_AW(PdhLookupPerfIndexByName) +#define PdhOpenLog __MINGW_NAME_AW(PdhOpenLog) +#define PdhUpdateLog __MINGW_NAME_AW(PdhUpdateLog) +#define PdhSelectDataSource __MINGW_NAME_AW(PdhSelectDataSource) +#define PdhGetDataSourceTimeRange __MINGW_NAME_AW(PdhGetDataSourceTimeRange) +#define PdhLogServiceControl __MINGW_NAME_AW(PdhLogServiceControl) +#define PdhLogServiceQuery __MINGW_NAME_AW(PdhLogServiceQuery) +#define PdhExpandWildCardPath __MINGW_NAME_AW(PdhExpandWildCardPath) +#define PdhBindInputDataSource __MINGW_NAME_AW(PdhBindInputDataSource) +#define PdhEnumMachinesH __MINGW_NAME_AW(PdhEnumMachinesH) +#define PdhEnumObjectsH __MINGW_NAME_AW(PdhEnumObjectsH) +#define PdhEnumObjectItemsH __MINGW_NAME_AW(PdhEnumObjectItemsH) +#define PdhExpandWildCardPathH __MINGW_NAME_AW(PdhExpandWildCardPathH) +#define PdhGetDefaultPerfObjectH __MINGW_NAME_AW(PdhGetDefaultPerfObjectH) +#define PdhGetDefaultPerfCounterH __MINGW_NAME_AW(PdhGetDefaultPerfCounterH) +#define PdhEnumLogSetNames __MINGW_NAME_AW(PdhEnumLogSetNames) +#define PdhCreateSQLTables __MINGW_NAME_AW(PdhCreateSQLTables) +#define PdhVerifySQLDB __MINGW_NAME_AW(PdhVerifySQLDB) + +#if (_WIN32_WINNT >= 0x0600) +PDH_STATUS PdhAddEnglishCounterA( + PDH_HQUERY hQuery, + LPCSTR szFullCounterPath, + DWORD_PTR dwUserData, + PDH_HCOUNTER *phCounter +); + +PDH_STATUS PdhAddEnglishCounterW( + PDH_HQUERY hQuery, + LPCWSTR szFullCounterPath, + DWORD_PTR dwUserData, + PDH_HCOUNTER *phCounter +); + +#define PdhAddEnglishCounter __MINGW_NAME_AW(PdhAddEnglishCounter) + +PDH_STATUS PdhCollectQueryDataWithTime( + PDH_HQUERY hQuery, + LONGLONG *pllTimeStamp +); + +PDH_STATUS PdhValidatePathExA( + PDH_HLOG hDataSource, + LPCSTR szFullPathBuffer +); + +PDH_STATUS PdhValidatePathExA( + PDH_HLOG hDataSource, + LPCWSTR szFullPathBuffer +); + +#define PdhValidatePathEx __MINGW_NAME_AW(PdhValidatePathEx) + +#endif /*(_WIN32_WINNT >= 0x0600)*/ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/win32ctl/include/pdhmsg.h b/src/win32ctl/include/pdhmsg.h new file mode 100644 index 0000000..fc3b42a --- /dev/null +++ b/src/win32ctl/include/pdhmsg.h @@ -0,0 +1,101 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _PDH_MSG_H_ +#define _PDH_MSG_H_ + +#define STATUS_SEVERITY_WARNING 0x2 +#define STATUS_SEVERITY_SUCCESS 0x0 +#define STATUS_SEVERITY_INFORMATIONAL 0x1 +#define STATUS_SEVERITY_ERROR 0x3 + +#define PDH_CSTATUS_VALID_DATA ((DWORD)0x00000000L) +#define PDH_CSTATUS_NEW_DATA ((DWORD)0x00000001L) +#define PDH_CSTATUS_NO_MACHINE ((DWORD)0x800007D0L) +#define PDH_CSTATUS_NO_INSTANCE ((DWORD)0x800007D1L) +#define PDH_MORE_DATA ((DWORD)0x800007D2L) +#define PDH_CSTATUS_ITEM_NOT_VALIDATED ((DWORD)0x800007D3L) +#define PDH_RETRY ((DWORD)0x800007D4L) +#define PDH_NO_DATA ((DWORD)0x800007D5L) +#define PDH_CALC_NEGATIVE_DENOMINATOR ((DWORD)0x800007D6L) +#define PDH_CALC_NEGATIVE_TIMEBASE ((DWORD)0x800007D7L) +#define PDH_CALC_NEGATIVE_VALUE ((DWORD)0x800007D8L) +#define PDH_DIALOG_CANCELLED ((DWORD)0x800007D9L) +#define PDH_END_OF_LOG_FILE ((DWORD)0x800007DAL) +#define PDH_ASYNC_QUERY_TIMEOUT ((DWORD)0x800007DBL) +#define PDH_CANNOT_SET_DEFAULT_REALTIME_DATASOURCE ((DWORD)0x800007DCL) +#define PDH_CSTATUS_NO_OBJECT ((DWORD)0xC0000BB8L) +#define PDH_CSTATUS_NO_COUNTER ((DWORD)0xC0000BB9L) +#define PDH_CSTATUS_INVALID_DATA ((DWORD)0xC0000BBAL) +#define PDH_MEMORY_ALLOCATION_FAILURE ((DWORD)0xC0000BBBL) +#define PDH_INVALID_HANDLE ((DWORD)0xC0000BBCL) +#define PDH_INVALID_ARGUMENT ((DWORD)0xC0000BBDL) +#define PDH_FUNCTION_NOT_FOUND ((DWORD)0xC0000BBEL) +#define PDH_CSTATUS_NO_COUNTERNAME ((DWORD)0xC0000BBFL) +#define PDH_CSTATUS_BAD_COUNTERNAME ((DWORD)0xC0000BC0L) +#define PDH_INVALID_BUFFER ((DWORD)0xC0000BC1L) +#define PDH_INSUFFICIENT_BUFFER ((DWORD)0xC0000BC2L) +#define PDH_CANNOT_CONNECT_MACHINE ((DWORD)0xC0000BC3L) +#define PDH_INVALID_PATH ((DWORD)0xC0000BC4L) +#define PDH_INVALID_INSTANCE ((DWORD)0xC0000BC5L) +#define PDH_INVALID_DATA ((DWORD)0xC0000BC6L) +#define PDH_NO_DIALOG_DATA ((DWORD)0xC0000BC7L) +#define PDH_CANNOT_READ_NAME_STRINGS ((DWORD)0xC0000BC8L) +#define PDH_LOG_FILE_CREATE_ERROR ((DWORD)0xC0000BC9L) +#define PDH_LOG_FILE_OPEN_ERROR ((DWORD)0xC0000BCAL) +#define PDH_LOG_TYPE_NOT_FOUND ((DWORD)0xC0000BCBL) +#define PDH_NO_MORE_DATA ((DWORD)0xC0000BCCL) +#define PDH_ENTRY_NOT_IN_LOG_FILE ((DWORD)0xC0000BCDL) +#define PDH_DATA_SOURCE_IS_LOG_FILE ((DWORD)0xC0000BCEL) +#define PDH_DATA_SOURCE_IS_REAL_TIME ((DWORD)0xC0000BCFL) +#define PDH_UNABLE_READ_LOG_HEADER ((DWORD)0xC0000BD0L) +#define PDH_FILE_NOT_FOUND ((DWORD)0xC0000BD1L) +#define PDH_FILE_ALREADY_EXISTS ((DWORD)0xC0000BD2L) +#define PDH_NOT_IMPLEMENTED ((DWORD)0xC0000BD3L) +#define PDH_STRING_NOT_FOUND ((DWORD)0xC0000BD4L) +#define PDH_UNABLE_MAP_NAME_FILES ((DWORD)0x80000BD5L) +#define PDH_UNKNOWN_LOG_FORMAT ((DWORD)0xC0000BD6L) +#define PDH_UNKNOWN_LOGSVC_COMMAND ((DWORD)0xC0000BD7L) +#define PDH_LOGSVC_QUERY_NOT_FOUND ((DWORD)0xC0000BD8L) +#define PDH_LOGSVC_NOT_OPENED ((DWORD)0xC0000BD9L) +#define PDH_WBEM_ERROR ((DWORD)0xC0000BDAL) +#define PDH_ACCESS_DENIED ((DWORD)0xC0000BDBL) +#define PDH_LOG_FILE_TOO_SMALL ((DWORD)0xC0000BDCL) +#define PDH_INVALID_DATASOURCE ((DWORD)0xC0000BDDL) +#define PDH_INVALID_SQLDB ((DWORD)0xC0000BDEL) +#define PDH_NO_COUNTERS ((DWORD)0xC0000BDFL) +#define PDH_SQL_ALLOC_FAILED ((DWORD)0xC0000BE0L) +#define PDH_SQL_ALLOCCON_FAILED ((DWORD)0xC0000BE1L) +#define PDH_SQL_EXEC_DIRECT_FAILED ((DWORD)0xC0000BE2L) +#define PDH_SQL_FETCH_FAILED ((DWORD)0xC0000BE3L) +#define PDH_SQL_ROWCOUNT_FAILED ((DWORD)0xC0000BE4L) +#define PDH_SQL_MORE_RESULTS_FAILED ((DWORD)0xC0000BE5L) +#define PDH_SQL_CONNECT_FAILED ((DWORD)0xC0000BE6L) +#define PDH_SQL_BIND_FAILED ((DWORD)0xC0000BE7L) +#define PDH_CANNOT_CONNECT_WMI_SERVER ((DWORD)0xC0000BE8L) +#define PDH_PLA_COLLECTION_ALREADY_RUNNING ((DWORD)0xC0000BE9L) +#define PDH_PLA_ERROR_SCHEDULE_OVERLAP ((DWORD)0xC0000BEAL) +#define PDH_PLA_COLLECTION_NOT_FOUND ((DWORD)0xC0000BEBL) +#define PDH_PLA_ERROR_SCHEDULE_ELAPSED ((DWORD)0xC0000BECL) +#define PDH_PLA_ERROR_NOSTART ((DWORD)0xC0000BEDL) +#define PDH_PLA_ERROR_ALREADY_EXISTS ((DWORD)0xC0000BEEL) +#define PDH_PLA_ERROR_TYPE_MISMATCH ((DWORD)0xC0000BEFL) +#define PDH_PLA_ERROR_FILEPATH ((DWORD)0xC0000BF0L) +#define PDH_PLA_SERVICE_ERROR ((DWORD)0xC0000BF1L) +#define PDH_PLA_VALIDATION_ERROR ((DWORD)0xC0000BF2L) +#define PDH_PLA_VALIDATION_WARNING ((DWORD)0x80000BF3L) +#define PDH_PLA_ERROR_NAME_TOO_LONG ((DWORD)0xC0000BF4L) +#define PDH_INVALID_SQL_LOG_FORMAT ((DWORD)0xC0000BF5L) +#define PDH_COUNTER_ALREADY_IN_QUERY ((DWORD)0xC0000BF6L) +#define PDH_BINARY_LOG_CORRUPT ((DWORD)0xC0000BF7L) +#define PDH_LOG_SAMPLE_TOO_SMALL ((DWORD)0xC0000BF8L) +#define PDH_OS_LATER_VERSION ((DWORD)0xC0000BF9L) +#define PDH_OS_EARLIER_VERSION ((DWORD)0xC0000BFAL) +#define PDH_INCORRECT_APPEND_TIME ((DWORD)0xC0000BFBL) +#define PDH_UNMATCHED_APPEND_COUNTER ((DWORD)0xC0000BFCL) +#define PDH_SQL_ALTER_DETAIL_FAILED ((DWORD)0xC0000BFDL) +#define PDH_QUERY_PERF_DATA_TIMEOUT ((DWORD)0xC0000BFEL) + +#endif diff --git a/src/win32ctl/include/pshpack8.h b/src/win32ctl/include/pshpack8.h new file mode 100644 index 0000000..61f803f --- /dev/null +++ b/src/win32ctl/include/pshpack8.h @@ -0,0 +1,8 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#if !(defined(lint) || defined(RC_INVOKED)) +#pragma pack(push,8) +#endif diff --git a/src/win32ctl/include/tdh.h b/src/win32ctl/include/tdh.h new file mode 100644 index 0000000..745c248 --- /dev/null +++ b/src/win32ctl/include/tdh.h @@ -0,0 +1,329 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _INC_TDH +#define _INC_TDH + +/* --- start added by kenj */ +#undef __MINGW_EXTENSION +#if defined(__GNUC__) || defined(__GNUG__) +#define __MINGW_EXTENSION __extension__ +#else +#define __MINGW_EXTENSION +#endif +/* --- end added by kenj */ + +#include <evntprov.h> +#include <evntcons.h> +#if (_WIN32_WINNT >= 0x0600) + +#ifdef __cplusplus +extern "C" { +#endif + +#define __TDHCACHE_ALIGN __attribute__ ((aligned (8))) + +typedef enum _EVENT_FIELD_TYPE { + EventKeywordInformation = 0, + EventLevelInformation = 1, + EventChannelInformation = 2, + EventTaskInformation = 3, + EventOpcodeInformation = 4, + EventInformationMax = 5 +} EVENT_FIELD_TYPE; + +typedef struct _EVENT_MAP_ENTRY { + ULONG OutputOffset; + __MINGW_EXTENSION union { + ULONG Value; + ULONG InputOffset; + }; +} __TDHCACHE_ALIGN EVENT_MAP_ENTRY, *PEVENT_MAP_ENTRY; + +typedef enum _MAP_VALUETYPE +{ + EVENTMAP_ENTRY_VALUETYPE_ULONG = 0, + EVENTMAP_ENTRY_VALUETYPE_STRING = 1 +} MAP_VALUETYPE; + +typedef enum _MAP_FLAGS { + EVENTMAP_INFO_FLAG_MANIFEST_VALUEMAP = 1, + EVENTMAP_INFO_FLAG_MANIFEST_BITMAP = 2, + EVENTMAP_INFO_FLAG_MANIFEST_PATTERNMAP = 4, + EVENTMAP_INFO_FLAG_WBEM_VALUEMAP = 8, + EVENTMAP_INFO_FLAG_WBEM_BITMAP = 16, + EVENTMAP_INFO_FLAG_WBEM_FLAG = 32, + EVENTMAP_INFO_FLAG_WBEM_NO_MAP = 64 +} MAP_FLAGS; + +typedef struct _EVENT_MAP_INFO { + ULONG NameOffset; + MAP_FLAGS Flag; + ULONG EntryCount; + __MINGW_EXTENSION union { + MAP_VALUETYPE MapEntryValueType; + ULONG FormatStringOffset; + }; + EVENT_MAP_ENTRY MapEntryArray[ANYSIZE_ARRAY]; +} __TDHCACHE_ALIGN EVENT_MAP_INFO, *PEVENT_MAP_INFO; + +typedef enum _TDH_IN_TYPE { + TDH_INTYPE_NULL, + TDH_INTYPE_UNICODESTRING, + TDH_INTYPE_ANSISTRING, + TDH_INTYPE_INT8, + TDH_INTYPE_UINT8, + TDH_INTYPE_INT16, + TDH_INTYPE_UINT16, + TDH_INTYPE_INT32, + TDH_INTYPE_UINT32, + TDH_INTYPE_INT64, + TDH_INTYPE_UINT64, + TDH_INTYPE_FLOAT, + TDH_INTYPE_DOUBLE, + TDH_INTYPE_BOOLEAN, + TDH_INTYPE_BINARY, + TDH_INTYPE_GUID, + TDH_INTYPE_POINTER, + TDH_INTYPE_FILETIME, + TDH_INTYPE_SYSTEMTIME, + TDH_INTYPE_SID, + TDH_INTYPE_HEXINT32, + TDH_INTYPE_HEXINT64, + TDH_INTYPE_COUNTEDSTRING = 300, + TDH_INTYPE_COUNTEDANSISTRING, + TDH_INTYPE_REVERSEDCOUNTEDSTRING, + TDH_INTYPE_REVERSEDCOUNTEDANSISTRING, + TDH_INTYPE_NONNULLTERMINATEDSTRING, + TDH_INTYPE_NONNULLTERMINATEDANSISTRING, + TDH_INTYPE_UNICODECHAR, + TDH_INTYPE_ANSICHAR, + TDH_INTYPE_SIZET, + TDH_INTYPE_HEXDUMP, + TDH_INTYPE_WBEMSID +} TDH_IN_TYPE; + +typedef enum _TDH_OUT_TYPE { + TDH_OUTTYPE_NULL, + TDH_OUTTYPE_STRING, + TDH_OUTTYPE_DATETIME, + TDH_OUTTYPE_BYTE, + TDH_OUTTYPE_UNSIGNEDBYTE, + TDH_OUTTYPE_SHORT, + TDH_OUTTYPE_UNSIGNEDSHORT, + TDH_OUTTYPE_INT, + TDH_OUTTYPE_UNSIGNEDINT, + TDH_OUTTYPE_LONG, + TDH_OUTTYPE_UNSIGNEDLONG, + TDH_OUTTYPE_FLOAT, + TDH_OUTTYPE_DOUBLE, + TDH_OUTTYPE_BOOLEAN, + TDH_OUTTYPE_GUID, + TDH_OUTTYPE_HEXBINARY, + TDH_OUTTYPE_HEXINT8, + TDH_OUTTYPE_HEXINT16, + TDH_OUTTYPE_HEXINT32, + TDH_OUTTYPE_HEXINT64, + TDH_OUTTYPE_PID, + TDH_OUTTYPE_TID, + TDH_OUTTYPE_PORT, + TDH_OUTTYPE_IPV4, + TDH_OUTTYPE_IPV6, + TDH_OUTTYPE_SOCKETADDRESS, + TDH_OUTTYPE_CIMDATETIME, + TDH_OUTTYPE_ETWTIME, + TDH_OUTTYPE_XML, + TDH_OUTTYPE_ERRORCODE, + TDH_OUTTYPE_WIN32ERROR, + TDH_OUTTYPE_NTSTATUS, + TDH_OUTTYPE_HRESULT, + TDH_OUTTYPE_CULTURE_INSENSITIVE_DATETIME, + TDH_OUTTYPE_REDUCEDSTRING = 300, + TDH_OUTTYPE_NOPRINT +} TDH_OUT_TYPE; + +typedef enum _PROPERTY_FLAGS { + PropertyStruct = 0x1, + PropertyParamLength = 0x2, + PropertyParamCount = 0x4, + PropertyWBEMXmlFragment = 0x8, + PropertyParamFixedLength = 0x10 +} PROPERTY_FLAGS; + +typedef struct _EVENT_PROPERTY_INFO { + PROPERTY_FLAGS Flags; + ULONG NameOffset; + __MINGW_EXTENSION union { + struct { + USHORT InType; + USHORT OutType; + ULONG MapNameOffset; + } nonStructType; + struct { + USHORT StructStartIndex; + USHORT NumOfStructMembers; + ULONG padding; + } structType; + }; + __MINGW_EXTENSION union { + USHORT count; + USHORT countPropertyIndex; + }; + __MINGW_EXTENSION union { + USHORT length; + USHORT lengthPropertyIndex; + }; + ULONG Reserved; +} __TDHCACHE_ALIGN EVENT_PROPERTY_INFO, *PEVENT_PROPERTY_INFO; + +typedef enum _DECODING_SOURCE { + DecodingSourceXMLFile = 0, + DecodingSourceWbem = 1, + DecodingSourceWPP = 2 +} DECODING_SOURCE; + +typedef enum _TDH_CONTEXT_TYPE { + TDH_CONTEXT_WPP_TMFFILE = 0, + TDH_CONTEXT_WPP_TMFSEARCHPATH = 1, + TDH_CONTEXT_WPP_GMT = 2, + TDH_CONTEXT_POINTERSIZE = 3, + TDH_CONTEXT_MAXIMUM = 4 +} TDH_CONTEXT_TYPE; + +typedef enum _TEMPLATE_FLAGS { + TEMPLATE_EVENT_DATA = 1, + TEMPLATE_USER_DATA = 2 +} TEMPLATE_FLAGS; + +typedef struct _TRACE_EVENT_INFO { + GUID ProviderGuid; + GUID EventGuid; + EVENT_DESCRIPTOR EventDescriptor; + DECODING_SOURCE DecodingSource; + ULONG ProviderNameOffset; + ULONG LevelNameOffset; + ULONG ChannelNameOffset; + ULONG KeywordsNameOffset; + ULONG TaskNameOffset; + ULONG OpcodeNameOffset; + ULONG EventMessageOffset; + ULONG ProviderMessageOffset; + ULONG BinaryXMLOffset; + ULONG BinaryXMLSize; + ULONG ActivityIDNameOffset; + ULONG RelatedActivityIDNameOffset; + ULONG PropertyCount; + ULONG TopLevelPropertyCount; + TEMPLATE_FLAGS Flags; + EVENT_PROPERTY_INFO EventPropertyInfoArray[ANYSIZE_ARRAY]; +} __TDHCACHE_ALIGN TRACE_EVENT_INFO, *PTRACE_EVENT_INFO; + +typedef struct _PROPERTY_DATA_DESCRIPTOR { + ULONGLONG PropertyName; + ULONG ArrayIndex; + ULONG Reserved; +} __TDHCACHE_ALIGN PROPERTY_DATA_DESCRIPTOR, *PPROPERTY_DATA_DESCRIPTOR; + +typedef struct _TRACE_PROVIDER_INFO { + GUID ProviderGuid; + ULONG SchemaSource; + ULONG ProviderNameOffset; +} __TDHCACHE_ALIGN TRACE_PROVIDER_INFO, *PTRACE_PROVIDER_INFO; + +typedef struct _PROVIDER_ENUMERATION_INFO { + ULONG NumberOfProviders; + ULONG Padding; + TRACE_PROVIDER_INFO TraceProviderInfoArray[ANYSIZE_ARRAY]; +} __TDHCACHE_ALIGN PROVIDER_ENUMERATION_INFO, *PPROVIDER_ENUMERATION_INFO; + +typedef struct _PROVIDER_FIELD_INFO { + ULONG NameOffset; + ULONG DescriptionOffset; + ULONGLONG Value; +} __TDHCACHE_ALIGN PROVIDER_FIELD_INFO, *PPROVIDER_FIELD_INFO; + +typedef struct _PROVIDER_FIELD_INFOARRAY { + ULONG NumberOfElements; + EVENT_FIELD_TYPE FieldType; + PROVIDER_FIELD_INFO FieldInfoArray[ANYSIZE_ARRAY]; +} __TDHCACHE_ALIGN PROVIDER_FIELD_INFOARRAY, *PPROVIDER_FIELD_INFOARRAY; + +typedef struct _TDH_CONTEXT { + ULONGLONG ParameterValue; + TDH_CONTEXT_TYPE ParameterType; + ULONG ParameterSize; +} __TDHCACHE_ALIGN TDH_CONTEXT, *PTDH_CONTEXT; + +ULONG __stdcall TdhEnumerateProviderFieldInformation( + LPGUID pGuid, + EVENT_FIELD_TYPE EventFieldType, + PPROVIDER_FIELD_INFOARRAY pBuffer, + ULONG *pBufferSize +); + +ULONG __stdcall TdhEnumerateProviders( + PPROVIDER_ENUMERATION_INFO pBuffer, + ULONG *pBufferSize +); + +ULONG __stdcall TdhGetEventInformation( + PEVENT_RECORD pEvent, + ULONG TdhContextCount, + PTDH_CONTEXT pTdhContext, + PTRACE_EVENT_INFO pBuffer, + ULONG *pBufferSize +); + +ULONG __stdcall TdhGetEventMapInformation( + PEVENT_RECORD pEvent, + LPWSTR pMapName, + PEVENT_MAP_INFO pBuffer, + ULONG *pBufferSize +); + +ULONG __stdcall TdhGetProperty( + PEVENT_RECORD pEvent, + ULONG TdhContextCount, + PTDH_CONTEXT pTdhContext, + ULONG PropertyDataCount, + PPROPERTY_DATA_DESCRIPTOR pPropertyData, + ULONG BufferSize, + PBYTE pBuffer +); + +ULONG __stdcall TdhGetPropertySize( + PEVENT_RECORD pEvent, + ULONG TdhContextCount, + PTDH_CONTEXT pTdhContext, + ULONG PropertyDataCount, + PPROPERTY_DATA_DESCRIPTOR pPropertyData, + ULONG *pPropertySize +); + +ULONG __stdcall TdhQueryProviderFieldInformation( + LPGUID pGuid, + ULONGLONG EventFieldValue, + EVENT_FIELD_TYPE EventFieldType, + PPROVIDER_FIELD_INFOARRAY pBuffer, + ULONG *pBufferSize +); + +#if (_WIN32_WINNT >= 0x0601) +typedef struct _PROVIDER_FILTER_INFO { + UCHAR Id; + UCHAR Version; + ULONG MessageOffset; + ULONG Reserved; + ULONG PropertyCount; + EVENT_PROPERTY_INFO EventPropertyInfoArray[ANYSIZE_ARRAY]; +} PROVIDER_FILTER_INFO, *PPROVIDER_FILTER_INFO; +#endif /*(_WIN32_WINNT >= 0x0601)*/ + +#ifdef __cplusplus +} +#endif + +#endif /*(_WIN32_WINNT >= 0x0600)*/ +#endif /*_INC_TDH*/ diff --git a/src/win32ctl/include/tdhmsg.h b/src/win32ctl/include/tdhmsg.h new file mode 100644 index 0000000..813f4d3 --- /dev/null +++ b/src/win32ctl/include/tdhmsg.h @@ -0,0 +1,39 @@ +#define ERROR_EVT_INVALID_CHANNEL_PATH 15000L +#define ERROR_EVT_INVALID_QUERY 15001L +#define ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND 15002L +#define ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND 15003L +#define ERROR_EVT_INVALID_PUBLISHER_NAME 15004L +#define ERROR_EVT_INVALID_EVENT_DATA 15005L +#define ERROR_EVT_CHANNEL_NOT_FOUND 15007L +#define ERROR_EVT_MALFORMED_XML_TEXT 15008L +#define ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL 15009L +#define ERROR_EVT_CONFIGURATION_ERROR 15010L +#define ERROR_EVT_QUERY_RESULT_STALE 15011L +#define ERROR_EVT_QUERY_RESULT_INVALID_POSITION 15012L +#define ERROR_EVT_NON_VALIDATING_MSXML 15013L +#define ERROR_EVT_FILTER_ALREADYSCOPED 15014L +#define ERROR_EVT_FILTER_NOTELTSET 15015L +#define ERROR_EVT_FILTER_INVARG 15016L +#define ERROR_EVT_FILTER_INVTEST 15017L +#define ERROR_EVT_FILTER_INVTYPE 15018L +#define ERROR_EVT_FILTER_PARSEERR 15019L +#define ERROR_EVT_FILTER_UNSUPPORTEDOP 15020L +#define ERROR_EVT_FILTER_UNEXPECTEDTOKEN 15021L +#define ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL 15022L +#define ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE 15023L +#define ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE 15024L +#define ERROR_EVT_CHANNEL_CANNOT_ACTIVATE 15025L +#define ERROR_EVT_FILTER_TOO_COMPLEX 15026L +#define ERROR_EVT_MESSAGE_NOT_FOUND 15027L +#define ERROR_EVT_MESSAGE_ID_NOT_FOUND 15028L +#define ERROR_EVT_UNRESOLVED_VALUE_INSERT 15029L +#define ERROR_EVT_UNRESOLVED_PARAMETER_INSERT 15030L +#define ERROR_EVT_MAX_INSERTS_REACHED 15031L +#define ERROR_EVT_EVENT_DEFINITION_NOT_FOUND 15032L +#define ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND 15033L +#define ERROR_EVT_VERSION_TOO_OLD 15034L +#define ERROR_EVT_VERSION_TOO_NEW 15035L +#define ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY 15036L +#define ERROR_EVT_PUBLISHER_DISABLED 15037L +#define ERROR_EVT_FILTER_OUT_OF_RANGE 15038L + diff --git a/src/win32ctl/include/winevt.h b/src/win32ctl/include/winevt.h new file mode 100644 index 0000000..0b5fdd5 --- /dev/null +++ b/src/win32ctl/include/winevt.h @@ -0,0 +1,758 @@ +#ifndef WINEVT_H +#define WINEVT_H + +typedef HANDLE EVT_HANDLE, *PEVT_HANDLE; + +typedef enum _EVT_VARIANT_TYPE +{ + EvtVarTypeNull = 0, + EvtVarTypeString = 1, + EvtVarTypeAnsiString = 2, + EvtVarTypeSByte = 3, + EvtVarTypeByte = 4, + EvtVarTypeInt16 = 5, + EvtVarTypeUInt16 = 6, + EvtVarTypeInt32 = 7, + EvtVarTypeUInt32 = 8, + EvtVarTypeInt64 = 9, + EvtVarTypeUInt64 = 10, + EvtVarTypeSingle = 11, + EvtVarTypeDouble = 12, + EvtVarTypeBoolean = 13, + EvtVarTypeBinary = 14, + EvtVarTypeGuid = 15, + EvtVarTypeSizeT = 16, + EvtVarTypeFileTime = 17, + EvtVarTypeSysTime = 18, + EvtVarTypeSid = 19, + EvtVarTypeHexInt32 = 20, + EvtVarTypeHexInt64 = 21, + + // these types used internally + EvtVarTypeEvtHandle = 32, + EvtVarTypeEvtXml = 35 + +} EVT_VARIANT_TYPE; + + +#define EVT_VARIANT_TYPE_MASK 0x7f +#define EVT_VARIANT_TYPE_ARRAY 128 + + +typedef struct _EVT_VARIANT +{ + union + { + BOOL BooleanVal; + INT8 SByteVal; + INT16 Int16Val; + INT32 Int32Val; + INT64 Int64Val; + UINT8 ByteVal; + UINT16 UInt16Val; + UINT32 UInt32Val; + UINT64 UInt64Val; + float SingleVal; + double DoubleVal; + ULONGLONG FileTimeVal; + SYSTEMTIME* SysTimeVal; + GUID* GuidVal; + LPCWSTR StringVal; + LPCSTR AnsiStringVal; + PBYTE BinaryVal; + PSID SidVal; + size_t SizeTVal; + + // array fields + BOOL* BooleanArr; + INT8* SByteArr; + INT16* Int16Arr; + INT32* Int32Arr; + INT64* Int64Arr; + UINT8* ByteArr; + UINT16* UInt16Arr; + UINT32* UInt32Arr; + UINT64* UInt64Arr; + float* SingleArr; + double* DoubleArr; + FILETIME* FileTimeArr; + SYSTEMTIME* SysTimeArr; + GUID* GuidArr; + LPWSTR* StringArr; + LPSTR* AnsiStringArr; + PSID* SidArr; + size_t* SizeTArr; + + // internal fields + EVT_HANDLE EvtHandleVal; + LPCWSTR XmlVal; + LPCWSTR* XmlValArr; + }; + + DWORD Count; // number of elements (not length) in bytes. + DWORD Type; + +} EVT_VARIANT, *PEVT_VARIANT; + +#if 0 + +//////////////////////////////////////////////////////////////////////////////// +// +// Sessions +// +//////////////////////////////////////////////////////////////////////////////// + +typedef enum _EVT_LOGIN_CLASS +{ + EvtRpcLogin = 1 + +} EVT_LOGIN_CLASS; + +typedef enum _EVT_RPC_LOGIN_FLAGS +{ + EvtRpcLoginAuthDefault = 0, + EvtRpcLoginAuthNegotiate, + EvtRpcLoginAuthKerberos, + EvtRpcLoginAuthNTLM + +} EVT_RPC_LOGIN_FLAGS; + +typedef struct _EVT_RPC_LOGIN +{ + // all str params are optional + LPWSTR Server; + LPWSTR User; + LPWSTR Domain; + LPWSTR Password; + DWORD Flags; // EVT_RPC_LOGIN_FLAGS + +} EVT_RPC_LOGIN; + +EVT_HANDLE WINAPI EvtOpenSession( + EVT_LOGIN_CLASS LoginClass, + PVOID Login, + __reserved DWORD Timeout, // currently must be 0 + __reserved DWORD Flags // currently must be 0 + ); + +#endif + +//////////////////////////////////////////////////////////////////////////////// +// +// General Purpose Functions +// +//////////////////////////////////////////////////////////////////////////////// + + +BOOL WINAPI EvtClose( + EVT_HANDLE Object + ); + +#if 0 + +BOOL WINAPI EvtCancel( + EVT_HANDLE Object + ); + +DWORD WINAPI EvtGetExtendedStatus( + DWORD BufferSize, + __out_ecount_part_opt(BufferSize, *BufferUsed) LPWSTR Buffer, + __out PDWORD BufferUsed + ); + +#endif + +//////////////////////////////////////////////////////////////////////////////// +// +// Queries +// +//////////////////////////////////////////////////////////////////////////////// + + +typedef enum _EVT_QUERY_FLAGS +{ + EvtQueryChannelPath = 0x1, + EvtQueryFilePath = 0x2, + + EvtQueryForwardDirection = 0x100, + EvtQueryReverseDirection = 0x200, + + EvtQueryTolerateQueryErrors = 0x1000 + +} EVT_QUERY_FLAGS; + +EVT_HANDLE WINAPI EvtQuery( + EVT_HANDLE Session, + LPCWSTR Path, + LPCWSTR Query, + DWORD Flags + ); + +BOOL WINAPI EvtNext( + EVT_HANDLE ResultSet, + DWORD EventsSize, + PEVT_HANDLE Events, + DWORD Timeout, + DWORD Flags, + PDWORD Returned + ); + +#if 0 + +typedef enum _EVT_SEEK_FLAGS +{ + EvtSeekRelativeToFirst = 1, + EvtSeekRelativeToLast = 2, + EvtSeekRelativeToCurrent = 3, + EvtSeekRelativeToBookmark = 4, + EvtSeekOriginMask = 7, + + EvtSeekStrict = 0x10000, + +} EVT_SEEK_FLAGS; + + + +BOOL WINAPI EvtSeek( + EVT_HANDLE ResultSet, + LONGLONG Position, + EVT_HANDLE Bookmark, + __reserved DWORD Timeout, // currently must be 0 + DWORD Flags + ); + + +//////////////////////////////////////////////////////////////////////////////// +// +// Subscriptions +// +//////////////////////////////////////////////////////////////////////////////// + +typedef enum _EVT_SUBSCRIBE_FLAGS +{ + EvtSubscribeToFutureEvents = 1, + EvtSubscribeStartAtOldestRecord = 2, + EvtSubscribeStartAfterBookmark = 3, + EvtSubscribeOriginMask = 3, + + EvtSubscribeTolerateQueryErrors = 0x1000, + + EvtSubscribeStrict = 0x10000, + +} EVT_SUBSCRIBE_FLAGS; + +typedef enum _EVT_SUBSCRIBE_NOTIFY_ACTION +{ + EvtSubscribeActionError = 0, + EvtSubscribeActionDeliver + +} EVT_SUBSCRIBE_NOTIFY_ACTION; + +typedef DWORD (WINAPI *EVT_SUBSCRIBE_CALLBACK)( + EVT_SUBSCRIBE_NOTIFY_ACTION Action, + PVOID UserContext, + EVT_HANDLE Event ); + +EVT_HANDLE WINAPI EvtSubscribe( + EVT_HANDLE Session, + HANDLE SignalEvent, + LPCWSTR ChannelPath, + LPCWSTR Query, + EVT_HANDLE Bookmark, + PVOID context, + EVT_SUBSCRIBE_CALLBACK Callback, + DWORD Flags + ); + +#endif + +//////////////////////////////////////////////////////////////////////////////// +// +// Rendering +// +//////////////////////////////////////////////////////////////////////////////// + +typedef enum _EVT_SYSTEM_PROPERTY_ID +{ + EvtSystemProviderName = 0, // EvtVarTypeString + EvtSystemProviderGuid, // EvtVarTypeGuid + EvtSystemEventID, // EvtVarTypeUInt16 + EvtSystemQualifiers, // EvtVarTypeUInt16 + EvtSystemLevel, // EvtVarTypeUInt8 + EvtSystemTask, // EvtVarTypeUInt16 + EvtSystemOpcode, // EvtVarTypeUInt8 + EvtSystemKeywords, // EvtVarTypeHexInt64 + EvtSystemTimeCreated, // EvtVarTypeFileTime + EvtSystemEventRecordId, // EvtVarTypeUInt64 + EvtSystemActivityID, // EvtVarTypeGuid + EvtSystemRelatedActivityID, // EvtVarTypeGuid + EvtSystemProcessID, // EvtVarTypeUInt32 + EvtSystemThreadID, // EvtVarTypeUInt32 + EvtSystemChannel, // EvtVarTypeString + EvtSystemComputer, // EvtVarTypeString + EvtSystemUserID, // EvtVarTypeSid + EvtSystemVersion, // EvtVarTypeUInt8 + EvtSystemPropertyIdEND + +} EVT_SYSTEM_PROPERTY_ID; + +typedef enum _EVT_RENDER_CONTEXT_FLAGS +{ + EvtRenderContextValues = 0, // Render specific properties + EvtRenderContextSystem, // Render all system properties (System) + EvtRenderContextUser // Render all user properties (User/EventData) +} EVT_RENDER_CONTEXT_FLAGS; + +typedef enum _EVT_RENDER_FLAGS +{ + EvtRenderEventValues = 0, // Variants + EvtRenderEventXml, // XML + EvtRenderBookmark // Bookmark +} EVT_RENDER_FLAGS; + +EVT_HANDLE WINAPI EvtCreateRenderContext( + DWORD ValuePathsCount, + LPCWSTR* ValuePaths, + DWORD Flags // EVT_RENDER_CONTEXT_FLAGS + ); + +BOOL WINAPI EvtRender( + EVT_HANDLE Context, + EVT_HANDLE Fragment, + DWORD Flags, // EVT_RENDER_FLAGS + DWORD BufferSize, + PVOID Buffer, + PDWORD BufferUsed, + PDWORD PropertyCount + ); + +typedef enum _EVT_FORMAT_MESSAGE_FLAGS +{ + EvtFormatMessageEvent = 1, + EvtFormatMessageLevel, + EvtFormatMessageTask, + EvtFormatMessageOpcode, + EvtFormatMessageKeyword, + EvtFormatMessageChannel, + EvtFormatMessageProvider, + EvtFormatMessageId, + EvtFormatMessageXml, + +} EVT_FORMAT_MESSAGE_FLAGS; + +BOOL WINAPI EvtFormatMessage( + EVT_HANDLE PublisherMetadata, // Except for forwarded events + EVT_HANDLE Event, + DWORD MessageId, + DWORD ValueCount, + PEVT_VARIANT Values, + DWORD Flags, + DWORD BufferSize, + LPWSTR Buffer, + PDWORD BufferUsed + ); + + +#if 0 + +//////////////////////////////////////////////////////////////////////////////// +// +// Log Maintenace and Information +// +//////////////////////////////////////////////////////////////////////////////// + +typedef enum _EVT_OPEN_LOG_FLAGS +{ + EvtOpenChannelPath = 0x1, + EvtOpenFilePath = 0x2 + +} EVT_OPEN_LOG_FLAGS; + +typedef enum _EVT_LOG_PROPERTY_ID +{ + EvtLogCreationTime = 0, // EvtVarTypeFileTime + EvtLogLastAccessTime, // EvtVarTypeFileTime + EvtLogLastWriteTime, // EvtVarTypeFileTime + EvtLogFileSize, // EvtVarTypeUInt64 + EvtLogAttributes, // EvtVarTypeUInt32 + EvtLogNumberOfLogRecords, // EvtVarTypeUInt64 + EvtLogOldestRecordNumber, // EvtVarTypeUInt64 + EvtLogFull, // EvtVarTypeBoolean + +} EVT_LOG_PROPERTY_ID; + +EVT_HANDLE WINAPI EvtOpenLog( + EVT_HANDLE Session, + LPCWSTR Path, + DWORD Flags + ); + +BOOL WINAPI EvtGetLogInfo( + EVT_HANDLE Log, + EVT_LOG_PROPERTY_ID PropertyId, + DWORD PropertyValueBufferSize, + PEVT_VARIANT PropertyValueBuffer, + __out PDWORD PropertyValueBufferUsed + ); + +BOOL WINAPI EvtClearLog( + EVT_HANDLE Session, + LPCWSTR ChannelPath, + LPCWSTR TargetFilePath, + DWORD Flags + ); + +typedef enum _EVT_EXPORTLOG_FLAGS +{ + EvtExportLogChannelPath = 0x1, + EvtExportLogFilePath = 0x2, + EvtExportLogTolerateQueryErrors = 0x1000 + +} EVT_EXPORTLOG_FLAGS; + +BOOL WINAPI EvtExportLog( + EVT_HANDLE Session, + LPCWSTR Path, + LPCWSTR Query, + LPCWSTR TargetFilePath, + DWORD Flags + ); + +BOOL WINAPI EvtArchiveExportedLog( + EVT_HANDLE Session, + LPCWSTR LogFilePath, + LCID Locale, + DWORD Flags + ); + +//////////////////////////////////////////////////////////////////////////////// +// +// Channel Configuration +// +//////////////////////////////////////////////////////////////////////////////// + + +typedef enum _EVT_CHANNEL_CONFIG_PROPERTY_ID +{ + EvtChannelConfigEnabled = 0, // EvtVarTypeBoolean + EvtChannelConfigIsolation, // EvtVarTypeUInt32, EVT_CHANNEL_ISOLATION_TYPE + EvtChannelConfigType, // EvtVarTypeUInt32, EVT_CHANNEL_TYPE + EvtChannelConfigOwningPublisher, // EvtVarTypeString + EvtChannelConfigClassicEventlog, // EvtVarTypeBoolean + EvtChannelConfigAccess, // EvtVarTypeString + EvtChannelLoggingConfigRetention, // EvtVarTypeBoolean + EvtChannelLoggingConfigAutoBackup, // EvtVarTypeBoolean + EvtChannelLoggingConfigMaxSize, // EvtVarTypeUInt64 + EvtChannelLoggingConfigLogFilePath, // EvtVarTypeString + EvtChannelPublishingConfigLevel, // EvtVarTypeUInt32 + EvtChannelPublishingConfigKeywords, // EvtVarTypeUInt64 + EvtChannelPublishingConfigControlGuid, // EvtVarTypeGuid + EvtChannelPublishingConfigBufferSize, // EvtVarTypeUInt32 + EvtChannelPublishingConfigMinBuffers, // EvtVarTypeUInt32 + EvtChannelPublishingConfigMaxBuffers, // EvtVarTypeUInt32 + EvtChannelPublishingConfigLatency, // EvtVarTypeUInt32 + EvtChannelPublishingConfigClockType, // EvtVarTypeUInt32, EVT_CHANNEL_CLOCK_TYPE + EvtChannelPublishingConfigSidType, // EvtVarTypeUInt32, EVT_CHANNEL_SID_TYPE + EvtChannelPublisherList, // EvtVarTypeString | EVT_VARIANT_TYPE_ARRAY + EvtChannelConfigPropertyIdEND + +} EVT_CHANNEL_CONFIG_PROPERTY_ID; + +typedef enum _EVT_CHANNEL_TYPE +{ + EvtChannelTypeAdmin = 0, + EvtChannelTypeOperational, + EvtChannelTypeAnalytic, + EvtChannelTypeDebug + +} EVT_CHANNEL_TYPE; + +typedef enum _EVT_CHANNEL_ISOLATION_TYPE +{ + EvtChannelIsolationTypeApplication = 0, + EvtChannelIsolationTypeSystem, + EvtChannelIsolationTypeCustom + +} EVT_CHANNEL_ISOLATION_TYPE; + +typedef enum _EVT_CHANNEL_CLOCK_TYPE +{ + EvtChannelClockTypeSystemTime = 0, // System time + EvtChannelClockTypeQPC // Query performance counter + +} EVT_CHANNEL_CLOCK_TYPE; + +typedef enum _EVT_CHANNEL_SID_TYPE +{ + EvtChannelSidTypeNone = 0, + EvtChannelSidTypePublishing + +} EVT_CHANNEL_SID_TYPE; + +EVT_HANDLE WINAPI EvtOpenChannelEnum( + EVT_HANDLE Session, + DWORD Flags + ); + +BOOL WINAPI EvtNextChannelPath( + EVT_HANDLE ChannelEnum, + DWORD ChannelPathBufferSize, + __out_ecount_part_opt(ChannelPathBufferSize, *ChannelPathBufferUsed) + LPWSTR ChannelPathBuffer, + __out PDWORD ChannelPathBufferUsed + ); + +EVT_HANDLE WINAPI EvtOpenChannelConfig( + EVT_HANDLE Session, + LPCWSTR ChannelPath, + DWORD Flags + ); + +BOOL WINAPI EvtSaveChannelConfig( + EVT_HANDLE ChannelConfig, + DWORD Flags + ); + +BOOL WINAPI EvtSetChannelConfigProperty( + EVT_HANDLE ChannelConfig, + EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId, + DWORD Flags, + PEVT_VARIANT PropertyValue + ); + +BOOL WINAPI EvtGetChannelConfigProperty( + EVT_HANDLE ChannelConfig, + EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId, + DWORD Flags, + DWORD PropertyValueBufferSize, + PEVT_VARIANT PropertyValueBuffer, + __out PDWORD PropertyValueBufferUsed + ); + + +//////////////////////////////////////////////////////////////////////////////// +// +// Publisher Metadata +// +//////////////////////////////////////////////////////////////////////////////// + +typedef enum _EVT_CHANNEL_REFERENCE_FLAGS +{ + EvtChannelReferenceImported = 0x1, + +} EVT_CHANNEL_REFERENCE_FLAGS; + +typedef enum _EVT_PUBLISHER_METADATA_PROPERTY_ID +{ + EvtPublisherMetadataPublisherGuid = 0, // EvtVarTypeGuid + EvtPublisherMetadataResourceFilePath, // EvtVarTypeString + EvtPublisherMetadataParameterFilePath, // EvtVarTypeString + EvtPublisherMetadataMessageFilePath, // EvtVarTypeString + EvtPublisherMetadataHelpLink, // EvtVarTypeString + EvtPublisherMetadataPublisherMessageID, // EvtVarTypeUInt32 + + EvtPublisherMetadataChannelReferences, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataChannelReferencePath, // EvtVarTypeString + EvtPublisherMetadataChannelReferenceIndex, // EvtVarTypeUInt32 + EvtPublisherMetadataChannelReferenceID, // EvtVarTypeUInt32 + EvtPublisherMetadataChannelReferenceFlags, // EvtVarTypeUInt32 + EvtPublisherMetadataChannelReferenceMessageID, // EvtVarTypeUInt32 + + EvtPublisherMetadataLevels, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataLevelName, // EvtVarTypeString + EvtPublisherMetadataLevelValue, // EvtVarTypeUInt32 + EvtPublisherMetadataLevelMessageID, // EvtVarTypeUInt32 + + EvtPublisherMetadataTasks, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataTaskName, // EvtVarTypeString + EvtPublisherMetadataTaskEventGuid, // EvtVarTypeGuid + EvtPublisherMetadataTaskValue, // EvtVarTypeUInt32 + EvtPublisherMetadataTaskMessageID, // EvtVarTypeUInt32 + + EvtPublisherMetadataOpcodes, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataOpcodeName, // EvtVarTypeString + EvtPublisherMetadataOpcodeValue, // EvtVarTypeUInt32 + EvtPublisherMetadataOpcodeMessageID, // EvtVarTypeUInt32 + + EvtPublisherMetadataKeywords, // EvtVarTypeEvtHandle, ObjectArray + EvtPublisherMetadataKeywordName, // EvtVarTypeString + EvtPublisherMetadataKeywordValue, // EvtVarTypeUInt64 + EvtPublisherMetadataKeywordMessageID, // EvtVarTypeUInt32 + + + EvtPublisherMetadataPropertyIdEND + +} EVT_PUBLISHER_METADATA_PROPERTY_ID; + +EVT_HANDLE WINAPI EvtOpenPublisherEnum( + EVT_HANDLE Session, + DWORD Flags + ); + +BOOL WINAPI EvtNextPublisherId( + EVT_HANDLE PublisherEnum, + DWORD PublisherIdBufferSize, + __out_ecount_part_opt(PublisherIdBufferSize, *PublisherIdBufferUsed) + LPWSTR PublisherIdBuffer, + __out PDWORD PublisherIdBufferUsed + ); + +#endif + +EVT_HANDLE WINAPI EvtOpenPublisherMetadata( + EVT_HANDLE Session, + LPCWSTR PublisherId, + LPCWSTR LogFilePath, + LCID Locale, + DWORD Flags + ); + +#if 0 + +BOOL WINAPI EvtGetPublisherMetadataProperty( + EVT_HANDLE PublisherMetadata, + EVT_PUBLISHER_METADATA_PROPERTY_ID PropertyId, + DWORD Flags, + DWORD PublisherMetadataPropertyBufferSize, + PEVT_VARIANT PublisherMetadataPropertyBuffer, + __out PDWORD PublisherMetadataPropertyBufferUsed + ); + +//////////////////////////////////////////////////////////////////////////////// +// +// Event Metadata Configuratin +// +//////////////////////////////////////////////////////////////////////////////// + +typedef enum _EVT_EVENT_METADATA_PROPERTY_ID +{ + EventMetadataEventID, // EvtVarTypeUInt32 + EventMetadataEventVersion, // EvtVarTypeUInt32 + EventMetadataEventChannel, // EvtVarTypeUInt32 + EventMetadataEventLevel, // EvtVarTypeUInt32 + EventMetadataEventOpcode, // EvtVarTypeUInt32 + EventMetadataEventTask, // EvtVarTypeUInt32 + EventMetadataEventKeyword, // EvtVarTypeUInt64 + EventMetadataEventMessageID,// EvtVarTypeUInt32 + EventMetadataEventTemplate, // EvtVarTypeString + EvtEventMetadataPropertyIdEND + +} EVT_EVENT_METADATA_PROPERTY_ID; + +EVT_HANDLE WINAPI EvtOpenEventMetadataEnum( + EVT_HANDLE PublisherMetadata, + DWORD Flags + ); + +EVT_HANDLE WINAPI EvtNextEventMetadata( + EVT_HANDLE EventMetadataEnum, + DWORD Flags + ); + +BOOL WINAPI EvtGetEventMetadataProperty( + EVT_HANDLE EventMetadata, + EVT_EVENT_METADATA_PROPERTY_ID PropertyId, + DWORD Flags, + DWORD EventMetadataPropertyBufferSize, + PEVT_VARIANT EventMetadataPropertyBuffer, + __out PDWORD EventMetadataPropertyBufferUsed + ); + +//////////////////////////////////////////////////////////////////////////////// +// +// Array Access +// +//////////////////////////////////////////////////////////////////////////////// + +typedef HANDLE EVT_OBJECT_ARRAY_PROPERTY_HANDLE; + +BOOL WINAPI EvtGetObjectArraySize( + EVT_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray, + __out PDWORD ObjectArraySize + ); + +BOOL WINAPI EvtGetObjectArrayProperty( + EVT_OBJECT_ARRAY_PROPERTY_HANDLE ObjectArray, + DWORD PropertyId, + DWORD ArrayIndex, + DWORD Flags, + DWORD PropertyValueBufferSize, + PEVT_VARIANT PropertyValueBuffer, + __out PDWORD PropertyValueBufferUsed + ); + + +///////////////////////////////////////////////////////////////////////////// +// +// Misc Event Consumer Functions +// +//////////////////////////////////////////////////////////////////////////// + +typedef enum _EVT_QUERY_PROPERTY_ID +{ + // + // list of channels or logfiles indentified in the query. Variant will be + // array of EvtVarTypeString. + // + EvtQueryNames, + + // + // Array of EvtVarTypeUInt32, indicating creation status ( Win32 error + // code ) for the list of names returned by the EvtQueryNames + // property. + // + EvtQueryStatuses, + + EvtQueryPropertyIdEND + +} EVT_QUERY_PROPERTY_ID; + +typedef enum _EVT_EVENT_PROPERTY_ID +{ + EvtEventQueryIDs = 0, + EvtEventPath, + EvtEventPropertyIdEND + +} EVT_EVENT_PROPERTY_ID; + + +BOOL WINAPI EvtGetQueryInfo( + EVT_HANDLE QueryOrSubscription, + EVT_QUERY_PROPERTY_ID PropertyId, + DWORD PropertyValueBufferSize, + PEVT_VARIANT PropertyValueBuffer, + __out PDWORD PropertyValueBufferUsed + ); + +EVT_HANDLE WINAPI EvtCreateBookmark( + __in_opt LPCWSTR BookmarkXml + ); + +BOOL WINAPI EvtUpdateBookmark( + EVT_HANDLE Bookmark, + EVT_HANDLE Event + ); + +BOOL WINAPI EvtGetEventInfo( + EVT_HANDLE Event, + EVT_EVENT_PROPERTY_ID PropertyId, + DWORD PropertyValueBufferSize, + PEVT_VARIANT PropertyValueBuffer, + __out PDWORD PropertyValueBufferUsed + ); + + +//////////////////////////////////////////////////////////////////////////////// +// +// Access Control Permissions +// +//////////////////////////////////////////////////////////////////////////////// + +#define EVT_READ_ACCESS 0x1 +#define EVT_WRITE_ACCESS 0x2 +#define EVT_CLEAR_ACCESS 0x4 +#define EVT_ALL_ACCESS 0x7 + +#endif + +#endif // __WINEVT_H__ diff --git a/src/win32ctl/include/winmeta.h b/src/win32ctl/include/winmeta.h new file mode 100644 index 0000000..dce52e0 --- /dev/null +++ b/src/win32ctl/include/winmeta.h @@ -0,0 +1,3 @@ + +#define WINEVENT_KEYWORD_AUDIT_FAILURE 0x10000000000000LL + diff --git a/src/win32ctl/include/winperf.h b/src/win32ctl/include/winperf.h new file mode 100644 index 0000000..e5dd86d --- /dev/null +++ b/src/win32ctl/include/winperf.h @@ -0,0 +1,193 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _WINPERF_ +#define _WINPERF_ + +#include <pshpack8.h> + +#define PERF_DATA_VERSION 1 +#define PERF_DATA_REVISION 1 + +typedef struct _PERF_DATA_BLOCK { + WCHAR Signature[4]; + DWORD LittleEndian; + DWORD Version; + DWORD Revision; + DWORD TotalByteLength; + DWORD HeaderLength; + DWORD NumObjectTypes; + LONG DefaultObject; + SYSTEMTIME SystemTime; + LARGE_INTEGER PerfTime; + LARGE_INTEGER PerfFreq; + LARGE_INTEGER PerfTime100nSec; + DWORD SystemNameLength; + DWORD SystemNameOffset; +} PERF_DATA_BLOCK,*PPERF_DATA_BLOCK; + +typedef struct _PERF_OBJECT_TYPE { + DWORD TotalByteLength; + DWORD DefinitionLength; + DWORD HeaderLength; + DWORD ObjectNameTitleIndex; +#ifdef _WIN64 + DWORD ObjectNameTitle; +#else + LPWSTR ObjectNameTitle; +#endif + DWORD ObjectHelpTitleIndex; +#ifdef _WIN64 + DWORD ObjectHelpTitle; +#else + LPWSTR ObjectHelpTitle; +#endif + DWORD DetailLevel; + DWORD NumCounters; + LONG DefaultCounter; + LONG NumInstances; + DWORD CodePage; + LARGE_INTEGER PerfTime; + LARGE_INTEGER PerfFreq; +} PERF_OBJECT_TYPE,*PPERF_OBJECT_TYPE; + +#define PERF_NO_INSTANCES -1 +#define PERF_SIZE_DWORD 0x00000000 +#define PERF_SIZE_LARGE 0x00000100 +#define PERF_SIZE_ZERO 0x00000200 +#define PERF_SIZE_VARIABLE_LEN 0x00000300 +#define PERF_TYPE_NUMBER 0x00000000 +#define PERF_TYPE_COUNTER 0x00000400 +#define PERF_TYPE_TEXT 0x00000800 +#define PERF_TYPE_ZERO 0x00000C00 +#define PERF_NUMBER_HEX 0x00000000 +#define PERF_NUMBER_DECIMAL 0x00010000 +#define PERF_NUMBER_DEC_1000 0x00020000 +#define PERF_COUNTER_VALUE 0x00000000 +#define PERF_COUNTER_RATE 0x00010000 +#define PERF_COUNTER_FRACTION 0x00020000 +#define PERF_COUNTER_BASE 0x00030000 +#define PERF_COUNTER_ELAPSED 0x00040000 +#define PERF_COUNTER_QUEUELEN 0x00050000 +#define PERF_COUNTER_HISTOGRAM 0x00060000 +#define PERF_COUNTER_PRECISION 0x00070000 +#define PERF_TEXT_UNICODE 0x00000000 +#define PERF_TEXT_ASCII 0x00010000 +#define PERF_TIMER_TICK 0x00000000 +#define PERF_TIMER_100NS 0x00100000 +#define PERF_OBJECT_TIMER 0x00200000 +#define PERF_DELTA_COUNTER 0x00400000 +#define PERF_DELTA_BASE 0x00800000 +#define PERF_INVERSE_COUNTER 0x01000000 +#define PERF_MULTI_COUNTER 0x02000000 + +#define PERF_DISPLAY_NO_SUFFIX 0x00000000 +#define PERF_DISPLAY_PER_SEC 0x10000000 +#define PERF_DISPLAY_PERCENT 0x20000000 +#define PERF_DISPLAY_SECONDS 0x30000000 +#define PERF_DISPLAY_NOSHOW 0x40000000 + +#define PERF_COUNTER_COUNTER (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_PER_SEC) +#define PERF_COUNTER_TIMER (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_COUNTER_QUEUELEN_TYPE (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_QUEUELEN | PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_LARGE_QUEUELEN_TYPE (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_QUEUELEN | PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_100NS_QUEUELEN_TYPE (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_QUEUELEN | PERF_TIMER_100NS | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_OBJ_TIME_QUEUELEN_TYPE (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_QUEUELEN | PERF_OBJECT_TIMER | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_BULK_COUNT (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_PER_SEC) +#define PERF_COUNTER_TEXT (PERF_SIZE_VARIABLE_LEN | PERF_TYPE_TEXT | PERF_TEXT_UNICODE | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_RAWCOUNT (PERF_SIZE_DWORD | PERF_TYPE_NUMBER | PERF_NUMBER_DECIMAL | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_LARGE_RAWCOUNT (PERF_SIZE_LARGE | PERF_TYPE_NUMBER | PERF_NUMBER_DECIMAL | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_RAWCOUNT_HEX (PERF_SIZE_DWORD | PERF_TYPE_NUMBER | PERF_NUMBER_HEX | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_LARGE_RAWCOUNT_HEX (PERF_SIZE_LARGE | PERF_TYPE_NUMBER | PERF_NUMBER_HEX | PERF_DISPLAY_NO_SUFFIX) +#define PERF_SAMPLE_FRACTION (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION | PERF_DELTA_COUNTER | PERF_DELTA_BASE | PERF_DISPLAY_PERCENT) +#define PERF_SAMPLE_COUNTER (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_NODATA (PERF_SIZE_ZERO | PERF_DISPLAY_NOSHOW) +#define PERF_COUNTER_TIMER_INV (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_INVERSE_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_SAMPLE_BASE (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_BASE | PERF_DISPLAY_NOSHOW | 0x00000001) +#define PERF_AVERAGE_TIMER (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION | PERF_DISPLAY_SECONDS) +#define PERF_AVERAGE_BASE (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_BASE | PERF_DISPLAY_NOSHOW | 0x00000002) +#define PERF_AVERAGE_BULK (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION | PERF_DISPLAY_NOSHOW) +#define PERF_OBJ_TIME_TIMER (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_OBJECT_TIMER | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_100NSEC_TIMER (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_100NS | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_100NSEC_TIMER_INV (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_100NS | PERF_DELTA_COUNTER | PERF_INVERSE_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_COUNTER_MULTI_TIMER (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_DELTA_COUNTER | PERF_TIMER_TICK | PERF_MULTI_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_COUNTER_MULTI_TIMER_INV (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_RATE | PERF_DELTA_COUNTER | PERF_MULTI_COUNTER | PERF_TIMER_TICK | PERF_INVERSE_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_COUNTER_MULTI_BASE (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_BASE | PERF_MULTI_COUNTER | PERF_DISPLAY_NOSHOW) +#define PERF_100NSEC_MULTI_TIMER (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_DELTA_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_100NS | PERF_MULTI_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_100NSEC_MULTI_TIMER_INV (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_DELTA_COUNTER | PERF_COUNTER_RATE | PERF_TIMER_100NS | PERF_MULTI_COUNTER | PERF_INVERSE_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_RAW_FRACTION (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION | PERF_DISPLAY_PERCENT) +#define PERF_LARGE_RAW_FRACTION (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_FRACTION | PERF_DISPLAY_PERCENT) +#define PERF_RAW_BASE (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_BASE | PERF_DISPLAY_NOSHOW | 0x00000003) +#define PERF_LARGE_RAW_BASE (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_BASE | PERF_DISPLAY_NOSHOW) +#define PERF_ELAPSED_TIME (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_ELAPSED | PERF_OBJECT_TIMER | PERF_DISPLAY_SECONDS) +#define PERF_COUNTER_HISTOGRAM_TYPE 0x80000000 +#define PERF_COUNTER_DELTA (PERF_SIZE_DWORD | PERF_TYPE_COUNTER | PERF_COUNTER_VALUE | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX) +#define PERF_COUNTER_LARGE_DELTA (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_VALUE | PERF_DELTA_COUNTER | PERF_DISPLAY_NO_SUFFIX) +#define PERF_PRECISION_SYSTEM_TIMER (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_PRECISION | PERF_TIMER_TICK | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_PRECISION_100NS_TIMER (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_PRECISION | PERF_TIMER_100NS | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT) +#define PERF_PRECISION_OBJECT_TIMER (PERF_SIZE_LARGE | PERF_TYPE_COUNTER | PERF_COUNTER_PRECISION | PERF_OBJECT_TIMER | PERF_DELTA_COUNTER | PERF_DISPLAY_PERCENT) + +#define PERF_PRECISION_TIMESTAMP PERF_LARGE_RAW_BASE + +#define PERF_DETAIL_NOVICE 100 +#define PERF_DETAIL_ADVANCED 200 +#define PERF_DETAIL_EXPERT 300 +#define PERF_DETAIL_WIZARD 400 + +typedef struct _PERF_COUNTER_DEFINITION { + DWORD ByteLength; + DWORD CounterNameTitleIndex; +#ifdef _WIN64 + DWORD CounterNameTitle; +#else + LPWSTR CounterNameTitle; +#endif + DWORD CounterHelpTitleIndex; +#ifdef _WIN64 + DWORD CounterHelpTitle; +#else + LPWSTR CounterHelpTitle; +#endif + LONG DefaultScale; + DWORD DetailLevel; + DWORD CounterType; + DWORD CounterSize; + DWORD CounterOffset; +} PERF_COUNTER_DEFINITION,*PPERF_COUNTER_DEFINITION; + +#define PERF_NO_UNIQUE_ID -1 + +typedef struct _PERF_INSTANCE_DEFINITION { + DWORD ByteLength; + DWORD ParentObjectTitleIndex; + DWORD ParentObjectInstance; + LONG UniqueID; + DWORD NameOffset; + DWORD NameLength; +} PERF_INSTANCE_DEFINITION,*PPERF_INSTANCE_DEFINITION; + +typedef struct _PERF_COUNTER_BLOCK { + DWORD ByteLength; + +} PERF_COUNTER_BLOCK,*PPERF_COUNTER_BLOCK; + +#define PERF_QUERY_OBJECTS ((LONG)0x80000000) +#define PERF_QUERY_GLOBAL ((LONG)0x80000001) +#define PERF_QUERY_COSTLY ((LONG)0x80000002) + +typedef DWORD (WINAPI PM_OPEN_PROC)(LPWSTR); +typedef DWORD (WINAPI PM_COLLECT_PROC)(LPWSTR,LPVOID *,LPDWORD,LPDWORD); +typedef DWORD (WINAPI PM_CLOSE_PROC)(void); +typedef DWORD (WINAPI PM_QUERY_PROC)(LPDWORD,LPVOID *,LPDWORD,LPDWORD); + +#define MAX_PERF_OBJECTS_IN_QUERY_FUNCTION (64L) + +#define WINPERF_LOG_NONE 0 +#define WINPERF_LOG_USER 1 +#define WINPERF_LOG_DEBUG 2 +#define WINPERF_LOG_VERBOSE 3 + +#include <poppack.h> +#endif diff --git a/src/win32ctl/include/wmistr.h b/src/win32ctl/include/wmistr.h new file mode 100644 index 0000000..5fceb2f --- /dev/null +++ b/src/win32ctl/include/wmistr.h @@ -0,0 +1,198 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#ifndef _WMISTR_ +#define _WMISTR_ + +/* --- start added by kenj */ +#undef __MINGW_EXTENSION +#if defined(__GNUC__) || defined(__GNUG__) +#define __MINGW_EXTENSION __extension__ +#else +#define __MINGW_EXTENSION +#endif + +#ifndef __C89_NAMELESS +#define __C89_NAMELESS __MINGW_EXTENSION + +#define __C89_NAMELESSSTRUCTNAME +#define __C89_NAMELESSUNIONNAME +#endif +/* --- end added by kenj */ + +typedef struct _WNODE_HEADER { + ULONG BufferSize; + ULONG ProviderId; + __C89_NAMELESS union { + ULONG64 HistoricalContext; + __C89_NAMELESS struct { + ULONG Version; + ULONG Linkage; + }; + }; + __C89_NAMELESS union { + ULONG CountLost; + HANDLE KernelHandle; + LARGE_INTEGER TimeStamp; + }; + GUID Guid; + ULONG ClientContext; + ULONG Flags; +} WNODE_HEADER,*PWNODE_HEADER; + +#define WNODE_FLAG_ALL_DATA 0x00000001 +#define WNODE_FLAG_SINGLE_INSTANCE 0x00000002 +#define WNODE_FLAG_SINGLE_ITEM 0x00000004 +#define WNODE_FLAG_EVENT_ITEM 0x00000008 +#define WNODE_FLAG_FIXED_INSTANCE_SIZE 0x00000010 +#define WNODE_FLAG_TOO_SMALL 0x00000020 +#define WNODE_FLAG_INSTANCES_SAME 0x00000040 +#define WNODE_FLAG_STATIC_INSTANCE_NAMES 0x00000080 +#define WNODE_FLAG_INTERNAL 0x00000100 +#define WNODE_FLAG_USE_TIMESTAMP 0x00000200 +#define WNODE_FLAG_PERSIST_EVENT 0x00000400 +#define WNODE_FLAG_EVENT_REFERENCE 0x00002000 +#define WNODE_FLAG_ANSI_INSTANCENAMES 0x00004000 +#define WNODE_FLAG_METHOD_ITEM 0x00008000 +#define WNODE_FLAG_PDO_INSTANCE_NAMES 0x00010000 +#define WNODE_FLAG_TRACED_GUID 0x00020000 +#define WNODE_FLAG_LOG_WNODE 0x00040000 +#define WNODE_FLAG_USE_GUID_PTR 0x00080000 +#define WNODE_FLAG_USE_MOF_PTR 0x00100000 +#define WNODE_FLAG_NO_HEADER 0x00200000 +#define WNODE_FLAG_SEVERITY_MASK 0xff000000 + +typedef struct { + ULONG OffsetInstanceData; + ULONG LengthInstanceData; +} OFFSETINSTANCEDATAANDLENGTH,*POFFSETINSTANCEDATAANDLENGTH; + +typedef struct tagWNODE_ALL_DATA { + struct _WNODE_HEADER WnodeHeader; + ULONG DataBlockOffset; + ULONG InstanceCount; + ULONG OffsetInstanceNameOffsets; + __C89_NAMELESS union { + ULONG FixedInstanceSize; + OFFSETINSTANCEDATAANDLENGTH OffsetInstanceDataAndLength[1]; + }; +} WNODE_ALL_DATA,*PWNODE_ALL_DATA; + +typedef struct tagWNODE_SINGLE_INSTANCE { + struct _WNODE_HEADER WnodeHeader; + ULONG OffsetInstanceName; + ULONG InstanceIndex; + ULONG DataBlockOffset; + ULONG SizeDataBlock; + UCHAR VariableData[]; +} WNODE_SINGLE_INSTANCE,*PWNODE_SINGLE_INSTANCE; + +typedef struct tagWNODE_SINGLE_ITEM { + struct _WNODE_HEADER WnodeHeader; + ULONG OffsetInstanceName; + ULONG InstanceIndex; + ULONG ItemId; + ULONG DataBlockOffset; + ULONG SizeDataItem; + UCHAR VariableData[]; +} WNODE_SINGLE_ITEM,*PWNODE_SINGLE_ITEM; + +typedef struct tagWNODE_METHOD_ITEM { + struct _WNODE_HEADER WnodeHeader; + ULONG OffsetInstanceName; + ULONG InstanceIndex; + ULONG MethodId; + ULONG DataBlockOffset; + ULONG SizeDataBlock; + UCHAR VariableData[]; +} WNODE_METHOD_ITEM,*PWNODE_METHOD_ITEM; + +typedef struct tagWNODE_EVENT_ITEM { + struct _WNODE_HEADER WnodeHeader; +} WNODE_EVENT_ITEM,*PWNODE_EVENT_ITEM; + +typedef struct tagWNODE_EVENT_REFERENCE { + struct _WNODE_HEADER WnodeHeader; + GUID TargetGuid; + ULONG TargetDataBlockSize; + __C89_NAMELESS union { + ULONG TargetInstanceIndex; + WCHAR TargetInstanceName[1]; + }; +} WNODE_EVENT_REFERENCE,*PWNODE_EVENT_REFERENCE; + +typedef struct tagWNODE_TOO_SMALL { + struct _WNODE_HEADER WnodeHeader; + ULONG SizeNeeded; +} WNODE_TOO_SMALL,*PWNODE_TOO_SMALL; + +typedef struct { + GUID Guid; + ULONG Flags; + ULONG InstanceCount; + __C89_NAMELESS union { + ULONG InstanceNameList; + ULONG BaseNameOffset; + ULONG_PTR Pdo; + ULONG_PTR InstanceInfo; + }; +} WMIREGGUIDW,*PWMIREGGUIDW; + +typedef WMIREGGUIDW WMIREGGUID; +typedef PWMIREGGUIDW PWMIREGGUID; + +#define WMIREG_FLAG_EXPENSIVE 0x00000001 +#define WMIREG_FLAG_INSTANCE_LIST 0x00000004 +#define WMIREG_FLAG_INSTANCE_BASENAME 0x00000008 +#define WMIREG_FLAG_INSTANCE_PDO 0x00000020 +#define WMIREG_FLAG_REMOVE_GUID 0x00010000 +#define WMIREG_FLAG_RESERVED1 0x00020000 +#define WMIREG_FLAG_RESERVED2 0x00040000 +#define WMIREG_FLAG_TRACED_GUID 0x00080000 +#define WMIREG_FLAG_TRACE_CONTROL_GUID 0x00001000 +#define WMIREG_FLAG_EVENT_ONLY_GUID 0x00000040 + +typedef struct { + ULONG BufferSize; + ULONG NextWmiRegInfo; + ULONG RegistryPath; + ULONG MofResourceName; + ULONG GuidCount; + WMIREGGUIDW WmiRegGuid[]; +} WMIREGINFOW,*PWMIREGINFOW; + +typedef WMIREGINFOW WMIREGINFO; +typedef PWMIREGINFOW PWMIREGINFO; + +typedef enum { + WMI_GET_ALL_DATA = 0,WMI_GET_SINGLE_INSTANCE = 1,WMI_SET_SINGLE_INSTANCE = 2,WMI_SET_SINGLE_ITEM = 3,WMI_ENABLE_EVENTS = 4,WMI_DISABLE_EVENTS = 5, + WMI_ENABLE_COLLECTION = 6,WMI_DISABLE_COLLECTION = 7,WMI_REGINFO = 8,WMI_EXECUTE_METHOD = 9 +} WMIDPREQUESTCODE; + +#if defined(_WINNT_) || defined(WINNT) + +#define WMI_GUIDTYPE_TRACECONTROL 0 +#define WMI_GUIDTYPE_TRACE 1 +#define WMI_GUIDTYPE_DATA 2 +#define WMI_GUIDTYPE_EVENT 3 + +#define WMIGUID_QUERY 0x0001 +#define WMIGUID_SET 0x0002 +#define WMIGUID_NOTIFICATION 0x0004 +#define WMIGUID_READ_DESCRIPTION 0x0008 +#define WMIGUID_EXECUTE 0x0010 +#define TRACELOG_CREATE_REALTIME 0x0020 +#define TRACELOG_CREATE_ONDISK 0x0040 +#define TRACELOG_GUID_ENABLE 0x0080 +#define TRACELOG_ACCESS_KERNEL_LOGGER 0x0100 +#define TRACELOG_CREATE_INPROC 0x0200 +#define TRACELOG_ACCESS_REALTIME 0x0400 +#define TRACELOG_REGISTER_GUIDS 0x0800 + +#define WMIGUID_ALL_ACCESS (STANDARD_RIGHTS_READ | SYNCHRONIZE | WMIGUID_QUERY | WMIGUID_SET | WMIGUID_NOTIFICATION | WMIGUID_READ_DESCRIPTION | WMIGUID_EXECUTE | TRACELOG_CREATE_REALTIME | TRACELOG_CREATE_ONDISK | TRACELOG_GUID_ENABLE | TRACELOG_ACCESS_KERNEL_LOGGER | TRACELOG_CREATE_INPROC | TRACELOG_ACCESS_REALTIME | TRACELOG_REGISTER_GUIDS) + +#define WMI_GLOBAL_LOGGER_ID 0x0001 +#endif +#endif diff --git a/src/win32ctl/lib/GNUmakefile b/src/win32ctl/lib/GNUmakefile new file mode 100755 index 0000000..7782434 --- /dev/null +++ b/src/win32ctl/lib/GNUmakefile @@ -0,0 +1,42 @@ +#!gmake +# +# Copyright (c) 2010-2011 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +ifeq "$(TARGET_OS)" "mingw" +STATICLIBS = libpcp_pdh.a libpcp_tdh.a +endif +STATICDEFS = libpcp_pdh.def libpcp_tdh.def +MKWIN32LIB = sh -c "$(DLLTOOL) -d $< -k -l $@" + +LSRCFILES = $(STATICDEFS) +LDIRT = $(STATICLIBS) + +default: $(STATICLIBS) + +include $(BUILDRULES) + +libpcp_pdh.a: libpcp_pdh.def + $(MKWIN32LIB) + +libpcp_tdh.a: libpcp_tdh.def + $(MKWIN32LIB) + +default_pcp: default + +install: default + +install_pcp: install diff --git a/src/win32ctl/lib/libpcp_pdh.def b/src/win32ctl/lib/libpcp_pdh.def new file mode 100644 index 0000000..4155414 --- /dev/null +++ b/src/win32ctl/lib/libpcp_pdh.def @@ -0,0 +1,12 @@ +LIBRARY pdh.dll +EXPORTS +DllInstall +PdhAddCounterA@16 +PdhRemoveCounter@4 +PdhCollectQueryData@4 +PdhExpandCounterPathA@12 +PdhGetCounterInfoA@16 +PdhGetRawCounterValue@12 +PdhGetFormattedCounterValue@16 +PdhOpenQueryA@12 +PdhCloseQuery@4 diff --git a/src/win32ctl/lib/libpcp_tdh.def b/src/win32ctl/lib/libpcp_tdh.def new file mode 100644 index 0000000..7563764 --- /dev/null +++ b/src/win32ctl/lib/libpcp_tdh.def @@ -0,0 +1,10 @@ +LIBRARY tdh.dll +EXPORTS +DllInstall +TdhGetProperty@28 +TdhGetPropertySize@24 +TdhGetEventMapInformation@16 +TdhQueryProviderFieldInformation@24 +TdhGetEventInformation@20 +TdhEnumerateProviderFieldInformation@16 +TdhEnumerateProviders@8 diff --git a/src/win32ctl/mkaf.bat b/src/win32ctl/mkaf.bat new file mode 100755 index 0000000..7c78626 --- /dev/null +++ b/src/win32ctl/mkaf.bat @@ -0,0 +1,10 @@ +@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+%PCP_DIR%\bin\sh.exe mkaf.sh %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofbash
+:WinNT
+%PCP_DIR%\bin\sh.exe mkaf.sh %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofbash
+if %errorlevel% == 9009 echo You do not have sh.exe in your PCP_DIR.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+:endofbash
diff --git a/src/win32ctl/pcp.bat b/src/win32ctl/pcp.bat new file mode 100755 index 0000000..81f72be --- /dev/null +++ b/src/win32ctl/pcp.bat @@ -0,0 +1,10 @@ +@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+%PCP_DIR%\bin\sh.exe pcp.sh %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofbash
+:WinNT
+%PCP_DIR%\bin\sh.exe pcp.sh %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofbash
+if %errorlevel% == 9009 echo You do not have sh.exe in your PCP_DIR.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+:endofbash
diff --git a/src/win32ctl/pmafm.bat b/src/win32ctl/pmafm.bat new file mode 100755 index 0000000..91e96b7 --- /dev/null +++ b/src/win32ctl/pmafm.bat @@ -0,0 +1,10 @@ +@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+%PCP_DIR%\bin\sh.exe pmafm.sh %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofbash
+:WinNT
+%PCP_DIR%\bin\sh.exe pmafm.sh %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofbash
+if %errorlevel% == 9009 echo You do not have sh.exe in your PCP_DIR.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+:endofbash
diff --git a/src/win32ctl/pmsignal.bat b/src/win32ctl/pmsignal.bat new file mode 100755 index 0000000..6bbcef2 --- /dev/null +++ b/src/win32ctl/pmsignal.bat @@ -0,0 +1,10 @@ +@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+%PCP_DIR%\bin\sh.exe pmsignal.sh %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofbash
+:WinNT
+%PCP_DIR%\bin\sh.exe pmsignal.sh %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofbash
+if %errorlevel% == 9009 echo You do not have sh.exe in your PCP_DIR.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+:endofbash
diff --git a/src/win32ctl/services/GNUmakefile b/src/win32ctl/services/GNUmakefile new file mode 100644 index 0000000..b7eaa33 --- /dev/null +++ b/src/win32ctl/services/GNUmakefile @@ -0,0 +1,38 @@ +# +# Copyright (c) 2008-2009 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +CFILES = pcp-services.c +CMDTARGET = pcp-services.exe +LLDLIBS = $(PCPLIB) +LSRCFILES = $(WRAPPERS) + +default: build-me + +include $(BUILDRULES) + +ifeq "$(TARGET_OS)" "mingw" +build-me: $(CMDTARGET) +install: default + $(INSTALL) -m 755 $(CMDTARGET) $(PCP_BIN_DIR)/$(CMDTARGET) +else +build-me: +install: +endif + +default_pcp: default + +install_pcp: install diff --git a/src/win32ctl/services/pcp-services.c b/src/win32ctl/services/pcp-services.c new file mode 100644 index 0000000..7164fde --- /dev/null +++ b/src/win32ctl/services/pcp-services.c @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2008-2009 Aconex. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ +#include "pmapi.h" +#include "impl.h" +#include <wtypes.h> +#include <winnt.h> +#include <winsvc.h> +#include <winuser.h> + +typedef enum { + PCP_SERVICE_COLLECTORS = 0, + PCP_SERVICE_INFERENCE = 1, + PCP_SERVICE_PROXY = 2, + NUM_SERVICES +} PCPSERVICE; + +VOID WINAPI pcpCollectorsSetup(DWORD, LPTSTR *); +VOID WINAPI pcpInferenceSetup(DWORD, LPTSTR *); +VOID WINAPI pcpProxySetup(DWORD, LPTSTR *); +DWORD WINAPI pcpCollectorsDispatch(DWORD, DWORD, LPVOID, LPVOID); +DWORD WINAPI pcpInferenceDispatch(DWORD, DWORD, LPVOID, LPVOID); +DWORD WINAPI pcpProxyDispatch(DWORD, DWORD, LPVOID, LPVOID); + +typedef VOID WINAPI (*SETUPFUNC)(DWORD, LPTSTR *); +typedef DWORD WINAPI (*DISPATCHFUNC)(DWORD, DWORD, LPVOID, LPVOID); + +struct { + TCHAR * name; + TCHAR * script; + HANDLE stopEvent; + SERVICE_STATUS status; + SERVICE_STATUS_HANDLE statusHandle; + SETUPFUNC setup; + DISPATCHFUNC dispatch; +} services[3] = { + { .name = "PCP Collector Processes", + .script = "pcp", + .setup = pcpCollectorsSetup, + .dispatch = pcpCollectorsDispatch, + }, + { .name = "PCP Inference Engines", + .script = "pmie", + .setup = pcpInferenceSetup, + .dispatch = pcpInferenceDispatch, + }, + { .name = "PCP Collector Proxy", + .script = "pmproxy", + .setup = pcpProxySetup, + .dispatch = pcpProxyDispatch, + }, +}; + +static char pcpdir[MAXPATHLEN+16]; /* PCP_DIR environment variable */ +static char pcpconf[MAXPATHLEN+16]; /* PCP_CONF string for putenv */ +static char pcpdirenv[MAXPATHLEN+16]; /* PCP_DIR string for putenv */ + +int +pcpScript(const char *name, const char *action) +{ + char s[MAXPATHLEN]; + snprintf(s, sizeof(s), "%s\\bin\\sh.exe /etc/%s %s", pcpdir, name, action); + return system(s); +} + +VOID +pcpSetServiceState(PCPSERVICE s, DWORD state, DWORD code, DWORD waitHint) +{ + services[s].status.dwServiceType = SERVICE_WIN32_SHARE_PROCESS; + services[s].status.dwCurrentState = state; + services[s].status.dwWin32ExitCode = code; + services[s].status.dwWaitHint = waitHint; + + if (state == SERVICE_START_PENDING) + services[s].status.dwControlsAccepted = 0; + else + services[s].status.dwControlsAccepted = SERVICE_ACCEPT_STOP; + + if ((state == SERVICE_RUNNING) || (state == SERVICE_STOPPED)) + services[s].status.dwCheckPoint = 0; + else + services[s].status.dwCheckPoint++; + + /* Report the status of the service to the SCM. */ + SetServiceStatus(services[s].statusHandle, &services[s].status); +} + +VOID +pcpServiceMain(DWORD argc, LPTSTR *argv, PCPSERVICE s) +{ + char *default_basedirs[] = { "C:\\Glider", "C:\\MSYS" }; + char *default_service = "pcp"; + char *service = NULL, *basedir = NULL; + int i; + + if (argc > 1) { /* first argument is service name */ + service = argv[1]; + for (i = 0; i < NUM_SERVICES; i++) + if (strcmp(service, services[i].name) == 0) + break; + if (i == NUM_SERVICES) + return; /* unknown service requested - bail out */ + } + if (service == NULL) + service = default_service; + + if (argc > 2) /* second argument is PCP_DIR */ + basedir = argv[2]; + else if ((basedir = getenv("PCP_DIR")) == NULL) { + for (i = 0; i < 3; i++) + if (access(default_basedirs[i], R_OK) == 0) { + basedir = default_basedirs[i]; + break; + } + } + if (!basedir || access(basedir, R_OK) != 0) + return; /* stuffed up if we have no PCP_DIR - bail out */ + + snprintf(pcpdir, sizeof(pcpdir), "%s", basedir); + snprintf(pcpconf, sizeof(pcpconf), "PCP_CONF=%s\\etc\\pcp.conf", pcpdir); + snprintf(pcpdirenv, sizeof(pcpdirenv), "PCP_DIR=%s", pcpdir); + putenv(pcpconf); + putenv(pcpdirenv); + + services[s].statusHandle = RegisterServiceCtrlHandlerEx( + services[s].name, services[s].dispatch, NULL); + if (!services[s].statusHandle) + return; + + pcpSetServiceState(s, SERVICE_START_PENDING, NO_ERROR, 0); + + /* + * Create an event. The control handler function signals + * this event when it receives the stop control code. + */ + services[s].stopEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + if (!services[s].stopEvent) { + pcpSetServiceState(s, SERVICE_STOPPED, NO_ERROR, 0); + return; + } + + /* + * Go, go, go... run the start script for this service. + */ + if (pcpScript(services[s].script, "start") != 0) { + pcpSetServiceState(s, SERVICE_STOPPED, NO_ERROR, 0); + return; + } + + pcpSetServiceState(s, SERVICE_RUNNING, NO_ERROR, 0); + + /* Check whether to stop the service. */ + WaitForSingleObject(services[s].stopEvent, INFINITE); + + /* ServiceState already set to SERVICE_STOP_PENDING */ + pcpScript(services[s].script, "stop"); + + pcpSetServiceState(s, SERVICE_STOPPED, NO_ERROR, 0); +} + +VOID WINAPI +pcpCollectorsSetup(DWORD argc, LPTSTR *argv) +{ + pcpServiceMain(argc, argv, PCP_SERVICE_COLLECTORS); +} + +VOID WINAPI +pcpInferenceSetup(DWORD argc, LPTSTR *argv) +{ + pcpServiceMain(argc, argv, PCP_SERVICE_INFERENCE); +} + +VOID WINAPI +pcpProxySetup(DWORD argc, LPTSTR *argv) +{ + pcpServiceMain(argc, argv, PCP_SERVICE_PROXY); +} + +DWORD +pcpServiceHandler(DWORD dwControl, DWORD dwEventType, + LPVOID lpEventData, LPVOID lpContext, PCPSERVICE s) +{ + switch(dwControl) { + case SERVICE_CONTROL_STOP: + services[s].status.dwCurrentState = SERVICE_STOP_PENDING; + SetServiceStatus(services[s].statusHandle, &services[s].status); + SetEvent(services[s].stopEvent); + return NO_ERROR; + + default: + break; + } + + /* Send current status (done for most request types) */ + SetServiceStatus(services[s].statusHandle, &services[s].status); + return NO_ERROR; +} + +DWORD WINAPI +pcpCollectorsDispatch(DWORD ctrl, DWORD type, LPVOID data, LPVOID ctxt) +{ + return pcpServiceHandler(ctrl, type, data, ctxt, PCP_SERVICE_COLLECTORS); +} + +DWORD WINAPI +pcpInferenceDispatch(DWORD ctrl, DWORD type, LPVOID data, LPVOID ctxt) +{ + return pcpServiceHandler(ctrl, type, data, ctxt, PCP_SERVICE_INFERENCE); +} + +DWORD WINAPI +pcpProxyDispatch(DWORD ctrl, DWORD type, LPVOID data, LPVOID ctxt) +{ + return pcpServiceHandler(ctrl, type, data, ctxt, PCP_SERVICE_PROXY); +} + +int +main(int argc, char **argv) +{ + SERVICE_TABLE_ENTRY dispatchTable[2]; + + __pmSetProgname(argv[0]); + + /* setup dispatch table and sentinel */ + dispatchTable[0].lpServiceName = services[0].name; + dispatchTable[0].lpServiceProc = services[0].setup; + dispatchTable[1].lpServiceName = NULL; + dispatchTable[1].lpServiceProc = NULL; + + if (!StartServiceCtrlDispatcher(dispatchTable)) { + DWORD c = GetLastError(); + fprintf(stderr, "%s: cannot dispatch services (%ld)\n", pmProgname, c); + if (c == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) + fprintf(stderr, "%s: run as service, not on console\n", pmProgname); + return 1; + } + return 0; +} diff --git a/src/win32ctl/setevent/GNUmakefile b/src/win32ctl/setevent/GNUmakefile new file mode 100644 index 0000000..d00af4f --- /dev/null +++ b/src/win32ctl/setevent/GNUmakefile @@ -0,0 +1,38 @@ +# +# Copyright (c) 2008-2009 Aconex. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# + +TOPDIR = ../../.. +include $(TOPDIR)/src/include/builddefs + +CFILES = pcp-setevent.c +CMDTARGET = pcp-setevent.exe +LLDLIBS = $(PCPLIB) +LSRCFILES = $(WRAPPERS) + +default: build-me + +include $(BUILDRULES) + +ifeq "$(TARGET_OS)" "mingw" +build-me: $(CMDTARGET) +install: default + $(INSTALL) -m 755 $(CMDTARGET) $(PCP_BIN_DIR)/$(CMDTARGET) +else +build-me: +install: +endif + +default_pcp: default + +install_pcp: install diff --git a/src/win32ctl/setevent/pcp-setevent.c b/src/win32ctl/setevent/pcp-setevent.c new file mode 100644 index 0000000..dc6ad68 --- /dev/null +++ b/src/win32ctl/setevent/pcp-setevent.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2009 Aconex. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ +#include "pmapi.h" +#include "impl.h" + +enum { + PCP_SIGHUP = 1, + PCP_SIGUSR1 = 2, + PCP_SIGTERM = 3, + PCP_SIGKILL = 4, +}; + +int +atosig(const char *sig) +{ + if (strcmp(sig, "HUP") == 0) + return PCP_SIGHUP; + if (strcmp(sig, "USR1") == 0) + return PCP_SIGUSR1; + if (strcmp(sig, "TERM") == 0) + return PCP_SIGTERM; + if (strcmp(sig, "KILL") == 0) + return PCP_SIGKILL; + return 0; +} + +int +main(int argc, char **argv) +{ + pid_t pid; + char name[64]; + int sig, error = 0; + + __pmSetProgname(argv[0]); + + if (argc != 3) + error++; + else if ((sig = atosig(argv[1])) < 1) + error++; + else if ((pid = (pid_t)atoi(argv[2])) < 1) + error++; + + if (error) { + fprintf(stderr, "Usage: %s <HUP|USR1|TERM|KILL> <PID>\n", pmProgname); + return 2; + } + + if (sig == PCP_SIGKILL) { + __pmProcessTerminate(pid, 1); + return 0; + } + + if (!__pmProcessExists(pid)) { + fprintf(stderr, "%s: OpenEvent(%s) failed on PID %" FMT_PID " (%ld)\n", + pmProgname, name, pid, GetLastError()); + return 1; + } + + snprintf(name, sizeof(name), "PCP/%" FMT_PID "/SIG%s", pid, argv[1]); + HANDLE h = OpenEvent(EVENT_MODIFY_STATE, FALSE, TEXT(name)); + if (!h) { + fprintf(stderr, "%s: OpenEvent(%s) failed on PID %" FMT_PID " (%ld)\n", + pmProgname, name, pid, GetLastError()); + return 1; + } + if (!SetEvent(h)) { + fprintf(stderr, "%s: SetEvent(%s) failed on PID %" FMT_PID " (%ld)\n", + pmProgname, name, pid, GetLastError()); + return 1; + } + + return 0; +} |