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