summaryrefslogtreecommitdiffstats
path: root/third_party/rust/winapi/src/um/processthreadsapi.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/winapi/src/um/processthreadsapi.rs')
-rw-r--r--third_party/rust/winapi/src/um/processthreadsapi.rs441
1 files changed, 441 insertions, 0 deletions
diff --git a/third_party/rust/winapi/src/um/processthreadsapi.rs b/third_party/rust/winapi/src/um/processthreadsapi.rs
new file mode 100644
index 0000000000..9629ee865d
--- /dev/null
+++ b/third_party/rust/winapi/src/um/processthreadsapi.rs
@@ -0,0 +1,441 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms
+//! ApiSet Contract for api-ms-win-core-processthreads-l1
+use ctypes::{c_int, c_void};
+use shared::basetsd::{DWORD_PTR, PSIZE_T, PULONG_PTR, SIZE_T, ULONG_PTR};
+use shared::guiddef::LPCGUID;
+use shared::minwindef::{
+ BOOL, DWORD, LPBYTE, LPCVOID, LPDWORD, LPFILETIME, LPVOID, PBOOL, PDWORD, PULONG, UINT, WORD
+};
+use um::minwinbase::{LPCONTEXT, LPSECURITY_ATTRIBUTES, LPTHREAD_START_ROUTINE};
+use um::winnt::{
+ CONTEXT, HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PAPCFUNC, PHANDLE, PPROCESSOR_NUMBER,
+ PROCESS_MITIGATION_POLICY, PVOID
+};
+STRUCT!{struct PROCESS_INFORMATION {
+ hProcess: HANDLE,
+ hThread: HANDLE,
+ dwProcessId: DWORD,
+ dwThreadId: DWORD,
+}}
+pub type PPROCESS_INFORMATION = *mut PROCESS_INFORMATION;
+pub type LPPROCESS_INFORMATION = *mut PROCESS_INFORMATION;
+STRUCT!{struct STARTUPINFOA {
+ cb: DWORD,
+ lpReserved: LPSTR,
+ lpDesktop: LPSTR,
+ lpTitle: LPSTR,
+ dwX: DWORD,
+ dwY: DWORD,
+ dwXSize: DWORD,
+ dwYSize: DWORD,
+ dwXCountChars: DWORD,
+ dwYCountChars: DWORD,
+ dwFillAttribute: DWORD,
+ dwFlags: DWORD,
+ wShowWindow: WORD,
+ cbReserved2: WORD,
+ lpReserved2: LPBYTE,
+ hStdInput: HANDLE,
+ hStdOutput: HANDLE,
+ hStdError: HANDLE,
+}}
+pub type LPSTARTUPINFOA = *mut STARTUPINFOA;
+STRUCT!{struct STARTUPINFOW {
+ cb: DWORD,
+ lpReserved: LPWSTR,
+ lpDesktop: LPWSTR,
+ lpTitle: LPWSTR,
+ dwX: DWORD,
+ dwY: DWORD,
+ dwXSize: DWORD,
+ dwYSize: DWORD,
+ dwXCountChars: DWORD,
+ dwYCountChars: DWORD,
+ dwFillAttribute: DWORD,
+ dwFlags: DWORD,
+ wShowWindow: WORD,
+ cbReserved2: WORD,
+ lpReserved2: LPBYTE,
+ hStdInput: HANDLE,
+ hStdOutput: HANDLE,
+ hStdError: HANDLE,
+}}
+pub type LPSTARTUPINFOW = *mut STARTUPINFOW;
+extern "system" {
+ pub fn QueueUserAPC(
+ pfnAPC: PAPCFUNC,
+ hThread: HANDLE,
+ dwData: ULONG_PTR,
+ ) -> DWORD;
+ pub fn GetProcessTimes(
+ hProcess: HANDLE,
+ lpCreationTime: LPFILETIME,
+ lpExitTime: LPFILETIME,
+ lpKernelTime: LPFILETIME,
+ lpUserTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn GetCurrentProcess() -> HANDLE;
+ pub fn GetCurrentProcessId() -> DWORD;
+ pub fn ExitProcess(
+ uExitCode: UINT,
+ );
+ pub fn TerminateProcess(
+ hProcess: HANDLE,
+ uExitCode: UINT,
+ ) -> BOOL;
+ pub fn GetExitCodeProcess(
+ hProcess: HANDLE,
+ lpExitCode: LPDWORD,
+ ) -> BOOL;
+ pub fn SwitchToThread() -> BOOL;
+ pub fn CreateThread(
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ dwStackSize: SIZE_T,
+ lpStartAddress: LPTHREAD_START_ROUTINE,
+ lpParameter: LPVOID,
+ dwCreationFlags: DWORD,
+ lpThreadId: LPDWORD,
+ ) -> HANDLE;
+ pub fn CreateRemoteThread(
+ hProcess: HANDLE,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ dwStackSize: SIZE_T,
+ lpStartAddress: LPTHREAD_START_ROUTINE,
+ lpParameter: LPVOID,
+ dwCreationFlags: DWORD,
+ lpThreadId: LPDWORD,
+ ) -> HANDLE;
+ pub fn GetCurrentThread() -> HANDLE;
+ pub fn GetCurrentThreadId() -> DWORD;
+ pub fn OpenThread(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ dwThreadId: DWORD,
+ ) -> HANDLE;
+ pub fn SetThreadPriority(
+ hThread: HANDLE,
+ nPriority: c_int,
+ ) -> BOOL;
+ pub fn SetThreadPriorityBoost(
+ hThread: HANDLE,
+ bDisablePriorityBoost: BOOL,
+ ) -> BOOL;
+ pub fn GetThreadPriorityBoost(
+ hThread: HANDLE,
+ pDisablePriorityBoost: PBOOL,
+ ) -> BOOL;
+ pub fn GetThreadPriority(
+ hThread: HANDLE,
+ ) -> c_int;
+ pub fn ExitThread(
+ dwExitCode: DWORD,
+ );
+ pub fn TerminateThread(
+ hThread: HANDLE,
+ dwExitCode: DWORD,
+ ) -> BOOL;
+ pub fn GetExitCodeThread(
+ hThread: HANDLE,
+ lpExitCode: LPDWORD,
+ ) -> BOOL;
+ pub fn SuspendThread(
+ hThread: HANDLE,
+ ) -> DWORD;
+ pub fn ResumeThread(
+ hThread: HANDLE,
+ ) -> DWORD;
+}
+pub const TLS_OUT_OF_INDEXES: DWORD = 0xFFFFFFFF;
+extern "system" {
+ pub fn TlsAlloc() -> DWORD;
+ pub fn TlsGetValue(
+ dwTlsIndex: DWORD,
+ ) -> LPVOID;
+ pub fn TlsSetValue(
+ dwTlsIndex: DWORD,
+ lpTlsValue: LPVOID,
+ ) -> BOOL;
+ pub fn TlsFree(
+ dwTlsIndex: DWORD,
+ ) -> BOOL;
+ pub fn CreateProcessA(
+ lpApplicationName: LPCSTR,
+ lpCommandLine: LPSTR,
+ lpProcessAttributes: LPSECURITY_ATTRIBUTES,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ bInheritHandles: BOOL,
+ dwCreationFlags: DWORD,
+ lpEnvironment: LPVOID,
+ lpCurrentDirectory: LPCSTR,
+ lpStartupInfo: LPSTARTUPINFOA,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+ ) -> BOOL;
+ pub fn CreateProcessW(
+ lpApplicationName: LPCWSTR,
+ lpCommandLine: LPWSTR,
+ lpProcessAttributes: LPSECURITY_ATTRIBUTES,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ bInheritHandles: BOOL,
+ dwCreationFlags: DWORD,
+ lpEnvironment: LPVOID,
+ lpCurrentDirectory: LPCWSTR,
+ lpStartupInfo: LPSTARTUPINFOW,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+ ) -> BOOL;
+ pub fn SetProcessShutdownParameters(
+ dwLevel: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessVersion(
+ ProcessId: DWORD,
+ ) -> DWORD;
+ pub fn GetStartupInfoW(
+ lpStartupInfo: LPSTARTUPINFOW,
+ );
+ pub fn CreateProcessAsUserW(
+ hToken: HANDLE,
+ lpApplicationName: LPCWSTR,
+ lpCommandLine: LPWSTR,
+ lpProcessAttributes: LPSECURITY_ATTRIBUTES,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ bInheritHandles: BOOL,
+ dwCreationFlags: DWORD,
+ lpEnvironment: LPVOID,
+ lpCurrentDirectory: LPCWSTR,
+ lpStartupInfo: LPSTARTUPINFOW,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+ ) -> BOOL;
+ // pub fn GetCurrentProcessToken();
+ // pub fn GetCurrentThreadToken();
+ // pub fn GetCurrentThreadEffectiveToken();
+ pub fn SetThreadToken(
+ Thread: PHANDLE,
+ Token: HANDLE,
+ ) -> BOOL;
+ pub fn OpenProcessToken(
+ ProcessHandle: HANDLE,
+ DesiredAccess: DWORD,
+ TokenHandle: PHANDLE,
+ ) -> BOOL;
+ pub fn OpenThreadToken(
+ ThreadHandle: HANDLE,
+ DesiredAccess: DWORD,
+ OpenAsSelf: BOOL,
+ TokenHandle: PHANDLE,
+ ) -> BOOL;
+ pub fn SetPriorityClass(
+ hProcess: HANDLE,
+ dwPriorityClass: DWORD,
+ ) -> BOOL;
+ pub fn SetThreadStackGuarantee(
+ StackSizeInBytes: PULONG,
+ ) -> BOOL;
+ pub fn GetPriorityClass(
+ hProcess: HANDLE,
+ ) -> DWORD;
+ pub fn ProcessIdToSessionId(
+ dwProcessId: DWORD,
+ pSessionId: *mut DWORD,
+ ) -> BOOL;
+ pub fn GetProcessId(
+ Process: HANDLE,
+ ) -> DWORD;
+}
+STRUCT!{struct PROC_THREAD_ATTRIBUTE_LIST {
+ dummy: *mut c_void,
+}}
+pub type PPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST;
+pub type LPPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST;
+extern "system" {
+ pub fn GetThreadId(
+ Thread: HANDLE,
+ ) -> DWORD;
+ pub fn FlushProcessWriteBuffers();
+ pub fn GetProcessIdOfThread(
+ Thread: HANDLE,
+ ) -> DWORD;
+ pub fn InitializeProcThreadAttributeList(
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ dwAttributeCount: DWORD,
+ dwFlags: DWORD,
+ lpSize: PSIZE_T,
+ ) -> BOOL;
+ pub fn DeleteProcThreadAttributeList(
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ );
+ pub fn SetProcessAffinityUpdateMode(
+ hProcess: HANDLE,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn QueryProcessAffinityUpdateMode(
+ hProcess: HANDLE,
+ lpdwFlags: LPDWORD,
+ ) -> BOOL;
+ pub fn UpdateProcThreadAttribute(
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ dwFlags: DWORD,
+ Attribute: DWORD_PTR,
+ lpValue: PVOID,
+ cbSize: SIZE_T,
+ lpPreviousValue: PVOID,
+ lpReturnSize: PSIZE_T,
+ ) -> BOOL;
+ pub fn CreateRemoteThreadEx(
+ hProcess: HANDLE,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ dwStackSize: SIZE_T,
+ lpStartAddress: LPTHREAD_START_ROUTINE,
+ lpParameter: LPVOID,
+ dwCreationFlags: DWORD,
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ lpThreadId: LPDWORD,
+ ) -> HANDLE;
+ pub fn GetCurrentThreadStackLimits(
+ LowLimit: PULONG_PTR,
+ HighLimit: PULONG_PTR,
+ );
+ pub fn GetThreadContext(
+ hThread: HANDLE,
+ lpContext: LPCONTEXT,
+ ) -> BOOL;
+ pub fn SetThreadContext(
+ hThread: HANDLE,
+ lpContext: *const CONTEXT,
+ ) -> BOOL;
+ pub fn SetProcessMitigationPolicy(
+ MitigationPolicy: PROCESS_MITIGATION_POLICY,
+ lpBuffer: PVOID,
+ dwLength: SIZE_T,
+ ) -> BOOL;
+ pub fn GetProcessMitigationPolicy(
+ hProcess: HANDLE,
+ MitigationPolicy: PROCESS_MITIGATION_POLICY,
+ lpBuffer: PVOID,
+ dwLength: SIZE_T,
+ ) -> BOOL;
+ pub fn FlushInstructionCache(
+ hProcess: HANDLE,
+ lpBaseAddress: LPCVOID,
+ dwSize: SIZE_T,
+ ) -> BOOL;
+ pub fn GetThreadTimes(
+ hThread: HANDLE,
+ lpCreationTime: LPFILETIME,
+ lpExitTime: LPFILETIME,
+ lpKernelTime: LPFILETIME,
+ lpUserTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn OpenProcess(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ dwProcessId: DWORD,
+ ) -> HANDLE;
+ pub fn IsProcessorFeaturePresent(
+ ProcessorFeature: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessHandleCount(
+ hProcess: HANDLE,
+ pdwHandleCount: PDWORD,
+ ) -> BOOL;
+ pub fn GetCurrentProcessorNumber() -> DWORD;
+ pub fn SetThreadIdealProcessorEx(
+ hThread: HANDLE,
+ lpIdealProcessor: PPROCESSOR_NUMBER,
+ lpPreviousIdealProcessor: PPROCESSOR_NUMBER,
+ ) -> BOOL;
+ pub fn GetThreadIdealProcessorEx(
+ hThread: HANDLE,
+ lpIdealProcessor: PPROCESSOR_NUMBER,
+ ) -> BOOL;
+ pub fn GetCurrentProcessorNumberEx(
+ ProcNumber: PPROCESSOR_NUMBER,
+ );
+ pub fn GetProcessPriorityBoost(
+ hProcess: HANDLE,
+ pDisablePriorityBoost: PBOOL,
+ ) -> BOOL;
+ pub fn SetProcessPriorityBoost(
+ hProcess: HANDLE,
+ bDisablePriorityBoost: BOOL,
+ ) -> BOOL;
+ pub fn GetThreadIOPendingFlag(
+ hThread: HANDLE,
+ lpIOIsPending: PBOOL,
+ ) -> BOOL;
+ pub fn GetSystemTimes(
+ lpIdleTime: LPFILETIME,
+ lpKernelTime: LPFILETIME,
+ lpUserTime: LPFILETIME,
+ ) -> BOOL;
+}
+ENUM!{enum THREAD_INFORMATION_CLASS {
+ ThreadMemoryPriority,
+ ThreadAbsoluteCpuPriority,
+ ThreadInformationClassMax,
+}}
+// MEMORY_PRIORITY_INFORMATION
+extern "system" {
+ pub fn GetThreadInformation(
+ hThread: HANDLE,
+ ThreadInformationClass: THREAD_INFORMATION_CLASS,
+ ThreadInformation: LPVOID,
+ ThreadInformationSize: DWORD,
+ ) -> BOOL;
+ pub fn SetThreadInformation(
+ hThread: HANDLE,
+ ThreadInformationClass: THREAD_INFORMATION_CLASS,
+ ThreadInformation: LPVOID,
+ ThreadInformationSize: DWORD,
+ ) -> BOOL;
+ pub fn IsProcessCritical(
+ hProcess: HANDLE,
+ Critical: PBOOL,
+ ) -> BOOL;
+ pub fn SetProtectedPolicy(
+ PolicyGuid: LPCGUID,
+ PolicyValue: ULONG_PTR,
+ OldPolicyValue: PULONG_PTR,
+ ) -> BOOL;
+ pub fn QueryProtectedPolicy(
+ PolicyGuid: LPCGUID,
+ PolicyValue: PULONG_PTR,
+ ) -> BOOL;
+ pub fn SetThreadIdealProcessor(
+ hThread: HANDLE,
+ dwIdealProcessor: DWORD,
+ ) -> DWORD;
+}
+ENUM!{enum PROCESS_INFORMATION_CLASS {
+ ProcessMemoryPriority,
+ ProcessInformationClassMax,
+}}
+extern "system" {
+ pub fn SetProcessInformation(
+ hProcess: HANDLE,
+ ProcessInformationClass: PROCESS_INFORMATION_CLASS,
+ ProcessInformation: LPVOID,
+ ProcessInformationSize: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessInformation(
+ hProcess: HANDLE,
+ ProcessInformationClass: PROCESS_INFORMATION_CLASS,
+ ProcessInformation: LPVOID,
+ ProcessInformationSize: DWORD,
+ ) -> BOOL;
+ // pub fn GetSystemCpuSetInformation();
+ // pub fn GetProcessDefaultCpuSets();
+ // pub fn SetProcessDefaultCpuSets();
+ // pub fn GetThreadSelectedCpuSets();
+ // pub fn SetThreadSelectedCpuSets();
+ // pub fn CreateProcessAsUserA();
+ pub fn GetProcessShutdownParameters(
+ lpdwLevel: LPDWORD,
+ lpdwFlags: LPDWORD,
+ ) -> BOOL;
+ // pub fn SetThreadDescription();
+ // pub fn GetThreadDescription();
+}