Skip to content

Commit

Permalink
cleanup job object docs, names, cruft
Browse files Browse the repository at this point in the history
  • Loading branch information
MaulingMonkey committed Sep 5, 2022
1 parent 25ed9b8 commit 842224c
Show file tree
Hide file tree
Showing 13 changed files with 88 additions and 86 deletions.
42 changes: 22 additions & 20 deletions src/job/job_funcs.rs
Expand Up @@ -124,13 +124,12 @@ pub fn open_job_object_w(desired_access: impl Into<access::Mask>, inherit_handle
///
/// ### Example
/// ```
/// # use firehazard::*;
/// # use winapi::shared::winerror::*;
/// # use winapi::um::winnt::*;
/// use firehazard::{*, job::object::BasicUiRestrictions};
///
/// let job = create_job_object_w(None, ()).unwrap();
/// let restrictions : JOBOBJECT_BASIC_UI_RESTRICTIONS = query_information_job_object(&job).unwrap();
/// let restrictions : BasicUiRestrictions = query_information_job_object(&job).unwrap();
/// ```
pub fn query_information_job_object<Info: job::QueryInformation>(job: &job::OwnedHandle) -> Result<Info, Error> { Info::query_from(job) }
pub fn query_information_job_object<Info: job::QueryInformationJobObject>(job: &job::OwnedHandle) -> Result<Info, Error> { Info::query_from(job) }

// "Starting with Windows 10, version 1607, this function is no longer supported."
// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/nf-jobapi2-queryioratecontrolinformationjobobject)\]
Expand All @@ -139,27 +138,30 @@ pub fn query_information_job_object<Info: job::QueryInformation>(job: &job::Owne
/// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/nf-jobapi2-setinformationjobobject)\]
/// SetInformationJobObject
///
/// ### Example
/// ### Examples
/// ```
/// # use firehazard::*;
/// # use winapi::shared::winerror::*;
/// use firehazard::{*, job::object::{uilimit, BasicUiRestrictions}};
/// let mut job = create_job_object_w(None, ()).unwrap();
///
/// let ui_restrictions_class = unsafe { job::object::uilimit::Flags::from_unchecked(!0) };
/// assert_eq!(ERROR_INVALID_PARAMETER, set_information_job_object(&mut job, job::object::BasicUiRestrictions { ui_restrictions_class }).unwrap_err());
///
/// set_information_job_object(&mut job, job::object::BasicUiRestrictions { ui_restrictions_class: ()
/// | job::object::uilimit::DESKTOP
/// | job::object::uilimit::DISPLAYSETTINGS
/// | job::object::uilimit::EXITWINDOWS
/// | job::object::uilimit::GLOBALATOMS
/// | job::object::uilimit::HANDLES
/// | job::object::uilimit::READCLIPBOARD
/// | job::object::uilimit::SYSTEMPARAMETERS
/// | job::object::uilimit::WRITECLIPBOARD
/// set_information_job_object(&mut job, BasicUiRestrictions {
/// ui_restrictions_class: ()
/// | uilimit::DESKTOP
/// | uilimit::DISPLAYSETTINGS
/// | uilimit::EXITWINDOWS
/// | uilimit::GLOBALATOMS
/// | uilimit::HANDLES
/// | uilimit::READCLIPBOARD
/// | uilimit::SYSTEMPARAMETERS
/// | uilimit::WRITECLIPBOARD
/// }).unwrap();
///
/// let err = set_information_job_object(&mut job, BasicUiRestrictions {
/// ui_restrictions_class: unsafe { uilimit::Flags::from_unchecked(!0) }
/// }).unwrap_err();
/// assert_eq!(ERROR_INVALID_PARAMETER, err);
/// ```
pub fn set_information_job_object(job: &job::OwnedHandle, information: impl job::SetInformation) -> Result<(), Error> { information.set_on(job) }
pub fn set_information_job_object(job: &job::OwnedHandle, information: impl job::SetInformationJobObject) -> Result<(), Error> { information.set_on(job) }

// "Starting with Windows 10, version 1607, this function is no longer supported."
// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/nf-jobapi2-setioratecontrolinformationjobobject)\]
Expand Down
8 changes: 4 additions & 4 deletions src/job/job_information.rs
Expand Up @@ -10,12 +10,12 @@ use core::mem::{size_of, MaybeUninit};


/// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/nf-jobapi2-queryinformationjobobject)\]
/// QueryInformationJobObject parameters
pub trait QueryInformation : Sized { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error>; }
/// [`query_information_job_object`] result
pub trait QueryInformationJobObject : Sized { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error>; }

/// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/nf-jobapi2-setinformationjobobject)\]
/// SetInformationJobObject parameters
pub trait SetInformation { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error>; }
/// [`set_information_job_object`] parameter
pub trait SetInformationJobObject { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error>; }

/// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/windows/win32/api/jobapi2/nf-jobapi2-queryinformationjobobject)\]
/// QueryInformationJobObject
Expand Down
10 changes: 5 additions & 5 deletions src/job/object/basic_accounting_information.rs
Expand Up @@ -44,9 +44,9 @@ structure!(@assert layout BasicAndIoAccountingInformation => JOBOBJECT_BASIC_AND



impl job::QueryInformation for JOBOBJECT_BASIC_ACCOUNTING_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicAccountingInformation) } } }
impl job::QueryInformation for job::object::BasicAccountingInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicAccountingInformation) } } }
impl job::QueryInformation for JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicAndIoAccountingInformation) } } }
impl job::QueryInformation for job::object::BasicAndIoAccountingInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicAndIoAccountingInformation) } } }
impl job::QueryInformationJobObject for JOBOBJECT_BASIC_ACCOUNTING_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicAccountingInformation) } } }
impl job::QueryInformationJobObject for job::object::BasicAccountingInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicAccountingInformation) } } }
impl job::QueryInformationJobObject for JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicAndIoAccountingInformation) } } }
impl job::QueryInformationJobObject for job::object::BasicAndIoAccountingInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicAndIoAccountingInformation) } } }

