winapi_ui_automation/um/
processsnapshot.rs1use 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 PssWalkMarkerSeekToBeginning(
106 WalkMarkerHandle: HPSS,
107 ) -> DWORD;
108 pub fn PssWalkMarkerSetPosition(
109 WalkMarkerHandle: HPSSWALK,
110 Position: ULONG_PTR,
111 ) -> DWORD;
112 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}