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 //! ApiSet Contract for api-ms-win-core-processthreads-l1 7 use ctypes::{c_int, c_void}; 8 use shared::basetsd::{DWORD_PTR, PSIZE_T, PULONG_PTR, SIZE_T, ULONG_PTR}; 9 use shared::guiddef::LPCGUID; 10 use shared::minwindef::{ 11 BOOL, DWORD, LPBYTE, LPCVOID, LPDWORD, LPFILETIME, LPVOID, PBOOL, PDWORD, PULONG, UINT, WORD 12 }; 13 use um::minwinbase::{LPCONTEXT, LPSECURITY_ATTRIBUTES, LPTHREAD_START_ROUTINE}; 14 use um::winnt::{ 15 CONTEXT, HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PAPCFUNC, PHANDLE, PPROCESSOR_NUMBER, 16 PROCESS_MITIGATION_POLICY, PVOID 17 }; 18 STRUCT!{struct PROCESS_INFORMATION { 19 hProcess: HANDLE, 20 hThread: HANDLE, 21 dwProcessId: DWORD, 22 dwThreadId: DWORD, 23 }} 24 pub type PPROCESS_INFORMATION = *mut PROCESS_INFORMATION; 25 pub type LPPROCESS_INFORMATION = *mut PROCESS_INFORMATION; 26 STRUCT!{struct STARTUPINFOA { 27 cb: DWORD, 28 lpReserved: LPSTR, 29 lpDesktop: LPSTR, 30 lpTitle: LPSTR, 31 dwX: DWORD, 32 dwY: DWORD, 33 dwXSize: DWORD, 34 dwYSize: DWORD, 35 dwXCountChars: DWORD, 36 dwYCountChars: DWORD, 37 dwFillAttribute: DWORD, 38 dwFlags: DWORD, 39 wShowWindow: WORD, 40 cbReserved2: WORD, 41 lpReserved2: LPBYTE, 42 hStdInput: HANDLE, 43 hStdOutput: HANDLE, 44 hStdError: HANDLE, 45 }} 46 pub type LPSTARTUPINFOA = *mut STARTUPINFOA; 47 STRUCT!{struct STARTUPINFOW { 48 cb: DWORD, 49 lpReserved: LPWSTR, 50 lpDesktop: LPWSTR, 51 lpTitle: LPWSTR, 52 dwX: DWORD, 53 dwY: DWORD, 54 dwXSize: DWORD, 55 dwYSize: DWORD, 56 dwXCountChars: DWORD, 57 dwYCountChars: DWORD, 58 dwFillAttribute: DWORD, 59 dwFlags: DWORD, 60 wShowWindow: WORD, 61 cbReserved2: WORD, 62 lpReserved2: LPBYTE, 63 hStdInput: HANDLE, 64 hStdOutput: HANDLE, 65 hStdError: HANDLE, 66 }} 67 pub type LPSTARTUPINFOW = *mut STARTUPINFOW; 68 extern "system" { QueueUserAPC( pfnAPC: PAPCFUNC, hThread: HANDLE, dwData: ULONG_PTR, ) -> DWORD69 pub fn QueueUserAPC( 70 pfnAPC: PAPCFUNC, 71 hThread: HANDLE, 72 dwData: ULONG_PTR, 73 ) -> DWORD; GetProcessTimes( hProcess: HANDLE, lpCreationTime: LPFILETIME, lpExitTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL74 pub fn GetProcessTimes( 75 hProcess: HANDLE, 76 lpCreationTime: LPFILETIME, 77 lpExitTime: LPFILETIME, 78 lpKernelTime: LPFILETIME, 79 lpUserTime: LPFILETIME, 80 ) -> BOOL; GetCurrentProcess() -> HANDLE81 pub fn GetCurrentProcess() -> HANDLE; GetCurrentProcessId() -> DWORD82 pub fn GetCurrentProcessId() -> DWORD; ExitProcess( uExitCode: UINT, )83 pub fn ExitProcess( 84 uExitCode: UINT, 85 ); TerminateProcess( hProcess: HANDLE, uExitCode: UINT, ) -> BOOL86 pub fn TerminateProcess( 87 hProcess: HANDLE, 88 uExitCode: UINT, 89 ) -> BOOL; GetExitCodeProcess( hProcess: HANDLE, lpExitCode: LPDWORD, ) -> BOOL90 pub fn GetExitCodeProcess( 91 hProcess: HANDLE, 92 lpExitCode: LPDWORD, 93 ) -> BOOL; SwitchToThread() -> BOOL94 pub fn SwitchToThread() -> BOOL; CreateThread( lpThreadAttributes: LPSECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: LPVOID, dwCreationFlags: DWORD, lpThreadId: LPDWORD, ) -> HANDLE95 pub fn CreateThread( 96 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 97 dwStackSize: SIZE_T, 98 lpStartAddress: LPTHREAD_START_ROUTINE, 99 lpParameter: LPVOID, 100 dwCreationFlags: DWORD, 101 lpThreadId: LPDWORD, 102 ) -> HANDLE; CreateRemoteThread( hProcess: HANDLE, lpThreadAttributes: LPSECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: LPVOID, dwCreationFlags: DWORD, lpThreadId: LPDWORD, ) -> HANDLE103 pub fn CreateRemoteThread( 104 hProcess: HANDLE, 105 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 106 dwStackSize: SIZE_T, 107 lpStartAddress: LPTHREAD_START_ROUTINE, 108 lpParameter: LPVOID, 109 dwCreationFlags: DWORD, 110 lpThreadId: LPDWORD, 111 ) -> HANDLE; GetCurrentThread() -> HANDLE112 pub fn GetCurrentThread() -> HANDLE; GetCurrentThreadId() -> DWORD113 pub fn GetCurrentThreadId() -> DWORD; OpenThread( dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwThreadId: DWORD, ) -> HANDLE114 pub fn OpenThread( 115 dwDesiredAccess: DWORD, 116 bInheritHandle: BOOL, 117 dwThreadId: DWORD, 118 ) -> HANDLE; SetThreadPriority( hThread: HANDLE, nPriority: c_int, ) -> BOOL119 pub fn SetThreadPriority( 120 hThread: HANDLE, 121 nPriority: c_int, 122 ) -> BOOL; SetThreadPriorityBoost( hThread: HANDLE, bDisablePriorityBoost: BOOL, ) -> BOOL123 pub fn SetThreadPriorityBoost( 124 hThread: HANDLE, 125 bDisablePriorityBoost: BOOL, 126 ) -> BOOL; GetThreadPriorityBoost( hThread: HANDLE, pDisablePriorityBoost: PBOOL, ) -> BOOL127 pub fn GetThreadPriorityBoost( 128 hThread: HANDLE, 129 pDisablePriorityBoost: PBOOL, 130 ) -> BOOL; GetThreadPriority( hThread: HANDLE, ) -> c_int131 pub fn GetThreadPriority( 132 hThread: HANDLE, 133 ) -> c_int; ExitThread( dwExitCode: DWORD, )134 pub fn ExitThread( 135 dwExitCode: DWORD, 136 ); TerminateThread( hThread: HANDLE, dwExitCode: DWORD, ) -> BOOL137 pub fn TerminateThread( 138 hThread: HANDLE, 139 dwExitCode: DWORD, 140 ) -> BOOL; GetExitCodeThread( hThread: HANDLE, lpExitCode: LPDWORD, ) -> BOOL141 pub fn GetExitCodeThread( 142 hThread: HANDLE, 143 lpExitCode: LPDWORD, 144 ) -> BOOL; SuspendThread( hThread: HANDLE, ) -> DWORD145 pub fn SuspendThread( 146 hThread: HANDLE, 147 ) -> DWORD; ResumeThread( hThread: HANDLE, ) -> DWORD148 pub fn ResumeThread( 149 hThread: HANDLE, 150 ) -> DWORD; 151 } 152 pub const TLS_OUT_OF_INDEXES: DWORD = 0xFFFFFFFF; 153 extern "system" { TlsAlloc() -> DWORD154 pub fn TlsAlloc() -> DWORD; TlsGetValue( dwTlsIndex: DWORD, ) -> LPVOID155 pub fn TlsGetValue( 156 dwTlsIndex: DWORD, 157 ) -> LPVOID; TlsSetValue( dwTlsIndex: DWORD, lpTlsValue: LPVOID, ) -> BOOL158 pub fn TlsSetValue( 159 dwTlsIndex: DWORD, 160 lpTlsValue: LPVOID, 161 ) -> BOOL; TlsFree( dwTlsIndex: DWORD, ) -> BOOL162 pub fn TlsFree( 163 dwTlsIndex: DWORD, 164 ) -> 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, ) -> BOOL165 pub fn CreateProcessA( 166 lpApplicationName: LPCSTR, 167 lpCommandLine: LPSTR, 168 lpProcessAttributes: LPSECURITY_ATTRIBUTES, 169 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 170 bInheritHandles: BOOL, 171 dwCreationFlags: DWORD, 172 lpEnvironment: LPVOID, 173 lpCurrentDirectory: LPCSTR, 174 lpStartupInfo: LPSTARTUPINFOA, 175 lpProcessInformation: LPPROCESS_INFORMATION, 176 ) -> 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, ) -> BOOL177 pub fn CreateProcessW( 178 lpApplicationName: LPCWSTR, 179 lpCommandLine: LPWSTR, 180 lpProcessAttributes: LPSECURITY_ATTRIBUTES, 181 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 182 bInheritHandles: BOOL, 183 dwCreationFlags: DWORD, 184 lpEnvironment: LPVOID, 185 lpCurrentDirectory: LPCWSTR, 186 lpStartupInfo: LPSTARTUPINFOW, 187 lpProcessInformation: LPPROCESS_INFORMATION, 188 ) -> BOOL; SetProcessShutdownParameters( dwLevel: DWORD, dwFlags: DWORD, ) -> BOOL189 pub fn SetProcessShutdownParameters( 190 dwLevel: DWORD, 191 dwFlags: DWORD, 192 ) -> BOOL; GetProcessVersion( ProcessId: DWORD, ) -> DWORD193 pub fn GetProcessVersion( 194 ProcessId: DWORD, 195 ) -> DWORD; GetStartupInfoW( lpStartupInfo: LPSTARTUPINFOW, )196 pub fn GetStartupInfoW( 197 lpStartupInfo: LPSTARTUPINFOW, 198 ); 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, ) -> BOOL199 pub fn CreateProcessAsUserW( 200 hToken: HANDLE, 201 lpApplicationName: LPCWSTR, 202 lpCommandLine: LPWSTR, 203 lpProcessAttributes: LPSECURITY_ATTRIBUTES, 204 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 205 bInheritHandles: BOOL, 206 dwCreationFlags: DWORD, 207 lpEnvironment: LPVOID, 208 lpCurrentDirectory: LPCWSTR, 209 lpStartupInfo: LPSTARTUPINFOW, 210 lpProcessInformation: LPPROCESS_INFORMATION, 211 ) -> BOOL; 212 // pub fn GetCurrentProcessToken(); 213 // pub fn GetCurrentThreadToken(); 214 // pub fn GetCurrentThreadEffectiveToken(); SetThreadToken( Thread: PHANDLE, Token: HANDLE, ) -> BOOL215 pub fn SetThreadToken( 216 Thread: PHANDLE, 217 Token: HANDLE, 218 ) -> BOOL; OpenProcessToken( ProcessHandle: HANDLE, DesiredAccess: DWORD, TokenHandle: PHANDLE, ) -> BOOL219 pub fn OpenProcessToken( 220 ProcessHandle: HANDLE, 221 DesiredAccess: DWORD, 222 TokenHandle: PHANDLE, 223 ) -> BOOL; OpenThreadToken( ThreadHandle: HANDLE, DesiredAccess: DWORD, OpenAsSelf: BOOL, TokenHandle: PHANDLE, ) -> BOOL224 pub fn OpenThreadToken( 225 ThreadHandle: HANDLE, 226 DesiredAccess: DWORD, 227 OpenAsSelf: BOOL, 228 TokenHandle: PHANDLE, 229 ) -> BOOL; SetPriorityClass( hProcess: HANDLE, dwPriorityClass: DWORD, ) -> BOOL230 pub fn SetPriorityClass( 231 hProcess: HANDLE, 232 dwPriorityClass: DWORD, 233 ) -> BOOL; SetThreadStackGuarantee( StackSizeInBytes: PULONG, ) -> BOOL234 pub fn SetThreadStackGuarantee( 235 StackSizeInBytes: PULONG, 236 ) -> BOOL; GetPriorityClass( hProcess: HANDLE, ) -> DWORD237 pub fn GetPriorityClass( 238 hProcess: HANDLE, 239 ) -> DWORD; ProcessIdToSessionId( dwProcessId: DWORD, pSessionId: *mut DWORD, ) -> BOOL240 pub fn ProcessIdToSessionId( 241 dwProcessId: DWORD, 242 pSessionId: *mut DWORD, 243 ) -> BOOL; GetProcessId( Process: HANDLE, ) -> DWORD244 pub fn GetProcessId( 245 Process: HANDLE, 246 ) -> DWORD; 247 } 248 STRUCT!{struct PROC_THREAD_ATTRIBUTE_LIST { 249 dummy: *mut c_void, 250 }} 251 pub type PPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST; 252 pub type LPPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST; 253 extern "system" { GetThreadId( Thread: HANDLE, ) -> DWORD254 pub fn GetThreadId( 255 Thread: HANDLE, 256 ) -> DWORD; FlushProcessWriteBuffers()257 pub fn FlushProcessWriteBuffers(); GetProcessIdOfThread( Thread: HANDLE, ) -> DWORD258 pub fn GetProcessIdOfThread( 259 Thread: HANDLE, 260 ) -> DWORD; InitializeProcThreadAttributeList( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, dwAttributeCount: DWORD, dwFlags: DWORD, lpSize: PSIZE_T, ) -> BOOL261 pub fn InitializeProcThreadAttributeList( 262 lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, 263 dwAttributeCount: DWORD, 264 dwFlags: DWORD, 265 lpSize: PSIZE_T, 266 ) -> BOOL; DeleteProcThreadAttributeList( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, )267 pub fn DeleteProcThreadAttributeList( 268 lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, 269 ); SetProcessAffinityUpdateMode( hProcess: HANDLE, dwFlags: DWORD, ) -> BOOL270 pub fn SetProcessAffinityUpdateMode( 271 hProcess: HANDLE, 272 dwFlags: DWORD, 273 ) -> BOOL; QueryProcessAffinityUpdateMode( hProcess: HANDLE, lpdwFlags: LPDWORD, ) -> BOOL274 pub fn QueryProcessAffinityUpdateMode( 275 hProcess: HANDLE, 276 lpdwFlags: LPDWORD, 277 ) -> BOOL; UpdateProcThreadAttribute( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, dwFlags: DWORD, Attribute: DWORD_PTR, lpValue: PVOID, cbSize: SIZE_T, lpPreviousValue: PVOID, lpReturnSize: PSIZE_T, ) -> BOOL278 pub fn UpdateProcThreadAttribute( 279 lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, 280 dwFlags: DWORD, 281 Attribute: DWORD_PTR, 282 lpValue: PVOID, 283 cbSize: SIZE_T, 284 lpPreviousValue: PVOID, 285 lpReturnSize: PSIZE_T, 286 ) -> 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, ) -> HANDLE287 pub fn CreateRemoteThreadEx( 288 hProcess: HANDLE, 289 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 290 dwStackSize: SIZE_T, 291 lpStartAddress: LPTHREAD_START_ROUTINE, 292 lpParameter: LPVOID, 293 dwCreationFlags: DWORD, 294 lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, 295 lpThreadId: LPDWORD, 296 ) -> HANDLE; GetCurrentThreadStackLimits( LowLimit: PULONG_PTR, HighLimit: PULONG_PTR, )297 pub fn GetCurrentThreadStackLimits( 298 LowLimit: PULONG_PTR, 299 HighLimit: PULONG_PTR, 300 ); GetThreadContext( hThread: HANDLE, lpContext: LPCONTEXT, ) -> BOOL301 pub fn GetThreadContext( 302 hThread: HANDLE, 303 lpContext: LPCONTEXT, 304 ) -> BOOL; SetThreadContext( hThread: HANDLE, lpContext: *const CONTEXT, ) -> BOOL305 pub fn SetThreadContext( 306 hThread: HANDLE, 307 lpContext: *const CONTEXT, 308 ) -> BOOL; SetProcessMitigationPolicy( MitigationPolicy: PROCESS_MITIGATION_POLICY, lpBuffer: PVOID, dwLength: SIZE_T, ) -> BOOL309 pub fn SetProcessMitigationPolicy( 310 MitigationPolicy: PROCESS_MITIGATION_POLICY, 311 lpBuffer: PVOID, 312 dwLength: SIZE_T, 313 ) -> BOOL; GetProcessMitigationPolicy( hProcess: HANDLE, MitigationPolicy: PROCESS_MITIGATION_POLICY, lpBuffer: PVOID, dwLength: SIZE_T, ) -> BOOL314 pub fn GetProcessMitigationPolicy( 315 hProcess: HANDLE, 316 MitigationPolicy: PROCESS_MITIGATION_POLICY, 317 lpBuffer: PVOID, 318 dwLength: SIZE_T, 319 ) -> BOOL; FlushInstructionCache( hProcess: HANDLE, lpBaseAddress: LPCVOID, dwSize: SIZE_T, ) -> BOOL320 pub fn FlushInstructionCache( 321 hProcess: HANDLE, 322 lpBaseAddress: LPCVOID, 323 dwSize: SIZE_T, 324 ) -> BOOL; GetThreadTimes( hThread: HANDLE, lpCreationTime: LPFILETIME, lpExitTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL325 pub fn GetThreadTimes( 326 hThread: HANDLE, 327 lpCreationTime: LPFILETIME, 328 lpExitTime: LPFILETIME, 329 lpKernelTime: LPFILETIME, 330 lpUserTime: LPFILETIME, 331 ) -> BOOL; OpenProcess( dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwProcessId: DWORD, ) -> HANDLE332 pub fn OpenProcess( 333 dwDesiredAccess: DWORD, 334 bInheritHandle: BOOL, 335 dwProcessId: DWORD, 336 ) -> HANDLE; IsProcessorFeaturePresent( ProcessorFeature: DWORD, ) -> BOOL337 pub fn IsProcessorFeaturePresent( 338 ProcessorFeature: DWORD, 339 ) -> BOOL; GetProcessHandleCount( hProcess: HANDLE, pdwHandleCount: PDWORD, ) -> BOOL340 pub fn GetProcessHandleCount( 341 hProcess: HANDLE, 342 pdwHandleCount: PDWORD, 343 ) -> BOOL; GetCurrentProcessorNumber() -> DWORD344 pub fn GetCurrentProcessorNumber() -> DWORD; SetThreadIdealProcessorEx( hThread: HANDLE, lpIdealProcessor: PPROCESSOR_NUMBER, lpPreviousIdealProcessor: PPROCESSOR_NUMBER, ) -> BOOL345 pub fn SetThreadIdealProcessorEx( 346 hThread: HANDLE, 347 lpIdealProcessor: PPROCESSOR_NUMBER, 348 lpPreviousIdealProcessor: PPROCESSOR_NUMBER, 349 ) -> BOOL; GetThreadIdealProcessorEx( hThread: HANDLE, lpIdealProcessor: PPROCESSOR_NUMBER, ) -> BOOL350 pub fn GetThreadIdealProcessorEx( 351 hThread: HANDLE, 352 lpIdealProcessor: PPROCESSOR_NUMBER, 353 ) -> BOOL; GetCurrentProcessorNumberEx( ProcNumber: PPROCESSOR_NUMBER, )354 pub fn GetCurrentProcessorNumberEx( 355 ProcNumber: PPROCESSOR_NUMBER, 356 ); GetProcessPriorityBoost( hProcess: HANDLE, pDisablePriorityBoost: PBOOL, ) -> BOOL357 pub fn GetProcessPriorityBoost( 358 hProcess: HANDLE, 359 pDisablePriorityBoost: PBOOL, 360 ) -> BOOL; SetProcessPriorityBoost( hProcess: HANDLE, bDisablePriorityBoost: BOOL, ) -> BOOL361 pub fn SetProcessPriorityBoost( 362 hProcess: HANDLE, 363 bDisablePriorityBoost: BOOL, 364 ) -> BOOL; GetThreadIOPendingFlag( hThread: HANDLE, lpIOIsPending: PBOOL, ) -> BOOL365 pub fn GetThreadIOPendingFlag( 366 hThread: HANDLE, 367 lpIOIsPending: PBOOL, 368 ) -> BOOL; GetSystemTimes( lpIdleTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL369 pub fn GetSystemTimes( 370 lpIdleTime: LPFILETIME, 371 lpKernelTime: LPFILETIME, 372 lpUserTime: LPFILETIME, 373 ) -> BOOL; 374 } 375 ENUM!{enum THREAD_INFORMATION_CLASS { 376 ThreadMemoryPriority, 377 ThreadAbsoluteCpuPriority, 378 ThreadInformationClassMax, 379 }} 380 // MEMORY_PRIORITY_INFORMATION 381 extern "system" { GetThreadInformation( hThread: HANDLE, ThreadInformationClass: THREAD_INFORMATION_CLASS, ThreadInformation: LPVOID, ThreadInformationSize: DWORD, ) -> BOOL382 pub fn GetThreadInformation( 383 hThread: HANDLE, 384 ThreadInformationClass: THREAD_INFORMATION_CLASS, 385 ThreadInformation: LPVOID, 386 ThreadInformationSize: DWORD, 387 ) -> BOOL; SetThreadInformation( hThread: HANDLE, ThreadInformationClass: THREAD_INFORMATION_CLASS, ThreadInformation: LPVOID, ThreadInformationSize: DWORD, ) -> BOOL388 pub fn SetThreadInformation( 389 hThread: HANDLE, 390 ThreadInformationClass: THREAD_INFORMATION_CLASS, 391 ThreadInformation: LPVOID, 392 ThreadInformationSize: DWORD, 393 ) -> BOOL; IsProcessCritical( hProcess: HANDLE, Critical: PBOOL, ) -> BOOL394 pub fn IsProcessCritical( 395 hProcess: HANDLE, 396 Critical: PBOOL, 397 ) -> BOOL; SetProtectedPolicy( PolicyGuid: LPCGUID, PolicyValue: ULONG_PTR, OldPolicyValue: PULONG_PTR, ) -> BOOL398 pub fn SetProtectedPolicy( 399 PolicyGuid: LPCGUID, 400 PolicyValue: ULONG_PTR, 401 OldPolicyValue: PULONG_PTR, 402 ) -> BOOL; QueryProtectedPolicy( PolicyGuid: LPCGUID, PolicyValue: PULONG_PTR, ) -> BOOL403 pub fn QueryProtectedPolicy( 404 PolicyGuid: LPCGUID, 405 PolicyValue: PULONG_PTR, 406 ) -> BOOL; SetThreadIdealProcessor( hThread: HANDLE, dwIdealProcessor: DWORD, ) -> DWORD407 pub fn SetThreadIdealProcessor( 408 hThread: HANDLE, 409 dwIdealProcessor: DWORD, 410 ) -> DWORD; 411 } 412 ENUM!{enum PROCESS_INFORMATION_CLASS { 413 ProcessMemoryPriority, 414 ProcessInformationClassMax, 415 }} 416 extern "system" { SetProcessInformation( hProcess: HANDLE, ProcessInformationClass: PROCESS_INFORMATION_CLASS, ProcessInformation: LPVOID, ProcessInformationSize: DWORD, ) -> BOOL417 pub fn SetProcessInformation( 418 hProcess: HANDLE, 419 ProcessInformationClass: PROCESS_INFORMATION_CLASS, 420 ProcessInformation: LPVOID, 421 ProcessInformationSize: DWORD, 422 ) -> BOOL; GetProcessInformation( hProcess: HANDLE, ProcessInformationClass: PROCESS_INFORMATION_CLASS, ProcessInformation: LPVOID, ProcessInformationSize: DWORD, ) -> BOOL423 pub fn GetProcessInformation( 424 hProcess: HANDLE, 425 ProcessInformationClass: PROCESS_INFORMATION_CLASS, 426 ProcessInformation: LPVOID, 427 ProcessInformationSize: DWORD, 428 ) -> BOOL; 429 // pub fn GetSystemCpuSetInformation(); 430 // pub fn GetProcessDefaultCpuSets(); 431 // pub fn SetProcessDefaultCpuSets(); 432 // pub fn GetThreadSelectedCpuSets(); 433 // pub fn SetThreadSelectedCpuSets(); 434 // pub fn CreateProcessAsUserA(); GetProcessShutdownParameters( lpdwLevel: LPDWORD, lpdwFlags: LPDWORD, ) -> BOOL435 pub fn GetProcessShutdownParameters( 436 lpdwLevel: LPDWORD, 437 lpdwFlags: LPDWORD, 438 ) -> BOOL; 439 // pub fn SetThreadDescription(); 440 // pub fn GetThreadDescription(); 441 } 442