// not implemented: job::SetInformation
// not implemented: job::SetInformationJobObject
2 changes: 1 addition & 1 deletion src/job/object/basic_process_id_list.rs
Expand Up @@ -17,7 +17,7 @@ pub struct BasicProcessIdList {
pub process_id_list: Vec<usize>,
}

impl job::QueryInformation for job::object::BasicProcessIdList { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> {
impl job::QueryInformationJobObject for job::object::BasicProcessIdList { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> {
let mut process_id_list = unsafe { job::query_vec::<usize>(job, JobObjectBasicProcessIdList) }?;
let mut header = Header::zeroed();
let header_bytes = size_of_val(&header);
Expand Down
12 changes: 6 additions & 6 deletions src/job/object/basic_ui_restrictions.rs
Expand Up @@ -9,12 +9,12 @@ use winapi::um::winnt::{JOBOBJECT_BASIC_UI_RESTRICTIONS, JobObjectBasicUIRestric
pub ui_restrictions_class: job::object::uilimit::Flags,
}

impl job::QueryInformation for JOBOBJECT_BASIC_UI_RESTRICTIONS { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicUIRestrictions) } } }
impl job::QueryInformation for job::object::BasicUiRestrictions { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicUIRestrictions) } } }
impl job::QueryInformation for job::object::uilimit::Flags { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicUIRestrictions) } } }
impl job::QueryInformationJobObject for JOBOBJECT_BASIC_UI_RESTRICTIONS { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicUIRestrictions) } } }
impl job::QueryInformationJobObject for job::object::BasicUiRestrictions { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicUIRestrictions) } } }
impl job::QueryInformationJobObject for job::object::uilimit::Flags { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectBasicUIRestrictions) } } }

impl job::SetInformation for JOBOBJECT_BASIC_UI_RESTRICTIONS { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectBasicUIRestrictions, &self) } } }
impl job::SetInformation for job::object::BasicUiRestrictions { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectBasicUIRestrictions, &self) } } }
impl job::SetInformation for job::object::uilimit::Flags { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectBasicUIRestrictions, &self) } } }
impl job::SetInformationJobObject for JOBOBJECT_BASIC_UI_RESTRICTIONS { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectBasicUIRestrictions, &self) } } }
impl job::SetInformationJobObject for job::object::BasicUiRestrictions { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectBasicUIRestrictions, &self) } } }
impl job::SetInformationJobObject for job::object::uilimit::Flags { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectBasicUIRestrictions, &self) } } }

// TODO: impl From spam?
8 changes: 4 additions & 4 deletions src/job/object/cpu_rate_control.rs
Expand Up @@ -143,8 +143,8 @@ pub const CPU_RATE_CONTROL_MIN_MAX_RATE : CpuRateControlFlags = CpuRateControlFl



impl job::QueryInformation for JOBOBJECT_CPU_RATE_CONTROL_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectCpuRateControlInformation) } } }
impl job::QueryInformation for job::object::CpuRateControlInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectCpuRateControlInformation) } } }
impl job::QueryInformationJobObject for JOBOBJECT_CPU_RATE_CONTROL_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectCpuRateControlInformation) } } }
impl job::QueryInformationJobObject for job::object::CpuRateControlInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectCpuRateControlInformation) } } }

