From 73bb3f8f6c547aca754046b0b8b6d63696ef31b6 Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <nathbap...@gmail.com>
Date: Sun, 31 Dec 2023 18:44:45 +0000
Subject: [PATCH] headers: Add processsnapshot.h

Required for 
https://github.com/python/cpython/blob/v3.12.0/Modules/posixmodule.c

Signed-off-by: Biswapriyo Nath <nathbap...@gmail.com>
---
 mingw-w64-headers/include/processsnapshot.h | 299 ++++++++++++++++++++
 1 file changed, 299 insertions(+)
 create mode 100644 mingw-w64-headers/include/processsnapshot.h

diff --git a/mingw-w64-headers/include/processsnapshot.h 
b/mingw-w64-headers/include/processsnapshot.h
new file mode 100644
index 0000000..a3f9efb
--- /dev/null
+++ b/mingw-w64-headers/include/processsnapshot.h
@@ -0,0 +1,299 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef PROCESSSNAPSHOT_H
+#define PROCESSSNAPSHOT_H
+
+typedef enum {
+  PSS_HANDLE_NONE = 0x00,
+  PSS_HANDLE_HAVE_TYPE = 0x01,
+  PSS_HANDLE_HAVE_NAME = 0x02,
+  PSS_HANDLE_HAVE_BASIC_INFORMATION = 0x04,
+  PSS_HANDLE_HAVE_TYPE_SPECIFIC_INFORMATION = 0x08
+} PSS_HANDLE_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(PSS_HANDLE_FLAGS);
+
+typedef enum {
+  PSS_OBJECT_TYPE_UNKNOWN = 0,
+  PSS_OBJECT_TYPE_PROCESS = 1,
+  PSS_OBJECT_TYPE_THREAD = 2,
+  PSS_OBJECT_TYPE_MUTANT = 3,
+  PSS_OBJECT_TYPE_EVENT = 4,
+  PSS_OBJECT_TYPE_SECTION = 5,
+  PSS_OBJECT_TYPE_SEMAPHORE = 6
+} PSS_OBJECT_TYPE;
+
+typedef enum {
+  PSS_CAPTURE_NONE = 0x00000000,
+  PSS_CAPTURE_VA_CLONE = 0x00000001,
+  PSS_CAPTURE_RESERVED_00000002 = 0x00000002,
+  PSS_CAPTURE_HANDLES = 0x00000004,
+  PSS_CAPTURE_HANDLE_NAME_INFORMATION = 0x00000008,
+  PSS_CAPTURE_HANDLE_BASIC_INFORMATION = 0x00000010,
+  PSS_CAPTURE_HANDLE_TYPE_SPECIFIC_INFORMATION = 0x00000020,
+  PSS_CAPTURE_HANDLE_TRACE = 0x00000040,
+  PSS_CAPTURE_THREADS = 0x00000080,
+  PSS_CAPTURE_THREAD_CONTEXT = 0x00000100,
+  PSS_CAPTURE_THREAD_CONTEXT_EXTENDED = 0x00000200,
+  PSS_CAPTURE_RESERVED_00000400 = 0x00000400,
+  PSS_CAPTURE_VA_SPACE = 0x00000800,
+  PSS_CAPTURE_VA_SPACE_SECTION_INFORMATION = 0x00001000,
+  PSS_CAPTURE_IPT_TRACE = 0x00002000,
+  PSS_CAPTURE_RESERVED_00004000 = 0x00004000,
+  PSS_CREATE_BREAKAWAY_OPTIONAL = 0x04000000,
+  PSS_CREATE_BREAKAWAY = 0x08000000,
+  PSS_CREATE_FORCE_BREAKAWAY = 0x10000000,
+  PSS_CREATE_USE_VM_ALLOCATIONS = 0x20000000,
+  PSS_CREATE_MEASURE_PERFORMANCE = 0x40000000,
+  PSS_CREATE_RELEASE_SECTION = 0x80000000
+} PSS_CAPTURE_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(PSS_CAPTURE_FLAGS);
+
+#define PSS_PERF_RESOLUTION 1000000
+
+typedef enum {
+  PSS_QUERY_PROCESS_INFORMATION = 0,
+  PSS_QUERY_VA_CLONE_INFORMATION = 1,
+  PSS_QUERY_AUXILIARY_PAGES_INFORMATION = 2,
+  PSS_QUERY_VA_SPACE_INFORMATION = 3,
+  PSS_QUERY_HANDLE_INFORMATION = 4,
+  PSS_QUERY_THREAD_INFORMATION = 5,
+  PSS_QUERY_HANDLE_TRACE_INFORMATION = 6,
+  PSS_QUERY_PERFORMANCE_COUNTERS = 7
+} PSS_QUERY_INFORMATION_CLASS;
+
+typedef enum {
+  PSS_WALK_AUXILIARY_PAGES = 0,
+  PSS_WALK_VA_SPACE = 1,
+  PSS_WALK_HANDLES = 2,
+  PSS_WALK_THREADS = 3
+} PSS_WALK_INFORMATION_CLASS;
+
+typedef enum {
+  PSS_DUPLICATE_NONE = 0x00,
+  PSS_DUPLICATE_CLOSE_SOURCE = 0x01
+} PSS_DUPLICATE_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(PSS_DUPLICATE_FLAGS);
+
+DECLARE_HANDLE(HPSS);
+DECLARE_HANDLE(HPSSWALK);
+
+typedef enum {
+  PSS_PROCESS_FLAGS_NONE = 0x00000000,
+  PSS_PROCESS_FLAGS_PROTECTED = 0x00000001,
+  PSS_PROCESS_FLAGS_WOW64 = 0x00000002,
+  PSS_PROCESS_FLAGS_RESERVED_03 = 0x00000004,
+  PSS_PROCESS_FLAGS_RESERVED_04 = 0x00000008,
+  PSS_PROCESS_FLAGS_FROZEN = 0x00000010
+} PSS_PROCESS_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(PSS_PROCESS_FLAGS);
+
+typedef struct {
+  DWORD ExitStatus;
+  void *PebBaseAddress;
+  ULONG_PTR AffinityMask;
+  LONG BasePriority;
+  DWORD ProcessId;
+  DWORD ParentProcessId;
+  PSS_PROCESS_FLAGS Flags;
+  FILETIME CreateTime;
+  FILETIME ExitTime;
+  FILETIME KernelTime;
+  FILETIME UserTime;
+  DWORD PriorityClass;
+  ULONG_PTR PeakVirtualSize;
+  ULONG_PTR VirtualSize;
+  DWORD PageFaultCount;
+  ULONG_PTR PeakWorkingSetSize;
+  ULONG_PTR WorkingSetSize;
+  ULONG_PTR QuotaPeakPagedPoolUsage;
+  ULONG_PTR QuotaPagedPoolUsage;
+  ULONG_PTR QuotaPeakNonPagedPoolUsage;
+  ULONG_PTR QuotaNonPagedPoolUsage;
+  ULONG_PTR PagefileUsage;
+  ULONG_PTR PeakPagefileUsage;
+  ULONG_PTR PrivateUsage;
+  DWORD ExecuteFlags;
+  wchar_t ImageFileName[MAX_PATH];
+} PSS_PROCESS_INFORMATION;
+
+typedef struct {
+  HANDLE VaCloneHandle;
+} PSS_VA_CLONE_INFORMATION;
+
+typedef struct {
+  DWORD AuxPagesCaptured;
+} PSS_AUXILIARY_PAGES_INFORMATION;
+
+typedef struct {
+  DWORD RegionCount;
+} PSS_VA_SPACE_INFORMATION;
+
+typedef struct {
+  DWORD HandlesCaptured;
+} PSS_HANDLE_INFORMATION;
+
+typedef struct {
+  DWORD ThreadsCaptured;
+  DWORD ContextLength;
+} PSS_THREAD_INFORMATION;
+
+typedef struct {
+  HANDLE SectionHandle;
+  DWORD Size;
+} PSS_HANDLE_TRACE_INFORMATION;
+
+typedef struct {
+  UINT64 TotalCycleCount;
+  UINT64 TotalWallClockPeriod;
+  UINT64 VaCloneCycleCount;
+  UINT64 VaCloneWallClockPeriod;
+  UINT64 VaSpaceCycleCount;
+  UINT64 VaSpaceWallClockPeriod;
+  UINT64 AuxPagesCycleCount;
+  UINT64 AuxPagesWallClockPeriod;
+  UINT64 HandlesCycleCount;
+  UINT64 HandlesWallClockPeriod;
+  UINT64 ThreadsCycleCount;
+  UINT64 ThreadsWallClockPeriod;
+} PSS_PERFORMANCE_COUNTERS;
+
+typedef struct {
+  void *Address;
+  MEMORY_BASIC_INFORMATION BasicInformation;
+  FILETIME CaptureTime;
+  void *PageContents;
+  DWORD PageSize;
+} PSS_AUXILIARY_PAGE_ENTRY;
+
+typedef struct {
+  void *BaseAddress;
+  void *AllocationBase;
+  DWORD AllocationProtect;
+  ULONG_PTR RegionSize;
+  DWORD State;
+  DWORD Protect;
+  DWORD Type;
+  DWORD TimeDateStamp;
+  DWORD SizeOfImage;
+  void *ImageBase;
+  DWORD CheckSum;
+  WORD MappedFileNameLength;
+  wchar_t const *MappedFileName;
+} PSS_VA_SPACE_ENTRY;
+
+typedef struct {
+  HANDLE Handle;
+  PSS_HANDLE_FLAGS Flags;
+  PSS_OBJECT_TYPE ObjectType;
+  FILETIME CaptureTime;
+  DWORD Attributes;
+  DWORD GrantedAccess;
+  DWORD HandleCount;
+  DWORD PointerCount;
+  DWORD PagedPoolCharge;
+  DWORD NonPagedPoolCharge;
+  FILETIME CreationTime;
+  WORD TypeNameLength;
+  wchar_t const *TypeName;
+  WORD ObjectNameLength;
+  wchar_t const *ObjectName;
+  union {
+    struct {
+      DWORD ExitStatus;
+      void *PebBaseAddress;
+      ULONG_PTR AffinityMask;
+      LONG BasePriority;
+      DWORD ProcessId;
+      DWORD ParentProcessId;
+      DWORD Flags;
+    } Process;
+    struct {
+      DWORD ExitStatus;
+      void *TebBaseAddress;
+      DWORD ProcessId;
+      DWORD ThreadId;
+      ULONG_PTR AffinityMask;
+      int Priority;
+      int BasePriority;
+      void *Win32StartAddress;
+    } Thread;
+    struct {
+      LONG CurrentCount;
+      WINBOOL Abandoned;
+      DWORD OwnerProcessId;
+      DWORD OwnerThreadId;
+    } Mutant;
+    struct {
+      WINBOOL ManualReset;
+      WINBOOL Signaled;
+    } Event;
+    struct {
+      void *BaseAddress;
+      DWORD AllocationAttributes;
+      LARGE_INTEGER MaximumSize;
+    } Section;
+    struct {
+      LONG CurrentCount;
+      LONG MaximumCount;
+    } Semaphore;
+  } TypeSpecificInformation;
+} PSS_HANDLE_ENTRY;
+
+typedef enum {
+  PSS_THREAD_FLAGS_NONE = 0x0000,
+  PSS_THREAD_FLAGS_TERMINATED = 0x0001
+} PSS_THREAD_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(PSS_THREAD_FLAGS);
+
+typedef struct {
+  DWORD ExitStatus;
+  void *TebBaseAddress;
+  DWORD ProcessId;
+  DWORD ThreadId;
+  ULONG_PTR AffinityMask;
+  int Priority;
+  int BasePriority;
+  void *LastSyscallFirstArgument;
+  WORD LastSyscallNumber;
+  FILETIME CreateTime;
+  FILETIME ExitTime;
+  FILETIME KernelTime;
+  FILETIME UserTime;
+  void *Win32StartAddress;
+  FILETIME CaptureTime;
+  PSS_THREAD_FLAGS Flags;
+  WORD SuspendCount;
+  WORD SizeOfContextRecord;
+  PCONTEXT ContextRecord;
+} PSS_THREAD_ENTRY;
+
+typedef struct {
+  void *Context;
+  void *(WINAPI *AllocRoutine)(void *context, DWORD size);
+  void (WINAPI *FreeRoutine)(void *context, void *address);
+} PSS_ALLOCATOR;
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+
+#if (NTDDI_VERSION >= NTDDI_WIN8)
+
+STDAPI_(DWORD) PssCaptureSnapshot(HANDLE ProcessHandle, PSS_CAPTURE_FLAGS 
CaptureFlags, DWORD ThreadContextFlags, HPSS *SnapshotHandle);
+STDAPI_(DWORD) PssFreeSnapshot(HANDLE ProcessHandle, HPSS SnapshotHandle);
+STDAPI_(DWORD) PssQuerySnapshot(HPSS SnapshotHandle, 
PSS_QUERY_INFORMATION_CLASS InformationClass, void *Buffer, DWORD BufferLength);
+STDAPI_(DWORD) PssWalkSnapshot(HPSS SnapshotHandle, PSS_WALK_INFORMATION_CLASS 
InformationClass, HPSSWALK WalkMarkerHandle, void *Buffer, DWORD BufferLength);
+STDAPI_(DWORD) PssDuplicateSnapshot(HANDLE SourceProcessHandle, HPSS 
SnapshotHandle, HANDLE TargetProcessHandle, HPSS *TargetSnapshotHandle, 
PSS_DUPLICATE_FLAGS Flags);
+STDAPI_(DWORD) PssWalkMarkerCreate(PSS_ALLOCATOR const *Allocator, HPSSWALK 
*WalkMarkerHandle);
+STDAPI_(DWORD) PssWalkMarkerFree(HPSSWALK WalkMarkerHandle);
+STDAPI_(DWORD) PssWalkMarkerGetPosition(HPSSWALK WalkMarkerHandle, ULONG_PTR 
*Position);
+STDAPI_(DWORD) PssWalkMarkerSetPosition(HPSSWALK WalkMarkerHandle, ULONG_PTR 
Position);
+STDAPI_(DWORD) PssWalkMarkerSeekToBeginning(HPSSWALK WalkMarkerHandle);
+
+#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
+#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
+#endif /* PROCESSSNAPSHOT_H */
-- 
2.43.0

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to