1 // Copyright © 2015-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 //! Defines the process snapshot API
9 use shared
::basetsd
::ULONG_PTR
;
10 use shared
::minwindef
::DWORD
;
11 use um
::winnt
::HANDLE
;
12 ENUM
!{enum PSS_CAPTURE_FLAGS
{
13 PSS_CAPTURE_NONE
= 0x00000000,
14 PSS_CAPTURE_VA_CLONE
= 0x00000001,
15 PSS_CAPTURE_RESERVED_00000002
= 0x00000002,
16 PSS_CAPTURE_HANDLES
= 0x00000004,
17 PSS_CAPTURE_HANDLE_NAME_INFORMATION
= 0x00000008,
18 PSS_CAPTURE_HANDLE_BASIC_INFORMATION
= 0x00000010,
19 PSS_CAPTURE_HANDLE_TYPE_SPECIFIC_INFORMATION
= 0x00000020,
20 PSS_CAPTURE_HANDLE_TRACE
= 0x00000040,
21 PSS_CAPTURE_THREADS
= 0x00000080,
22 PSS_CAPTURE_THREAD_CONTEXT
= 0x00000100,
23 PSS_CAPTURE_THREAD_CONTEXT_EXTENDED
= 0x00000200,
24 PSS_CAPTURE_RESERVED_00000400
= 0x00000400,
25 PSS_CAPTURE_VA_SPACE
= 0x00000800,
26 PSS_CAPTURE_VA_SPACE_SECTION_INFORMATION
= 0x00001000,
27 PSS_CREATE_BREAKAWAY_OPTIONAL
= 0x04000000,
28 PSS_CREATE_BREAKAWAY
= 0x08000000,
29 PSS_CREATE_FORCE_BREAKAWAY
= 0x10000000,
30 PSS_CREATE_USE_VM_ALLOCATIONS
= 0x20000000,
31 PSS_CREATE_MEASURE_PERFORMANCE
= 0x40000000,
32 PSS_CREATE_RELEASE_SECTION
= -2147483648i32 as u32,
34 ENUM
!{enum PSS_QUERY_INFORMATION_CLASS
{
35 PSS_QUERY_PROCESS_INFORMATION
= 0,
36 PSS_QUERY_VA_CLONE_INFORMATION
= 1,
37 PSS_QUERY_AUXILIARY_PAGES_INFORMATION
= 2,
38 PSS_QUERY_VA_SPACE_INFORMATION
= 3,
39 PSS_QUERY_HANDLE_INFORMATION
= 4,
40 PSS_QUERY_THREAD_INFORMATION
= 5,
41 PSS_QUERY_HANDLE_TRACE_INFORMATION
= 6,
42 PSS_QUERY_PERFORMANCE_COUNTERS
= 7,
44 ENUM
!{enum PSS_WALK_INFORMATION_CLASS
{
45 PSS_WALK_AUXILIARY_PAGES
= 0,
46 PSS_WALK_VA_SPACE
= 1,
50 ENUM
!{enum PSS_DUPLICATE_FLAGS
{
51 PSS_DUPLICATE_NONE
= 0x00,
52 PSS_DUPLICATE_CLOSE_SOURCE
= 0x01,
54 DECLARE_HANDLE
!(HPSS
, HPSS__
);
55 DECLARE_HANDLE
!(HPSSWALK
, HPSSWALK__
);
56 FN
!{stdcall
pAllocRoutine(
60 FN
!{stdcall
pFreeRoutine(
64 STRUCT
!{struct PSS_ALLOCATOR
{
66 AllocRoutine
: pAllocRoutine
,
67 FreeRoutine
: pFreeRoutine
,
70 pub fn PssCaptureSnapshot(
71 ProcessHandle
: HANDLE
,
72 CaptureFlags
: PSS_CAPTURE_FLAGS
,
73 ThreadContextFlags
: DWORD
,
74 SnapshotHandle
: *mut HPSS
,
76 pub fn PssDuplicateSnapshot(
77 SourceProcessHandle
: HANDLE
,
79 TargetProcessHandle
: HANDLE
,
80 TargetSnapshotHandle
: *mut HPSS
,
81 Flags
: PSS_DUPLICATE_FLAGS
,
83 pub fn PssFreeSnapshot(
84 ProcessHandle
: HANDLE
,
87 pub fn PssQuerySnapshot(
89 InformationClass
: PSS_QUERY_INFORMATION_CLASS
,
93 pub fn PssWalkMarkerCreate(
94 Allocator
: *const PSS_ALLOCATOR
,
95 WalkMarkerHandle
: *mut HPSSWALK
,
97 pub fn PssWalkMarkerFree(
98 WalkMarkerHandle
: HPSSWALK
100 pub fn PssWalkMarkerGetPosition(
101 WalkMarkerHandle
: HPSSWALK
,
102 Position
: *mut ULONG_PTR
104 // pub fn PssWalkMarkerRewind();
105 // pub fn PssWalkMarkerSeek();
106 pub fn PssWalkMarkerSeekToBeginning(
107 WalkMarkerHandle
: HPSS
109 pub fn PssWalkMarkerSetPosition(
110 WalkMarkerHandle
: HPSSWALK
,
113 // pub fn PssWalkMarkerTell();
114 pub fn PssWalkSnapshot(
115 SnapshotHandle
: HPSS
,
116 InformationClass
: PSS_WALK_INFORMATION_CLASS
,
117 WalkMarkerHandle
: HPSSWALK
,