impl job::SetInformation for JOBOBJECT_CPU_RATE_CONTROL_INFORMATION { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectCpuRateControlInformation, &self) } } }
impl job::SetInformation for job::object::CpuRateControlInformation { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectCpuRateControlInformation, &self) } } }
impl job::SetInformationJobObject for JOBOBJECT_CPU_RATE_CONTROL_INFORMATION { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectCpuRateControlInformation, &self) } } }
impl job::SetInformationJobObject for job::object::CpuRateControlInformation { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectCpuRateControlInformation, &self) } } }
12 changes: 6 additions & 6 deletions src/job/object/end_of_job_time.rs
Expand Up @@ -45,10 +45,10 @@ impl Debug for EndOfJobTimeAction {



impl job::QueryInformation for JOBOBJECT_END_OF_JOB_TIME_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectEndOfJobTimeInformation) } } }
impl job::QueryInformation for job::object::EndOfJobTimeInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectEndOfJobTimeInformation) } } }
impl job::QueryInformation for job::object::EndOfJobTimeAction { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectEndOfJobTimeInformation) } } }
impl job::QueryInformationJobObject for JOBOBJECT_END_OF_JOB_TIME_INFORMATION { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectEndOfJobTimeInformation) } } }
impl job::QueryInformationJobObject for job::object::EndOfJobTimeInformation { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectEndOfJobTimeInformation) } } }
impl job::QueryInformationJobObject for job::object::EndOfJobTimeAction { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_fixed(job, JobObjectEndOfJobTimeInformation) } } }

impl job::SetInformation for JOBOBJECT_END_OF_JOB_TIME_INFORMATION { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectEndOfJobTimeInformation, &self) } } }
impl job::SetInformation for job::object::EndOfJobTimeInformation { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectEndOfJobTimeInformation, &self) } } }
impl job::SetInformation for job::object::EndOfJobTimeAction { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectEndOfJobTimeInformation, &self) } } }
impl job::SetInformationJobObject for JOBOBJECT_END_OF_JOB_TIME_INFORMATION { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectEndOfJobTimeInformation, &self) } } }
impl job::SetInformationJobObject for job::object::EndOfJobTimeInformation { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectEndOfJobTimeInformation, &self) } } }
impl job::SetInformationJobObject for job::object::EndOfJobTimeAction { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectEndOfJobTimeInformation, &self) } } }
20 changes: 10 additions & 10 deletions src/job/object/group_information.rs
Expand Up @@ -34,16 +34,16 @@ structure!(@assert layout GroupAffinity => winnt::GROUP_AFFINITY {
_reserved == Reserved,
});

#[cfg(std)] impl job::QueryInformation for Vec<Group> { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_vec(job, JobObjectGroupInformation ) } } }
#[cfg(std)] impl job::QueryInformation for Vec<GroupAffinity> { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_vec(job, JobObjectGroupInformationEx) } } }
#[cfg(std)] impl job::QueryInformation for Vec<ntdef::GROUP_AFFINITY> { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_vec(job, JobObjectGroupInformationEx) } } }
#[cfg(std)] impl job::QueryInformation for Vec<winnt::GROUP_AFFINITY> { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_vec(job, JobObjectGroupInformationEx) } } }

//impl job::SetInformation for &'_ [u16] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformation, self) } } }
impl job::SetInformation for &'_ [Group] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformation, self) } } }
impl job::SetInformation for &'_ [GroupAffinity] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformationEx, self) } } }
impl job::SetInformation for &'_ [ntdef::GROUP_AFFINITY] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformationEx, self) } } }
impl job::SetInformation for &'_ [winnt::GROUP_AFFINITY] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformationEx, self) } } }
#[cfg(std)] impl job::QueryInformationJobObject for Vec<Group> { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_vec(job, JobObjectGroupInformation ) } } }
#[cfg(std)] impl job::QueryInformationJobObject for Vec<GroupAffinity> { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_vec(job, JobObjectGroupInformationEx) } } }
#[cfg(std)] impl job::QueryInformationJobObject for Vec<ntdef::GROUP_AFFINITY> { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_vec(job, JobObjectGroupInformationEx) } } }
#[cfg(std)] impl job::QueryInformationJobObject for Vec<winnt::GROUP_AFFINITY> { fn query_from(job: &job::OwnedHandle) -> Result<Self, Error> { unsafe { job::query_vec(job, JobObjectGroupInformationEx) } } }

//impl job::SetInformationJobObject for &'_ [u16] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformation, self) } } }
impl job::SetInformationJobObject for &'_ [Group] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformation, self) } } }
impl job::SetInformationJobObject for &'_ [GroupAffinity] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformationEx, self) } } }
impl job::SetInformationJobObject for &'_ [ntdef::GROUP_AFFINITY] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformationEx, self) } } }
impl job::SetInformationJobObject for &'_ [winnt::GROUP_AFFINITY] { fn set_on(self, job: &job::OwnedHandle) -> Result<(), Error> { unsafe { job::set(job, JobObjectGroupInformationEx, self) } } }

#[test] fn group_invalid() {
use winapi::shared::winerror::ERROR_INVALID_PARAMETER;
Expand Down

0 comments on commit 842224c

Please sign in to comment.