winapi_ui_automation/um/
processsnapshot.rs

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