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 use shared::basetsd::LONG64;
7 use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, UINT, ULONG};
8 use shared::ntdef::{HANDLE, LPCWSTR, PCWSTR, VOID};
9 use um::minwinbase::LPSECURITY_ATTRIBUTES;
10 use um::winnt::JOBOBJECTINFOCLASS;
11 STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION {
12     MaxIops: LONG64,
13     MaxBandwidth: LONG64,
14     ReservationIops: LONG64,
15     VolumeName: PCWSTR,
16     BaseIoSize: ULONG,
17     ControlFlags: ULONG,
18 }}
19 extern "system" {
CreateJobObjectW( lpJobAttributes: LPSECURITY_ATTRIBUTES, lpName: LPCWSTR, ) -> HANDLE20     pub fn CreateJobObjectW(
21         lpJobAttributes: LPSECURITY_ATTRIBUTES,
22         lpName: LPCWSTR,
23     ) -> HANDLE;
FreeMemoryJobObject( Buffer: *mut VOID, ) -> ()24     pub fn FreeMemoryJobObject(
25         Buffer: *mut VOID,
26     ) -> ();
OpenJobObjectW( dwDesiredAccess: DWORD, bInheritHandle: BOOL, lpName: LPCWSTR, ) -> HANDLE27     pub fn OpenJobObjectW(
28         dwDesiredAccess: DWORD,
29         bInheritHandle: BOOL,
30         lpName: LPCWSTR,
31     ) -> HANDLE;
AssignProcessToJobObject( hJob: HANDLE, hProcess: HANDLE, ) -> BOOL32     pub fn AssignProcessToJobObject(
33         hJob: HANDLE,
34         hProcess: HANDLE,
35     ) -> BOOL;
TerminateJobObject( hJob: HANDLE, uExitCode: UINT, ) -> BOOL36     pub fn TerminateJobObject(
37         hJob: HANDLE,
38         uExitCode: UINT,
39     ) -> BOOL;
SetInformationJobObject( hJob: HANDLE, JobObjectInformationClass: JOBOBJECTINFOCLASS, lpJobObjectInformation: LPVOID, cbJovObjectInformationLength: DWORD, ) -> BOOL40     pub fn SetInformationJobObject(
41         hJob: HANDLE,
42         JobObjectInformationClass: JOBOBJECTINFOCLASS,
43         lpJobObjectInformation: LPVOID,
44         cbJovObjectInformationLength: DWORD,
45     ) -> BOOL;
SetIoRateControlInformationJobObject( hJob: HANDLE, IoRateControlInfo: *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION, ) -> DWORD46     pub fn SetIoRateControlInformationJobObject(
47         hJob: HANDLE,
48         IoRateControlInfo: *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION,
49     ) -> DWORD;
QueryInformationJobObject( hJob: HANDLE, JobObjectInformationClass: JOBOBJECTINFOCLASS, lpJobObjectInformation: LPVOID, cbJovObjectInformationLength: DWORD, lpReturnLength: LPDWORD, ) -> BOOL50     pub fn QueryInformationJobObject(
51         hJob: HANDLE,
52         JobObjectInformationClass: JOBOBJECTINFOCLASS,
53         lpJobObjectInformation: LPVOID,
54         cbJovObjectInformationLength: DWORD,
55         lpReturnLength: LPDWORD,
56     ) -> BOOL;
QueryIoRateControlInformationJobObject( hJob: HANDLE, VolumeName: PCWSTR, InfoBlocks: *mut *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION, InfoBlockCount: *mut ULONG, ) -> DWORD57     pub fn QueryIoRateControlInformationJobObject(
58         hJob: HANDLE,
59         VolumeName: PCWSTR,
60         InfoBlocks: *mut *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION,
61         InfoBlockCount: *mut ULONG,
62     ) -> DWORD;
63 }
64