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 use ctypes::{c_int, c_void}; 9 use shared::basetsd::{DWORD_PTR, PSIZE_T, PULONG_PTR, SIZE_T, ULONG_PTR}; 10 use shared::guiddef::LPCGUID; 11 use shared::minwindef::{ 12 BOOL, DWORD, LPBYTE, LPCVOID, LPDWORD, LPFILETIME, LPVOID, PBOOL, PDWORD, PULONG, UINT, WORD 13 }; 14 use um::minwinbase::{LPCONTEXT, LPSECURITY_ATTRIBUTES, LPTHREAD_START_ROUTINE}; 15 use um::winnt::{ 16 CONTEXT, HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PAPCFUNC, PHANDLE, PPROCESSOR_NUMBER, 17 PROCESS_MITIGATION_POLICY, PVOID 18 }; 19 STRUCT!{struct PROCESS_INFORMATION { 20 hProcess: HANDLE, 21 hThread: HANDLE, 22 dwProcessId: DWORD, 23 dwThreadId: DWORD, 24 }} 25 pub type PPROCESS_INFORMATION = *mut PROCESS_INFORMATION; 26 pub type LPPROCESS_INFORMATION = *mut PROCESS_INFORMATION; 27 STRUCT!{struct STARTUPINFOA { 28 cb: DWORD, 29 lpReserved: LPSTR, 30 lpDesktop: LPSTR, 31 lpTitle: LPSTR, 32 dwX: DWORD, 33 dwY: DWORD, 34 dwXSize: DWORD, 35 dwYSize: DWORD, 36 dwXCountChars: DWORD, 37 dwYCountChars: DWORD, 38 dwFillAttribute: DWORD, 39 dwFlags: DWORD, 40 wShowWindow: WORD, 41 cbReserved2: WORD, 42 lpReserved2: LPBYTE, 43 hStdInput: HANDLE, 44 hStdOutput: HANDLE, 45 hStdError: HANDLE, 46 }} 47 pub type LPSTARTUPINFOA = *mut STARTUPINFOA; 48 STRUCT!{struct STARTUPINFOW { 49 cb: DWORD, 50 lpReserved: LPWSTR, 51 lpDesktop: LPWSTR, 52 lpTitle: LPWSTR, 53 dwX: DWORD, 54 dwY: DWORD, 55 dwXSize: DWORD, 56 dwYSize: DWORD, 57 dwXCountChars: DWORD, 58 dwYCountChars: DWORD, 59 dwFillAttribute: DWORD, 60 dwFlags: DWORD, 61 wShowWindow: WORD, 62 cbReserved2: WORD, 63 lpReserved2: LPBYTE, 64 hStdInput: HANDLE, 65 hStdOutput: HANDLE, 66 hStdError: HANDLE, 67 }} 68 pub type LPSTARTUPINFOW = *mut STARTUPINFOW; 69 extern "system" { QueueUserAPC( pfnAPC: PAPCFUNC, hThread: HANDLE, dwData: ULONG_PTR, ) -> DWORD70 pub fn QueueUserAPC( 71 pfnAPC: PAPCFUNC, 72 hThread: HANDLE, 73 dwData: ULONG_PTR, 74 ) -> DWORD; GetProcessTimes( hProcess: HANDLE, lpCreationTime: LPFILETIME, lpExitTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL75 pub fn GetProcessTimes( 76 hProcess: HANDLE, 77 lpCreationTime: LPFILETIME, 78 lpExitTime: LPFILETIME, 79 lpKernelTime: LPFILETIME, 80 lpUserTime: LPFILETIME, 81 ) -> BOOL; GetCurrentProcess() -> HANDLE82 pub fn GetCurrentProcess() -> HANDLE; GetCurrentProcessId() -> DWORD83 pub fn GetCurrentProcessId() -> DWORD; ExitProcess( uExitCode: UINT, )84 pub fn ExitProcess( 85 uExitCode: UINT, 86 ); TerminateProcess( hProcess: HANDLE, uExitCode: UINT, ) -> BOOL87 pub fn TerminateProcess( 88 hProcess: HANDLE, 89 uExitCode: UINT, 90 ) -> BOOL; GetExitCodeProcess( hProcess: HANDLE, lpExitCode: LPDWORD, ) -> BOOL91 pub fn GetExitCodeProcess( 92 hProcess: HANDLE, 93 lpExitCode: LPDWORD, 94 ) -> BOOL; SwitchToThread() -> BOOL95 pub fn SwitchToThread() -> BOOL; CreateThread( lpThreadAttributes: LPSECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: LPVOID, dwCreationFlags: DWORD, lpThreadId: LPDWORD, ) -> HANDLE96 pub fn CreateThread( 97 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 98 dwStackSize: SIZE_T, 99 lpStartAddress: LPTHREAD_START_ROUTINE, 100 lpParameter: LPVOID, 101 dwCreationFlags: DWORD, 102 lpThreadId: LPDWORD, 103 ) -> HANDLE; CreateRemoteThread( hProcess: HANDLE, lpThreadAttributes: LPSECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: LPVOID, dwCreationFlags: DWORD, lpThreadId: LPDWORD, ) -> HANDLE104 pub fn CreateRemoteThread( 105 hProcess: HANDLE, 106 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 107 dwStackSize: SIZE_T, 108 lpStartAddress: LPTHREAD_START_ROUTINE, 109 lpParameter: LPVOID, 110 dwCreationFlags: DWORD, 111 lpThreadId: LPDWORD, 112 ) -> HANDLE; GetCurrentThread() -> HANDLE113 pub fn GetCurrentThread() -> HANDLE; GetCurrentThreadId() -> DWORD114 pub fn GetCurrentThreadId() -> DWORD; OpenThread( dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwThreadId: DWORD, ) -> HANDLE115 pub fn OpenThread( 116 dwDesiredAccess: DWORD, 117 bInheritHandle: BOOL, 118 dwThreadId: DWORD, 119 ) -> HANDLE; SetThreadPriority( hThread: HANDLE, nPriority: c_int, ) -> BOOL120 pub fn SetThreadPriority( 121 hThread: HANDLE, 122 nPriority: c_int, 123 ) -> BOOL; SetThreadPriorityBoost( hThread: HANDLE, bDisablePriorityBoost: BOOL, ) -> BOOL124 pub fn SetThreadPriorityBoost( 125 hThread: HANDLE, 126 bDisablePriorityBoost: BOOL, 127 ) -> BOOL; GetThreadPriorityBoost( hThread: HANDLE, pDisablePriorityBoost: PBOOL, ) -> BOOL128 pub fn GetThreadPriorityBoost( 129 hThread: HANDLE, 130 pDisablePriorityBoost: PBOOL, 131 ) -> BOOL; GetThreadPriority( hThread: HANDLE, ) -> c_int132 pub fn GetThreadPriority( 133 hThread: HANDLE, 134 ) -> c_int; ExitThread( dwExitCode: DWORD, )135 pub fn ExitThread( 136 dwExitCode: DWORD, 137 ); TerminateThread( hThread: HANDLE, dwExitCode: DWORD, ) -> BOOL138 pub fn TerminateThread( 139 hThread: HANDLE, 140 dwExitCode: DWORD, 141 ) -> BOOL; GetExitCodeThread( hThread: HANDLE, lpExitCode: LPDWORD, ) -> BOOL142 pub fn GetExitCodeThread( 143 hThread: HANDLE, 144 lpExitCode: LPDWORD, 145 ) -> BOOL; SuspendThread( hThread: HANDLE, ) -> DWORD146 pub fn SuspendThread( 147 hThread: HANDLE, 148 ) -> DWORD; ResumeThread( hThread: HANDLE, ) -> DWORD149 pub fn ResumeThread( 150 hThread: HANDLE, 151 ) -> DWORD; 152 } 153 pub const TLS_OUT_OF_INDEXES: DWORD = 0xFFFFFFFF; 154 extern "system" { TlsAlloc() -> DWORD155 pub fn TlsAlloc() -> DWORD; TlsGetValue( dwTlsIndex: DWORD, ) -> LPVOID156 pub fn TlsGetValue( 157 dwTlsIndex: DWORD, 158 ) -> LPVOID; TlsSetValue( dwTlsIndex: DWORD, lpTlsValue: LPVOID, ) -> BOOL159 pub fn TlsSetValue( 160 dwTlsIndex: DWORD, 161 lpTlsValue: LPVOID, 162 ) -> BOOL; TlsFree( dwTlsIndex: DWORD, ) -> BOOL163 pub fn TlsFree( 164 dwTlsIndex: DWORD, 165 ) -> 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, ) -> BOOL166 pub fn CreateProcessA( 167 lpApplicationName: LPCSTR, 168 lpCommandLine: LPSTR, 169 lpProcessAttributes: LPSECURITY_ATTRIBUTES, 170 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 171 bInheritHandles: BOOL, 172 dwCreationFlags: DWORD, 173 lpEnvironment: LPVOID, 174 lpCurrentDirectory: LPCSTR, 175 lpStartupInfo: LPSTARTUPINFOA, 176 lpProcessInformation: LPPROCESS_INFORMATION, 177 ) -> 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, ) -> BOOL178 pub fn CreateProcessW( 179 lpApplicationName: LPCWSTR, 180 lpCommandLine: LPWSTR, 181 lpProcessAttributes: LPSECURITY_ATTRIBUTES, 182 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 183 bInheritHandles: BOOL, 184 dwCreationFlags: DWORD, 185 lpEnvironment: LPVOID, 186 lpCurrentDirectory: LPCWSTR, 187 lpStartupInfo: LPSTARTUPINFOW, 188 lpProcessInformation: LPPROCESS_INFORMATION, 189 ) -> BOOL; SetProcessShutdownParameters( dwLevel: DWORD, dwFlags: DWORD, ) -> BOOL190 pub fn SetProcessShutdownParameters( 191 dwLevel: DWORD, 192 dwFlags: DWORD, 193 ) -> BOOL; GetProcessVersion( ProcessId: DWORD, ) -> DWORD194 pub fn GetProcessVersion( 195 ProcessId: DWORD, 196 ) -> DWORD; GetStartupInfoW( lpStartupInfo: LPSTARTUPINFOW, )197 pub fn GetStartupInfoW( 198 lpStartupInfo: LPSTARTUPINFOW, 199 ); 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, ) -> BOOL200 pub fn CreateProcessAsUserW( 201 hToken: HANDLE, 202 lpApplicationName: LPCWSTR, 203 lpCommandLine: LPWSTR, 204 lpProcessAttributes: LPSECURITY_ATTRIBUTES, 205 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 206 bInheritHandles: BOOL, 207 dwCreationFlags: DWORD, 208 lpEnvironment: LPVOID, 209 lpCurrentDirectory: LPCWSTR, 210 lpStartupInfo: LPSTARTUPINFOW, 211 lpProcessInformation: LPPROCESS_INFORMATION, 212 ) -> BOOL; 213 // pub fn GetCurrentProcessToken(); 214 // pub fn GetCurrentThreadToken(); 215 // pub fn GetCurrentThreadEffectiveToken(); SetThreadToken( Thread: PHANDLE, Token: HANDLE, ) -> BOOL216 pub fn SetThreadToken( 217 Thread: PHANDLE, 218 Token: HANDLE, 219 ) -> BOOL; OpenProcessToken( ProcessHandle: HANDLE, DesiredAccess: DWORD, TokenHandle: PHANDLE, ) -> BOOL220 pub fn OpenProcessToken( 221 ProcessHandle: HANDLE, 222 DesiredAccess: DWORD, 223 TokenHandle: PHANDLE, 224 ) -> BOOL; OpenThreadToken( ThreadHandle: HANDLE, DesiredAccess: DWORD, OpenAsSelf: BOOL, TokenHandle: PHANDLE, ) -> BOOL225 pub fn OpenThreadToken( 226 ThreadHandle: HANDLE, 227 DesiredAccess: DWORD, 228 OpenAsSelf: BOOL, 229 TokenHandle: PHANDLE, 230 ) -> BOOL; SetPriorityClass( hProcess: HANDLE, dwPriorityClass: DWORD, ) -> BOOL231 pub fn SetPriorityClass( 232 hProcess: HANDLE, 233 dwPriorityClass: DWORD, 234 ) -> BOOL; SetThreadStackGuarantee( StackSizeInBytes: PULONG, ) -> BOOL235 pub fn SetThreadStackGuarantee( 236 StackSizeInBytes: PULONG, 237 ) -> BOOL; GetPriorityClass( hProcess: HANDLE, ) -> DWORD238 pub fn GetPriorityClass( 239 hProcess: HANDLE, 240 ) -> DWORD; ProcessIdToSessionId( dwProcessId: DWORD, pSessionId: *mut DWORD, ) -> BOOL241 pub fn ProcessIdToSessionId( 242 dwProcessId: DWORD, 243 pSessionId: *mut DWORD, 244 ) -> BOOL; GetProcessId( Process: HANDLE, ) -> DWORD245 pub fn GetProcessId( 246 Process: HANDLE, 247 ) -> DWORD; 248 } 249 STRUCT!{struct PROC_THREAD_ATTRIBUTE_LIST { 250 dummy: *mut c_void, 251 }} 252 pub type PPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST; 253 pub type LPPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST; 254 extern "system" { GetThreadId( Thread: HANDLE, ) -> DWORD255 pub fn GetThreadId( 256 Thread: HANDLE, 257 ) -> DWORD; FlushProcessWriteBuffers()258 pub fn FlushProcessWriteBuffers(); GetProcessIdOfThread( Thread: HANDLE, ) -> DWORD259 pub fn GetProcessIdOfThread( 260 Thread: HANDLE, 261 ) -> DWORD; InitializeProcThreadAttributeList( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, dwAttributeCount: DWORD, dwFlags: DWORD, lpSize: PSIZE_T, ) -> BOOL262 pub fn InitializeProcThreadAttributeList( 263 lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, 264 dwAttributeCount: DWORD, 265 dwFlags: DWORD, 266 lpSize: PSIZE_T, 267 ) -> BOOL; DeleteProcThreadAttributeList( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, )268 pub fn DeleteProcThreadAttributeList( 269 lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, 270 ); SetProcessAffinityUpdateMode( hProcess: HANDLE, dwFlags: DWORD, ) -> BOOL271 pub fn SetProcessAffinityUpdateMode( 272 hProcess: HANDLE, 273 dwFlags: DWORD, 274 ) -> BOOL; QueryProcessAffinityUpdateMode( hProcess: HANDLE, lpdwFlags: LPDWORD, ) -> BOOL275 pub fn QueryProcessAffinityUpdateMode( 276 hProcess: HANDLE, 277 lpdwFlags: LPDWORD, 278 ) -> BOOL; UpdateProcThreadAttribute( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, dwFlags: DWORD, Attribute: DWORD_PTR, lpValue: PVOID, cbSize: SIZE_T, lpPreviousValue: PVOID, lpReturnSize: PSIZE_T, ) -> BOOL279 pub fn UpdateProcThreadAttribute( 280 lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, 281 dwFlags: DWORD, 282 Attribute: DWORD_PTR, 283 lpValue: PVOID, 284 cbSize: SIZE_T, 285 lpPreviousValue: PVOID, 286 lpReturnSize: PSIZE_T, 287 ) -> 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, ) -> HANDLE288 pub fn CreateRemoteThreadEx( 289 hProcess: HANDLE, 290 lpThreadAttributes: LPSECURITY_ATTRIBUTES, 291 dwStackSize: SIZE_T, 292 lpStartAddress: LPTHREAD_START_ROUTINE, 293 lpParameter: LPVOID, 294 dwCreationFlags: DWORD, 295 lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, 296 lpThreadId: LPDWORD, 297 ) -> HANDLE; GetCurrentThreadStackLimits( LowLimit: PULONG_PTR, HighLimit: PULONG_PTR, )298 pub fn GetCurrentThreadStackLimits( 299 LowLimit: PULONG_PTR, 300 HighLimit: PULONG_PTR, 301 ); GetThreadContext( hThread: HANDLE, lpContext: LPCONTEXT, ) -> BOOL302 pub fn GetThreadContext( 303 hThread: HANDLE, 304 lpContext: LPCONTEXT, 305 ) -> BOOL; SetThreadContext( hThread: HANDLE, lpContext: *const CONTEXT, ) -> BOOL306 pub fn SetThreadContext( 307 hThread: HANDLE, 308 lpContext: *const CONTEXT, 309 ) -> BOOL; SetProcessMitigationPolicy( MitigationPolicy: PROCESS_MITIGATION_POLICY, lpBuffer: PVOID, dwLength: SIZE_T, ) -> BOOL310 pub fn SetProcessMitigationPolicy( 311 MitigationPolicy: PROCESS_MITIGATION_POLICY, 312 lpBuffer: PVOID, 313 dwLength: SIZE_T, 314 ) -> BOOL; GetProcessMitigationPolicy( hProcess: HANDLE, MitigationPolicy: PROCESS_MITIGATION_POLICY, lpBuffer: PVOID, dwLength: SIZE_T, ) -> BOOL315 pub fn GetProcessMitigationPolicy( 316 hProcess: HANDLE, 317 MitigationPolicy: PROCESS_MITIGATION_POLICY, 318 lpBuffer: PVOID, 319 dwLength: SIZE_T, 320 ) -> BOOL; FlushInstructionCache( hProcess: HANDLE, lpBaseAddress: LPCVOID, dwSize: SIZE_T, ) -> BOOL321 pub fn FlushInstructionCache( 322 hProcess: HANDLE, 323 lpBaseAddress: LPCVOID, 324 dwSize: SIZE_T, 325 ) -> BOOL; GetThreadTimes( hThread: HANDLE, lpCreationTime: LPFILETIME, lpExitTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL326 pub fn GetThreadTimes( 327 hThread: HANDLE, 328 lpCreationTime: LPFILETIME, 329 lpExitTime: LPFILETIME, 330 lpKernelTime: LPFILETIME, 331 lpUserTime: LPFILETIME, 332 ) -> BOOL; OpenProcess( dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwProcessId: DWORD, ) -> HANDLE333 pub fn OpenProcess( 334 dwDesiredAccess: DWORD, 335 bInheritHandle: BOOL, 336 dwProcessId: DWORD, 337 ) -> HANDLE; IsProcessorFeaturePresent( ProcessorFeature: DWORD, ) -> BOOL338 pub fn IsProcessorFeaturePresent( 339 ProcessorFeature: DWORD, 340 ) -> BOOL; GetProcessHandleCount( hProcess: HANDLE, pdwHandleCount: PDWORD, ) -> BOOL341 pub fn GetProcessHandleCount( 342 hProcess: HANDLE, 343 pdwHandleCount: PDWORD, 344 ) -> BOOL; GetCurrentProcessorNumber() -> DWORD345 pub fn GetCurrentProcessorNumber() -> DWORD; SetThreadIdealProcessorEx( hThread: HANDLE, lpIdealProcessor: PPROCESSOR_NUMBER, lpPreviousIdealProcessor: PPROCESSOR_NUMBER, ) -> BOOL346 pub fn SetThreadIdealProcessorEx( 347 hThread: HANDLE, 348 lpIdealProcessor: PPROCESSOR_NUMBER, 349 lpPreviousIdealProcessor: PPROCESSOR_NUMBER, 350 ) -> BOOL; GetThreadIdealProcessorEx( hThread: HANDLE, lpIdealProcessor: PPROCESSOR_NUMBER, ) -> BOOL351 pub fn GetThreadIdealProcessorEx( 352 hThread: HANDLE, 353 lpIdealProcessor: PPROCESSOR_NUMBER, 354 ) -> BOOL; GetCurrentProcessorNumberEx( ProcNumber: PPROCESSOR_NUMBER, )355 pub fn GetCurrentProcessorNumberEx( 356 ProcNumber: PPROCESSOR_NUMBER, 357 ); GetProcessPriorityBoost( hProcess: HANDLE, pDisablePriorityBoost: PBOOL, ) -> BOOL358 pub fn GetProcessPriorityBoost( 359 hProcess: HANDLE, 360 pDisablePriorityBoost: PBOOL, 361 ) -> BOOL; SetProcessPriorityBoost( hProcess: HANDLE, bDisablePriorityBoost: BOOL, ) -> BOOL362 pub fn SetProcessPriorityBoost( 363 hProcess: HANDLE, 364 bDisablePriorityBoost: BOOL, 365 ) -> BOOL; GetThreadIOPendingFlag( hThread: HANDLE, lpIOIsPending: PBOOL, ) -> BOOL366 pub fn GetThreadIOPendingFlag( 367 hThread: HANDLE, 368 lpIOIsPending: PBOOL, 369 ) -> BOOL; GetSystemTimes( lpIdleTime: LPFILETIME, lpKernelTime: LPFILETIME, lpUserTime: LPFILETIME, ) -> BOOL370 pub fn GetSystemTimes( 371 lpIdleTime: LPFILETIME, 372 lpKernelTime: LPFILETIME, 373 lpUserTime: LPFILETIME, 374 ) -> BOOL; 375 } 376 ENUM!{enum THREAD_INFORMATION_CLASS { 377 ThreadMemoryPriority, 378 ThreadAbsoluteCpuPriority, 379 ThreadInformationClassMax, 380 }} 381 // MEMORY_PRIORITY_INFORMATION 382 extern "system" { GetThreadInformation( hThread: HANDLE, ThreadInformationClass: THREAD_INFORMATION_CLASS, ThreadInformation: LPVOID, ThreadInformationSize: DWORD, ) -> BOOL383 pub fn GetThreadInformation( 384 hThread: HANDLE, 385 ThreadInformationClass: THREAD_INFORMATION_CLASS, 386 ThreadInformation: LPVOID, 387 ThreadInformationSize: DWORD, 388 ) -> BOOL; SetThreadInformation( hThread: HANDLE, ThreadInformationClass: THREAD_INFORMATION_CLASS, ThreadInformation: LPVOID, ThreadInformationSize: DWORD, ) -> BOOL389 pub fn SetThreadInformation( 390 hThread: HANDLE, 391 ThreadInformationClass: THREAD_INFORMATION_CLASS, 392 ThreadInformation: LPVOID, 393 ThreadInformationSize: DWORD, 394 ) -> BOOL; IsProcessCritical( hProcess: HANDLE, Critical: PBOOL, ) -> BOOL395 pub fn IsProcessCritical( 396 hProcess: HANDLE, 397 Critical: PBOOL, 398 ) -> BOOL; SetProtectedPolicy( PolicyGuid: LPCGUID, PolicyValue: ULONG_PTR, OldPolicyValue: PULONG_PTR, ) -> BOOL399 pub fn SetProtectedPolicy( 400 PolicyGuid: LPCGUID, 401 PolicyValue: ULONG_PTR, 402 OldPolicyValue: PULONG_PTR, 403 ) -> BOOL; QueryProtectedPolicy( PolicyGuid: LPCGUID, PolicyValue: PULONG_PTR, ) -> BOOL404 pub fn QueryProtectedPolicy( 405 PolicyGuid: LPCGUID, 406 PolicyValue: PULONG_PTR, 407 ) -> BOOL; SetThreadIdealProcessor( hThread: HANDLE, dwIdealProcessor: DWORD, ) -> DWORD408 pub fn SetThreadIdealProcessor( 409 hThread: HANDLE, 410 dwIdealProcessor: DWORD, 411 ) -> DWORD; 412 } 413 ENUM!{enum PROCESS_INFORMATION_CLASS { 414 ProcessMemoryPriority, 415 ProcessInformationClassMax, 416 }} 417 extern "system" { SetProcessInformation( hProcess: HANDLE, ProcessInformationClass: PROCESS_INFORMATION_CLASS, ProcessInformation: LPVOID, ProcessInformationSize: DWORD, ) -> BOOL418 pub fn SetProcessInformation( 419 hProcess: HANDLE, 420 ProcessInformationClass: PROCESS_INFORMATION_CLASS, 421 ProcessInformation: LPVOID, 422 ProcessInformationSize: DWORD, 423 ) -> BOOL; GetProcessInformation( hProcess: HANDLE, ProcessInformationClass: PROCESS_INFORMATION_CLASS, ProcessInformation: LPVOID, ProcessInformationSize: DWORD, ) -> BOOL424 pub fn GetProcessInformation( 425 hProcess: HANDLE, 426 ProcessInformationClass: PROCESS_INFORMATION_CLASS, 427 ProcessInformation: LPVOID, 428 ProcessInformationSize: DWORD, 429 ) -> BOOL; 430 // pub fn GetSystemCpuSetInformation(); 431 // pub fn GetProcessDefaultCpuSets(); 432 // pub fn SetProcessDefaultCpuSets(); 433 // pub fn GetThreadSelectedCpuSets(); 434 // pub fn SetThreadSelectedCpuSets(); 435 // pub fn CreateProcessAsUserA(); GetProcessShutdownParameters( lpdwLevel: LPDWORD, lpdwFlags: LPDWORD, ) -> BOOL436 pub fn GetProcessShutdownParameters( 437 lpdwLevel: LPDWORD, 438 lpdwFlags: LPDWORD, 439 ) -> BOOL; 440 // pub fn SetThreadDescription(); 441 // pub fn GetThreadDescription(); 442 } 443