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 //! ApiSet Contract for api-ms-win-core-processthreads-l1
8 
9 use ctypes::{c_int, c_void};
10 use shared::basetsd::{DWORD_PTR, PSIZE_T, PULONG_PTR, SIZE_T, ULONG_PTR};
11 use shared::guiddef::LPCGUID;
12 use shared::minwindef::{
13     BOOL, DWORD, LPBYTE, LPCVOID, LPDWORD, LPFILETIME, LPVOID, PBOOL, PDWORD, PULONG, UINT, WORD
14 };
15 use um::minwinbase::{LPCONTEXT, LPSECURITY_ATTRIBUTES, LPTHREAD_START_ROUTINE};
16 use um::winnt::{
17     CONTEXT, HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PAPCFUNC, PHANDLE, PPROCESSOR_NUMBER,
18     PROCESS_MITIGATION_POLICY, PVOID
19 };
20 
21 STRUCT!{struct PROCESS_INFORMATION {
22     hProcess: HANDLE,
23     hThread: HANDLE,
24     dwProcessId: DWORD,
25     dwThreadId: DWORD,
26 }}
27 pub type PPROCESS_INFORMATION = *mut PROCESS_INFORMATION;
28 pub type LPPROCESS_INFORMATION = *mut PROCESS_INFORMATION;
29 STRUCT!{struct STARTUPINFOA {
30     cb: DWORD,
31     lpReserved: LPSTR,
32     lpDesktop: LPSTR,
33     lpTitle: LPSTR,
34     dwX: DWORD,
35     dwY: DWORD,
36     dwXSize: DWORD,
37     dwYSize: DWORD,
38     dwXCountChars: DWORD,
39     dwYCountChars: DWORD,
40     dwFillAttribute: DWORD,
41     dwFlags: DWORD,
42     wShowWindow: WORD,
43     cbReserved2: WORD,
44     lpReserved2: LPBYTE,
45     hStdInput: HANDLE,
46     hStdOutput: HANDLE,
47     hStdError: HANDLE,
48 }}
49 pub type LPSTARTUPINFOA = *mut STARTUPINFOA;
50 STRUCT!{struct STARTUPINFOW {
51     cb: DWORD,
52     lpReserved: LPWSTR,
53     lpDesktop: LPWSTR,
54     lpTitle: LPWSTR,
55     dwX: DWORD,
56     dwY: DWORD,
57     dwXSize: DWORD,
58     dwYSize: DWORD,
59     dwXCountChars: DWORD,
60     dwYCountChars: DWORD,
61     dwFillAttribute: DWORD,
62     dwFlags: DWORD,
63     wShowWindow: WORD,
64     cbReserved2: WORD,
65     lpReserved2: LPBYTE,
66     hStdInput: HANDLE,
67     hStdOutput: HANDLE,
68     hStdError: HANDLE,
69 }}
70 pub type LPSTARTUPINFOW = *mut STARTUPINFOW;
71 extern "system" {
QueueUserAPC( pfnAPC: PAPCFUNC, hThread: HANDLE, dwData: ULONG_PTR, ) -> DWORD72     pub fn QueueUserAPC(
73         pfnAPC: PAPCFUNC,
74         hThread: HANDLE,
75         dwData: ULONG_PTR,
76     ) -> DWORD;
GetProcessTimes( hProcess: HANDLE, lpCreationTime: LPFILETIME, lpExitTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL77     pub fn GetProcessTimes(
78         hProcess: HANDLE,
79         lpCreationTime: LPFILETIME,
80         lpExitTime: LPFILETIME,
81         lpKernelTime: LPFILETIME,
82         lpUserTime: LPFILETIME,
83     ) -> BOOL;
GetCurrentProcess() -> HANDLE84     pub fn GetCurrentProcess() -> HANDLE;
GetCurrentProcessId() -> DWORD85     pub fn GetCurrentProcessId() -> DWORD;
ExitProcess( uExitCode: UINT, )86     pub fn ExitProcess(
87         uExitCode: UINT,
88     );
TerminateProcess( hProcess: HANDLE, uExitCode: UINT, ) -> BOOL89     pub fn TerminateProcess(
90         hProcess: HANDLE,
91         uExitCode: UINT,
92     ) -> BOOL;
GetExitCodeProcess( hProcess: HANDLE, lpExitCode: LPDWORD, ) -> BOOL93     pub fn GetExitCodeProcess(
94         hProcess: HANDLE,
95         lpExitCode: LPDWORD,
96     ) -> BOOL;
SwitchToThread() -> BOOL97     pub fn SwitchToThread() -> BOOL;
CreateThread( lpThreadAttributes: LPSECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: LPVOID, dwCreationFlags: DWORD, lpThreadId: LPDWORD, ) -> HANDLE98     pub fn CreateThread(
99         lpThreadAttributes: LPSECURITY_ATTRIBUTES,
100         dwStackSize: SIZE_T,
101         lpStartAddress: LPTHREAD_START_ROUTINE,
102         lpParameter: LPVOID,
103         dwCreationFlags: DWORD,
104         lpThreadId: LPDWORD,
105     ) -> HANDLE;
CreateRemoteThread( hProcess: HANDLE, lpThreadAttributes: LPSECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: LPVOID, dwCreationFlags: DWORD, lpThreadId: LPDWORD, ) -> HANDLE106     pub fn CreateRemoteThread(
107         hProcess: HANDLE,
108         lpThreadAttributes: LPSECURITY_ATTRIBUTES,
109         dwStackSize: SIZE_T,
110         lpStartAddress: LPTHREAD_START_ROUTINE,
111         lpParameter: LPVOID,
112         dwCreationFlags: DWORD,
113         lpThreadId: LPDWORD,
114     ) -> HANDLE;
GetCurrentThread() -> HANDLE115     pub fn GetCurrentThread() -> HANDLE;
GetCurrentThreadId() -> DWORD116     pub fn GetCurrentThreadId() -> DWORD;
OpenThread( dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwThreadId: DWORD, ) -> HANDLE117     pub fn OpenThread(
118         dwDesiredAccess: DWORD,
119         bInheritHandle: BOOL,
120         dwThreadId: DWORD,
121     ) -> HANDLE;
SetThreadPriority( hThread: HANDLE, nPriority: c_int, ) -> BOOL122     pub fn SetThreadPriority(
123         hThread: HANDLE,
124         nPriority: c_int,
125     ) -> BOOL;
SetThreadPriorityBoost( hThread: HANDLE, bDisablePriorityBoost: BOOL, ) -> BOOL126     pub fn SetThreadPriorityBoost(
127         hThread: HANDLE,
128         bDisablePriorityBoost: BOOL,
129     ) -> BOOL;
GetThreadPriorityBoost( hThread: HANDLE, pDisablePriorityBoost: PBOOL, ) -> BOOL130     pub fn GetThreadPriorityBoost(
131         hThread: HANDLE,
132         pDisablePriorityBoost: PBOOL,
133     ) -> BOOL;
GetThreadPriority( hThread: HANDLE, ) -> c_int134     pub fn GetThreadPriority(
135         hThread: HANDLE,
136     ) -> c_int;
ExitThread( dwExitCode: DWORD, )137     pub fn ExitThread(
138         dwExitCode: DWORD,
139     );
TerminateThread( hThread: HANDLE, dwExitCode: DWORD, ) -> BOOL140     pub fn TerminateThread(
141         hThread: HANDLE,
142         dwExitCode: DWORD,
143     ) -> BOOL;
GetExitCodeThread( hThread: HANDLE, lpExitCode: LPDWORD, ) -> BOOL144     pub fn GetExitCodeThread(
145         hThread: HANDLE,
146         lpExitCode: LPDWORD,
147     ) -> BOOL;
SuspendThread( hThread: HANDLE, ) -> DWORD148     pub fn SuspendThread(
149         hThread: HANDLE,
150     ) -> DWORD;
ResumeThread( hThread: HANDLE, ) -> DWORD151     pub fn ResumeThread(
152         hThread: HANDLE,
153     ) -> DWORD;
154 }
155 pub const TLS_OUT_OF_INDEXES: DWORD = 0xFFFFFFFF;
156 extern "system" {
TlsAlloc() -> DWORD157     pub fn TlsAlloc() -> DWORD;
TlsGetValue( dwTlsIndex: DWORD, ) -> LPVOID158     pub fn TlsGetValue(
159         dwTlsIndex: DWORD,
160     ) -> LPVOID;
TlsSetValue( dwTlsIndex: DWORD, lpTlsValue: LPVOID, ) -> BOOL161     pub fn TlsSetValue(
162         dwTlsIndex: DWORD,
163         lpTlsValue: LPVOID,
164     ) -> BOOL;
TlsFree( dwTlsIndex: DWORD, ) -> BOOL165     pub fn TlsFree(
166         dwTlsIndex: DWORD,
167     ) -> BOOL;
CreateProcessA( lpApplicationName: LPCSTR, lpCommandLine: LPSTR, lpProcessAttributes: LPSECURITY_ATTRIBUTES, lpThreadAttributes: LPSECURITY_ATTRIBUTES, bInheritHandles: BOOL, dwCreationFlags: DWORD, lpEnvironment: LPVOID, lpCurrentDirectory: LPCSTR, lpStartupInfo: LPSTARTUPINFOA, lpProcessInformation: LPPROCESS_INFORMATION, ) -> BOOL168     pub fn CreateProcessA(
169         lpApplicationName: LPCSTR,
170         lpCommandLine: LPSTR,
171         lpProcessAttributes: LPSECURITY_ATTRIBUTES,
172         lpThreadAttributes: LPSECURITY_ATTRIBUTES,
173         bInheritHandles: BOOL,
174         dwCreationFlags: DWORD,
175         lpEnvironment: LPVOID,
176         lpCurrentDirectory: LPCSTR,
177         lpStartupInfo: LPSTARTUPINFOA,
178         lpProcessInformation: LPPROCESS_INFORMATION,
179     ) -> BOOL;
CreateProcessW( lpApplicationName: LPCWSTR, lpCommandLine: LPWSTR, lpProcessAttributes: LPSECURITY_ATTRIBUTES, lpThreadAttributes: LPSECURITY_ATTRIBUTES, bInheritHandles: BOOL, dwCreationFlags: DWORD, lpEnvironment: LPVOID, lpCurrentDirectory: LPCWSTR, lpStartupInfo: LPSTARTUPINFOW, lpProcessInformation: LPPROCESS_INFORMATION, ) -> BOOL180     pub fn CreateProcessW(
181         lpApplicationName: LPCWSTR,
182         lpCommandLine: LPWSTR,
183         lpProcessAttributes: LPSECURITY_ATTRIBUTES,
184         lpThreadAttributes: LPSECURITY_ATTRIBUTES,
185         bInheritHandles: BOOL,
186         dwCreationFlags: DWORD,
187         lpEnvironment: LPVOID,
188         lpCurrentDirectory: LPCWSTR,
189         lpStartupInfo: LPSTARTUPINFOW,
190         lpProcessInformation: LPPROCESS_INFORMATION,
191     ) -> BOOL;
SetProcessShutdownParameters( dwLevel: DWORD, dwFlags: DWORD, ) -> BOOL192     pub fn SetProcessShutdownParameters(
193         dwLevel: DWORD,
194         dwFlags: DWORD,
195     ) -> BOOL;
GetProcessVersion( ProcessId: DWORD, ) -> DWORD196     pub fn GetProcessVersion(
197         ProcessId: DWORD,
198     ) -> DWORD;
GetStartupInfoW( lpStartupInfo: LPSTARTUPINFOW, )199     pub fn GetStartupInfoW(
200         lpStartupInfo: LPSTARTUPINFOW,
201     );
202     // pub fn CreateProcessAsUserW();
203     // pub fn GetCurrentProcessToken();
204     // pub fn GetCurrentThreadToken();
205     // pub fn GetCurrentThreadEffectiveToken();
206     // pub fn SetThreadToken();
OpenProcessToken( ProcessHandle: HANDLE, DesiredAccess: DWORD, TokenHandle: PHANDLE, ) -> BOOL207     pub fn OpenProcessToken(
208         ProcessHandle: HANDLE,
209         DesiredAccess: DWORD,
210         TokenHandle: PHANDLE,
211     ) -> BOOL;
212     // pub fn OpenThreadToken();
SetPriorityClass( hProcess: HANDLE, dwPriorityClass: DWORD, ) -> BOOL213     pub fn SetPriorityClass(
214         hProcess: HANDLE,
215         dwPriorityClass: DWORD,
216     ) -> BOOL;
SetThreadStackGuarantee( StackSizeInBytes: PULONG, ) -> BOOL217     pub fn SetThreadStackGuarantee(
218         StackSizeInBytes: PULONG,
219     ) -> BOOL;
GetPriorityClass( hProcess: HANDLE, ) -> DWORD220     pub fn GetPriorityClass(
221         hProcess: HANDLE,
222     ) -> DWORD;
ProcessIdToSessionId( dwProcessId: DWORD, pSessionId: *mut DWORD, ) -> BOOL223     pub fn ProcessIdToSessionId(
224         dwProcessId: DWORD,
225         pSessionId: *mut DWORD,
226     ) -> BOOL;
GetProcessId( Process: HANDLE, ) -> DWORD227     pub fn GetProcessId(
228         Process: HANDLE,
229     ) -> DWORD;
230 }
231 STRUCT!{struct PROC_THREAD_ATTRIBUTE_LIST {
232     dummy: *mut c_void,
233 }}
234 pub type PPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST;
235 pub type LPPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST;
236 extern "system" {
GetThreadId( Thread: HANDLE, ) -> DWORD237     pub fn GetThreadId(
238         Thread: HANDLE,
239     ) -> DWORD;
FlushProcessWriteBuffers()240     pub fn FlushProcessWriteBuffers();
GetProcessIdOfThread( Thread: HANDLE, ) -> DWORD241     pub fn GetProcessIdOfThread(
242         Thread: HANDLE,
243     ) -> DWORD;
InitializeProcThreadAttributeList( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, dwAttributeCount: DWORD, dwFlags: DWORD, lpSize: PSIZE_T, ) -> BOOL244     pub fn InitializeProcThreadAttributeList(
245         lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
246         dwAttributeCount: DWORD,
247         dwFlags: DWORD,
248         lpSize: PSIZE_T,
249     ) -> BOOL;
DeleteProcThreadAttributeList( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, )250     pub fn DeleteProcThreadAttributeList(
251         lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
252     );
SetProcessAffinityUpdateMode( hProcess: HANDLE, dwFlags: DWORD, ) -> BOOL253     pub fn SetProcessAffinityUpdateMode(
254         hProcess: HANDLE,
255         dwFlags: DWORD,
256     ) -> BOOL;
QueryProcessAffinityUpdateMode( hProcess: HANDLE, lpdwFlags: LPDWORD, ) -> BOOL257     pub fn QueryProcessAffinityUpdateMode(
258         hProcess: HANDLE,
259         lpdwFlags: LPDWORD,
260     ) -> BOOL;
UpdateProcThreadAttribute( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, dwFlags: DWORD, Attribute: DWORD_PTR, lpValue: PVOID, cbSize: SIZE_T, lpPreviousValue: PVOID, lpReturnSize: PSIZE_T, ) -> BOOL261     pub fn UpdateProcThreadAttribute(
262         lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
263         dwFlags: DWORD,
264         Attribute: DWORD_PTR,
265         lpValue: PVOID,
266         cbSize: SIZE_T,
267         lpPreviousValue: PVOID,
268         lpReturnSize: PSIZE_T,
269     ) -> BOOL;
CreateRemoteThreadEx( hProcess: HANDLE, lpThreadAttributes: LPSECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: LPVOID, dwCreationFlags: DWORD, lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, lpThreadId: LPDWORD, ) -> HANDLE270     pub fn CreateRemoteThreadEx(
271         hProcess: HANDLE,
272         lpThreadAttributes: LPSECURITY_ATTRIBUTES,
273         dwStackSize: SIZE_T,
274         lpStartAddress: LPTHREAD_START_ROUTINE,
275         lpParameter: LPVOID,
276         dwCreationFlags: DWORD,
277         lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
278         lpThreadId: LPDWORD,
279     ) -> HANDLE;
GetCurrentThreadStackLimits( LowLimit: PULONG_PTR, HighLimit: PULONG_PTR, )280     pub fn GetCurrentThreadStackLimits(
281         LowLimit: PULONG_PTR,
282         HighLimit: PULONG_PTR,
283     );
GetThreadContext( hThread: HANDLE, lpContext: LPCONTEXT, ) -> BOOL284     pub fn GetThreadContext(
285         hThread: HANDLE,
286         lpContext: LPCONTEXT,
287     ) -> BOOL;
SetThreadContext( hThread: HANDLE, lpContext: *const CONTEXT, ) -> BOOL288     pub fn SetThreadContext(
289         hThread: HANDLE,
290         lpContext: *const CONTEXT,
291     ) -> BOOL;
SetProcessMitigationPolicy( MitigationPolicy: PROCESS_MITIGATION_POLICY, lpBuffer: PVOID, dwLength: SIZE_T, ) -> BOOL292     pub fn SetProcessMitigationPolicy(
293         MitigationPolicy: PROCESS_MITIGATION_POLICY,
294         lpBuffer: PVOID,
295         dwLength: SIZE_T,
296     ) -> BOOL;
GetProcessMitigationPolicy( hProcess: HANDLE, MitigationPolicy: PROCESS_MITIGATION_POLICY, lpBuffer: PVOID, dwLength: SIZE_T, ) -> BOOL297     pub fn GetProcessMitigationPolicy(
298         hProcess: HANDLE,
299         MitigationPolicy: PROCESS_MITIGATION_POLICY,
300         lpBuffer: PVOID,
301         dwLength: SIZE_T,
302     ) -> BOOL;
FlushInstructionCache( hProcess: HANDLE, lpBaseAddress: LPCVOID, dwSize: SIZE_T, ) -> BOOL303     pub fn FlushInstructionCache(
304         hProcess: HANDLE,
305         lpBaseAddress: LPCVOID,
306         dwSize: SIZE_T,
307     ) -> BOOL;
GetThreadTimes( hThread: HANDLE, lpCreationTime: LPFILETIME, lpExitTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL308     pub fn GetThreadTimes(
309         hThread: HANDLE,
310         lpCreationTime: LPFILETIME,
311         lpExitTime: LPFILETIME,
312         lpKernelTime: LPFILETIME,
313         lpUserTime: LPFILETIME,
314     ) -> BOOL;
OpenProcess( dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwProcessId: DWORD, ) -> HANDLE315     pub fn OpenProcess(
316         dwDesiredAccess: DWORD,
317         bInheritHandle: BOOL,
318         dwProcessId: DWORD,
319     ) -> HANDLE;
IsProcessorFeaturePresent( ProcessorFeature: DWORD, ) -> BOOL320     pub fn IsProcessorFeaturePresent(
321         ProcessorFeature: DWORD,
322     ) -> BOOL;
GetProcessHandleCount( hProcess: HANDLE, pdwHandleCount: PDWORD, ) -> BOOL323     pub fn GetProcessHandleCount(
324         hProcess: HANDLE,
325         pdwHandleCount: PDWORD,
326     ) -> BOOL;
GetCurrentProcessorNumber() -> DWORD327     pub fn GetCurrentProcessorNumber() -> DWORD;
SetThreadIdealProcessorEx( hThread: HANDLE, lpIdealProcessor: PPROCESSOR_NUMBER, lpPreviousIdealProcessor: PPROCESSOR_NUMBER, ) -> BOOL328     pub fn SetThreadIdealProcessorEx(
329         hThread: HANDLE,
330         lpIdealProcessor: PPROCESSOR_NUMBER,
331         lpPreviousIdealProcessor: PPROCESSOR_NUMBER,
332     ) -> BOOL;
GetThreadIdealProcessorEx( hThread: HANDLE, lpIdealProcessor: PPROCESSOR_NUMBER, ) -> BOOL333     pub fn GetThreadIdealProcessorEx(
334         hThread: HANDLE,
335         lpIdealProcessor: PPROCESSOR_NUMBER,
336     ) -> BOOL;
GetCurrentProcessorNumberEx( ProcNumber: PPROCESSOR_NUMBER, )337     pub fn GetCurrentProcessorNumberEx(
338         ProcNumber: PPROCESSOR_NUMBER,
339     );
GetProcessPriorityBoost( hProcess: HANDLE, pDisablePriorityBoost: PBOOL, ) -> BOOL340     pub fn GetProcessPriorityBoost(
341         hProcess: HANDLE,
342         pDisablePriorityBoost: PBOOL,
343     ) -> BOOL;
SetProcessPriorityBoost( hProcess: HANDLE, bDisablePriorityBoost: BOOL, ) -> BOOL344     pub fn SetProcessPriorityBoost(
345         hProcess: HANDLE,
346         bDisablePriorityBoost: BOOL,
347     ) -> BOOL;
GetThreadIOPendingFlag( hThread: HANDLE, lpIOIsPending: PBOOL, ) -> BOOL348     pub fn GetThreadIOPendingFlag(
349         hThread: HANDLE,
350         lpIOIsPending: PBOOL,
351     ) -> BOOL;
GetSystemTimes( lpIdleTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL352     pub fn GetSystemTimes(
353         lpIdleTime: LPFILETIME,
354         lpKernelTime: LPFILETIME,
355         lpUserTime: LPFILETIME,
356     ) -> BOOL;
357 }
358 ENUM!{enum THREAD_INFORMATION_CLASS {
359     ThreadMemoryPriority,
360     ThreadAbsoluteCpuPriority,
361     ThreadInformationClassMax,
362 }}
363 // MEMORY_PRIORITY_INFORMATION
364 extern "system" {
GetThreadInformation( hThread: HANDLE, ThreadInformationClass: THREAD_INFORMATION_CLASS, ThreadInformation: LPVOID, ThreadInformationSize: DWORD, ) -> BOOL365     pub fn GetThreadInformation(
366         hThread: HANDLE,
367         ThreadInformationClass: THREAD_INFORMATION_CLASS,
368         ThreadInformation: LPVOID,
369         ThreadInformationSize: DWORD,
370     ) -> BOOL;
SetThreadInformation( hThread: HANDLE, ThreadInformationClass: THREAD_INFORMATION_CLASS, ThreadInformation: LPVOID, ThreadInformationSize: DWORD, )371     pub fn SetThreadInformation(
372         hThread: HANDLE,
373         ThreadInformationClass: THREAD_INFORMATION_CLASS,
374         ThreadInformation: LPVOID,
375         ThreadInformationSize: DWORD,
376     );
IsProcessCritical( hProcess: HANDLE, Critical: PBOOL, ) -> BOOL377     pub fn IsProcessCritical(
378         hProcess: HANDLE,
379         Critical: PBOOL,
380     ) -> BOOL;
SetProtectedPolicy( PolicyGuid: LPCGUID, PolicyValue: ULONG_PTR, OldPolicyValue: PULONG_PTR, ) -> BOOL381     pub fn SetProtectedPolicy(
382         PolicyGuid: LPCGUID,
383         PolicyValue: ULONG_PTR,
384         OldPolicyValue: PULONG_PTR,
385     ) -> BOOL;
QueryProtectedPolicy( PolicyGuid: LPCGUID, PolicyValue: PULONG_PTR, ) -> BOOL386     pub fn QueryProtectedPolicy(
387         PolicyGuid: LPCGUID,
388         PolicyValue: PULONG_PTR,
389     ) -> BOOL;
SetThreadIdealProcessor( hThread: HANDLE, dwIdealProcessor: DWORD, ) -> DWORD390     pub fn SetThreadIdealProcessor(
391         hThread: HANDLE,
392         dwIdealProcessor: DWORD,
393     ) -> DWORD;
394 }
395 ENUM!{enum PROCESS_INFORMATION_CLASS {
396     ProcessMemoryPriority,
397     ProcessInformationClassMax,
398 }}
399 extern "system" {
SetProcessInformation( hProcess: HANDLE, ProcessInformationClass: PROCESS_INFORMATION_CLASS, ProcessInformation: LPVOID, ProcessInformationSize: DWORD, ) -> BOOL400     pub fn SetProcessInformation(
401         hProcess: HANDLE,
402         ProcessInformationClass: PROCESS_INFORMATION_CLASS,
403         ProcessInformation: LPVOID,
404         ProcessInformationSize: DWORD,
405     ) -> BOOL;
GetProcessInformation( hProcess: HANDLE, ProcessInformationClass: PROCESS_INFORMATION_CLASS, ProcessInformation: LPVOID, ProcessInformationSize: DWORD, ) -> BOOL406     pub fn GetProcessInformation(
407         hProcess: HANDLE,
408         ProcessInformationClass: PROCESS_INFORMATION_CLASS,
409         ProcessInformation: LPVOID,
410         ProcessInformationSize: DWORD,
411     ) -> BOOL;
412     // pub fn GetSystemCpuSetInformation();
413     // pub fn GetProcessDefaultCpuSets();
414     // pub fn SetProcessDefaultCpuSets();
415     // pub fn GetThreadSelectedCpuSets();
416     // pub fn SetThreadSelectedCpuSets();
417     // pub fn CreateProcessAsUserA();
GetProcessShutdownParameters( lpdwLevel: LPDWORD, lpdwFlags: LPDWORD, ) -> BOOL418     pub fn GetProcessShutdownParameters(
419         lpdwLevel: LPDWORD,
420         lpdwFlags: LPDWORD,
421     ) -> BOOL;
422     // pub fn SetThreadDescription();
423     // pub fn GetThreadDescription();
424 }
425