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