1 // Copyright © 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 use shared::basetsd::LONG64; 8 use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, UINT, ULONG}; 9 use shared::ntdef::{HANDLE, LPCWSTR, PCWSTR, VOID}; 10 use um::minwinbase::LPSECURITY_ATTRIBUTES; 11 use um::winnt::JOBOBJECTINFOCLASS; 12 STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION { 13 MaxIops: LONG64, 14 MaxBandwidth: LONG64, 15 ReservationIops: LONG64, 16 VolumeName: PCWSTR, 17 BaseIoSize: ULONG, 18 ControlFlags: ULONG, 19 }} 20 extern "system" { CreateJobObjectW( lpJobAttributes: LPSECURITY_ATTRIBUTES, lpName: LPCWSTR, ) -> HANDLE21 pub fn CreateJobObjectW( 22 lpJobAttributes: LPSECURITY_ATTRIBUTES, 23 lpName: LPCWSTR, 24 ) -> HANDLE; FreeMemoryJobObject( Buffer: *mut VOID, ) -> ()25 pub fn FreeMemoryJobObject( 26 Buffer: *mut VOID, 27 ) -> (); OpenJobObjectW( dwDesiredAccess: DWORD, bInheritHandle: BOOL, lpName: LPCWSTR, ) -> HANDLE28 pub fn OpenJobObjectW( 29 dwDesiredAccess: DWORD, 30 bInheritHandle: BOOL, 31 lpName: LPCWSTR, 32 ) -> HANDLE; AssignProcessToJobObject( hJob: HANDLE, hProcess: HANDLE, ) -> BOOL33 pub fn AssignProcessToJobObject( 34 hJob: HANDLE, 35 hProcess: HANDLE, 36 ) -> BOOL; TerminateJobObject( hJob: HANDLE, uExitCode: UINT, ) -> BOOL37 pub fn TerminateJobObject( 38 hJob: HANDLE, 39 uExitCode: UINT, 40 ) -> BOOL; SetInformationJobObject( hJob: HANDLE, JobObjectInformationClass: JOBOBJECTINFOCLASS, lpJobObjectInformation: LPVOID, cbJovObjectInformationLength: DWORD, ) -> BOOL41 pub fn SetInformationJobObject( 42 hJob: HANDLE, 43 JobObjectInformationClass: JOBOBJECTINFOCLASS, 44 lpJobObjectInformation: LPVOID, 45 cbJovObjectInformationLength: DWORD, 46 ) -> BOOL; SetIoRateControlInformationJobObject( hJob: HANDLE, IoRateControlInfo: *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION, ) -> DWORD47 pub fn SetIoRateControlInformationJobObject( 48 hJob: HANDLE, 49 IoRateControlInfo: *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION, 50 ) -> DWORD; QueryInformationJobObject( hJob: HANDLE, JobObjectInformationClass: JOBOBJECTINFOCLASS, lpJobObjectInformation: LPVOID, cbJovObjectInformationLength: DWORD, lpReturnLength: LPDWORD, ) -> BOOL51 pub fn QueryInformationJobObject( 52 hJob: HANDLE, 53 JobObjectInformationClass: JOBOBJECTINFOCLASS, 54 lpJobObjectInformation: LPVOID, 55 cbJovObjectInformationLength: DWORD, 56 lpReturnLength: LPDWORD, 57 ) -> BOOL; QueryIoRateControlInformationJobObject( hJob: HANDLE, VolumeName: PCWSTR, InfoBlocks: *mut *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION, InfoBlockCount: *mut ULONG, ) -> DWORD58 pub fn QueryIoRateControlInformationJobObject( 59 hJob: HANDLE, 60 VolumeName: PCWSTR, 61 InfoBlocks: *mut *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION, 62 InfoBlockCount: *mut ULONG, 63 ) -> DWORD; 64 } 65