亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? job.h

?? Windows via C/C++, Fifth Edition圖書源代碼
?? H
字號:
/******************************************************************************
Module:  Job.h
Notices: Copyright (c) 2008 Jeffrey Richter & Christophe Nasarre
******************************************************************************/


#pragma once


///////////////////////////////////////////////////////////////////////////////


#include <malloc.h>  // for _alloca


///////////////////////////////////////////////////////////////////////////////


class CJob {
public:
   CJob(HANDLE hJob = NULL);
   ~CJob();

   operator HANDLE() const { return(m_hJob); }

   // Functions to create/open a job object
   BOOL Create(PSECURITY_ATTRIBUTES psa = NULL, PCTSTR pszName = NULL);
   BOOL Open(PCTSTR pszName, DWORD dwDesiredAccess, 
      BOOL fInheritHandle = FALSE);

   // Functions that manipulate a job object
   BOOL AssignProcess(HANDLE hProcess);
   BOOL Terminate(UINT uExitCode = 0);

   // Functions that set limits/restrictions on the job
   BOOL SetExtendedLimitInfo(PJOBOBJECT_EXTENDED_LIMIT_INFORMATION pjoeli, 
      BOOL fPreserveJobTime = FALSE);
   BOOL SetBasicUIRestrictions(DWORD fdwLimits);
   BOOL GrantUserHandleAccess(HANDLE hUserObj, BOOL fGrant = TRUE);
   BOOL SetSecurityLimitInfo(PJOBOBJECT_SECURITY_LIMIT_INFORMATION pjosli);

   // Functions that query job limits/restrictions
   BOOL QueryExtendedLimitInfo(PJOBOBJECT_EXTENDED_LIMIT_INFORMATION pjoeli);
   BOOL QueryBasicUIRestrictions(PDWORD pfdwRestrictions);
   BOOL QuerySecurityLimitInfo(PJOBOBJECT_SECURITY_LIMIT_INFORMATION pjosli);

   // Functions that query job status information
   BOOL QueryBasicAccountingInfo(
      PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION pjobai);
   BOOL QueryBasicProcessIdList(DWORD dwMaxProcesses, 
      PDWORD pdwProcessIdList, PDWORD pdwProcessesReturned = NULL);

   // Functions that set/query job event notifications
   BOOL AssociateCompletionPort(HANDLE hIOCP, ULONG_PTR CompKey);
   BOOL QueryAssociatedCompletionPort(
      PJOBOBJECT_ASSOCIATE_COMPLETION_PORT pjoacp);
   BOOL SetEndOfJobInfo(
      DWORD fdwEndOfJobInfo = JOB_OBJECT_TERMINATE_AT_END_OF_JOB);
   BOOL QueryEndOfJobTimeInfo(PDWORD pfdwEndOfJobTimeInfo);

private:
   HANDLE m_hJob;
};


///////////////////////////////////////////////////////////////////////////////


inline CJob::CJob(HANDLE hJob) {

   m_hJob = hJob;
}


///////////////////////////////////////////////////////////////////////////////


inline CJob::~CJob() {

   if (m_hJob != NULL) 
      CloseHandle(m_hJob);
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::Create(PSECURITY_ATTRIBUTES psa, PCTSTR pszName) {

   m_hJob = CreateJobObject(psa, pszName);
   return(m_hJob != NULL);
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::Open(
   PCTSTR pszName, DWORD dwDesiredAccess, BOOL fInheritHandle) {

   m_hJob = OpenJobObject(dwDesiredAccess, fInheritHandle, pszName);
   return(m_hJob != NULL);
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::AssignProcess(HANDLE hProcess) {

   return(AssignProcessToJobObject(m_hJob, hProcess));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::AssociateCompletionPort(HANDLE hIOCP, ULONG_PTR CompKey) {

   JOBOBJECT_ASSOCIATE_COMPLETION_PORT joacp = { (PVOID) CompKey, hIOCP };
   return(SetInformationJobObject(m_hJob, 
      JobObjectAssociateCompletionPortInformation, &joacp, sizeof(joacp)));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::SetExtendedLimitInfo(
   PJOBOBJECT_EXTENDED_LIMIT_INFORMATION pjoeli, BOOL fPreserveJobTime) {

   if (fPreserveJobTime)
      pjoeli->BasicLimitInformation.LimitFlags |= 
         JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME;

   // If we are to preserve the job's time information, 
   // the JOB_OBJECT_LIMIT_JOB_TIME flag must not be on
   const DWORD fdwFlagTest = 
      (JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME | JOB_OBJECT_LIMIT_JOB_TIME);

   if ((pjoeli->BasicLimitInformation.LimitFlags & fdwFlagTest) 
      == fdwFlagTest) {
      // These flags are mutually exclusive but both are on, error
      DebugBreak();
   }

   return(SetInformationJobObject(m_hJob, 
      JobObjectExtendedLimitInformation, pjoeli, sizeof(*pjoeli)));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::SetBasicUIRestrictions(DWORD fdwLimits) {

   JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir = { fdwLimits };
   return(SetInformationJobObject(m_hJob, 
      JobObjectBasicUIRestrictions, &jobuir, sizeof(jobuir)));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::SetEndOfJobInfo(DWORD fdwEndOfJobInfo) {

   JOBOBJECT_END_OF_JOB_TIME_INFORMATION joeojti = { fdwEndOfJobInfo };
   joeojti.EndOfJobTimeAction = fdwEndOfJobInfo;
   return(SetInformationJobObject(m_hJob, 
      JobObjectEndOfJobTimeInformation, &joeojti, sizeof(joeojti)));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::SetSecurityLimitInfo(
   PJOBOBJECT_SECURITY_LIMIT_INFORMATION pjosli) {

   return(SetInformationJobObject(m_hJob, 
      JobObjectSecurityLimitInformation, pjosli, sizeof(*pjosli)));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::QueryAssociatedCompletionPort(
   PJOBOBJECT_ASSOCIATE_COMPLETION_PORT pjoacp) {

   return(QueryInformationJobObject(m_hJob, 
      JobObjectAssociateCompletionPortInformation, pjoacp, sizeof(*pjoacp), 
      NULL));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::QueryBasicAccountingInfo(
   PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION pjobai) {

   return(QueryInformationJobObject(m_hJob, 
      JobObjectBasicAndIoAccountingInformation, pjobai, sizeof(*pjobai), 
      NULL));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::QueryExtendedLimitInfo(
   PJOBOBJECT_EXTENDED_LIMIT_INFORMATION pjoeli) {

   return(QueryInformationJobObject(m_hJob, JobObjectExtendedLimitInformation, 
      pjoeli, sizeof(*pjoeli), NULL));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::QueryBasicProcessIdList(DWORD dwMaxProcesses, 
   PDWORD pdwProcessIdList, PDWORD pdwProcessesReturned) {

   // Calculate the # of bytes necessary
   DWORD cb = sizeof(JOBOBJECT_BASIC_PROCESS_ID_LIST) + 
      (sizeof(DWORD) * (dwMaxProcesses - 1));

   // Allocate those bytes from the stack
   PJOBOBJECT_BASIC_PROCESS_ID_LIST pjobpil = 
      (PJOBOBJECT_BASIC_PROCESS_ID_LIST) _alloca(cb);

   // Were those bytes allocated OK? If so, keep going
   BOOL fOk = (pjobpil != NULL);

   if (fOk) {
      pjobpil->NumberOfProcessIdsInList = dwMaxProcesses;
      fOk = ::QueryInformationJobObject(m_hJob, JobObjectBasicProcessIdList, 
         pjobpil, cb, NULL);

      if (fOk) {
         // We got the information, return it to the caller
         if (pdwProcessesReturned != NULL) 
            *pdwProcessesReturned = pjobpil->NumberOfProcessIdsInList;

         CopyMemory(pdwProcessIdList, pjobpil->ProcessIdList, 
            sizeof(DWORD) * pjobpil->NumberOfProcessIdsInList);
      }
   }
   return(fOk);
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::QueryBasicUIRestrictions(PDWORD pfdwRestrictions) {

   JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir;
   BOOL fOk = QueryInformationJobObject(m_hJob, JobObjectBasicUIRestrictions, 
      &jobuir, sizeof(jobuir), NULL);
   if (fOk)
      *pfdwRestrictions = jobuir.UIRestrictionsClass;
   return(fOk);
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::QueryEndOfJobTimeInfo(PDWORD pfdwEndOfJobTimeInfo) {

   JOBOBJECT_END_OF_JOB_TIME_INFORMATION joeojti;
   BOOL fOk = QueryInformationJobObject(m_hJob, JobObjectBasicUIRestrictions, 
      &joeojti, sizeof(joeojti), NULL);
   if (fOk)
      *pfdwEndOfJobTimeInfo = joeojti.EndOfJobTimeAction;
   return(fOk);
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::QuerySecurityLimitInfo(
   PJOBOBJECT_SECURITY_LIMIT_INFORMATION pjosli) {

   return(QueryInformationJobObject(m_hJob, JobObjectSecurityLimitInformation, 
      pjosli, sizeof(*pjosli), NULL));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::Terminate(UINT uExitCode) {

   return(TerminateJobObject(m_hJob, uExitCode));
}


///////////////////////////////////////////////////////////////////////////////


inline BOOL CJob::GrantUserHandleAccess(HANDLE hUserObj, BOOL fGrant) {

   return(UserHandleGrantAccess(hUserObj, m_hJob, fGrant));
}


//////////////////////////////// End of File //////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品在线观看| 欧美美女一区二区在线观看| 91国产成人在线| 久久午夜老司机| 午夜国产不卡在线观看视频| 国产一区二区在线看| 欧美日韩精品一二三区| 国产精品高潮呻吟久久| 久久精品国产精品青草| 欧洲精品一区二区三区在线观看| 久久一区二区视频| 日韩精品91亚洲二区在线观看| www.日本不卡| 国产欧美日韩亚州综合| 精品在线一区二区三区| 欧美理论在线播放| 亚洲国产精品久久人人爱蜜臀| 成人动漫在线一区| 久久综合狠狠综合久久综合88| 午夜视黄欧洲亚洲| 欧美午夜在线观看| 亚洲码国产岛国毛片在线| 丁香一区二区三区| 久久九九全国免费| 国产精品原创巨作av| 精品福利在线导航| 精品亚洲aⅴ乱码一区二区三区| 欧美日韩国产乱码电影| 亚洲v中文字幕| 精品视频一区 二区 三区| 亚洲另类春色国产| 91行情网站电视在线观看高清版| 国产精品卡一卡二| 色婷婷综合久久久久中文一区二区| 中文字幕中文字幕在线一区| 不卡一卡二卡三乱码免费网站| 国产精品免费av| av不卡在线观看| 亚洲免费av在线| 欧美色精品在线视频| 日韩精品五月天| 久久亚洲一区二区三区明星换脸| 国产精品99久久久| 中文字幕一区二区三| 91网址在线看| 亚洲福利视频三区| 91精品国产综合久久精品| 精品一区二区av| 国产精品亲子伦对白| 色综合久久天天| 日韩国产在线观看| 久久精品无码一区二区三区| 成人app网站| 亚洲成av人片一区二区梦乃| 日韩欧美国产电影| 国产风韵犹存在线视精品| 亚洲视频一二区| 欧美高清一级片在线| 国产一区二区三区不卡在线观看 | 欧美日韩三级在线| 麻豆精品一区二区综合av| 亚洲国产精品黑人久久久| 99久久精品免费看| 天堂在线亚洲视频| 国产午夜精品久久| 欧美三级视频在线| 国产一区二区三区在线观看免费| 中文字幕日韩av资源站| 91精品国产综合久久久久| 国产激情偷乱视频一区二区三区| 成人免费在线观看入口| 日韩欧美色电影| 一本色道久久加勒比精品| 久久机这里只有精品| 亚洲女人的天堂| 欧美精品一区二区三| 色噜噜狠狠成人中文综合| 久久国产尿小便嘘嘘尿| 亚洲一区免费在线观看| 久久久久久影视| 欧美精品视频www在线观看| 成人午夜激情影院| 蜜臀av在线播放一区二区三区| 亚洲欧美日韩人成在线播放| 欧美不卡视频一区| 欧美日韩精品综合在线| av一二三不卡影片| 精品一区二区三区在线播放| 亚洲国产成人av网| 亚洲精品视频免费观看| 久久免费看少妇高潮| 91精品国产欧美一区二区18| 91欧美激情一区二区三区成人| 国产精品一品二品| 美女mm1313爽爽久久久蜜臀| 亚洲一区二区三区四区的| 国产精品三级久久久久三级| 欧美zozozo| 日韩精品在线一区| 欧美高清精品3d| 精品视频在线免费| 色综合欧美在线| 91蝌蚪国产九色| hitomi一区二区三区精品| 成人性生交大合| 国产九色sp调教91| 精品写真视频在线观看| 精品一区精品二区高清| 美女高潮久久久| 久久国产麻豆精品| 精品一区二区三区免费视频| 乱一区二区av| 黄一区二区三区| 国产一区不卡在线| 国产一区二区三区在线观看免费视频| 久久er精品视频| 国产一区二区三区综合| 国产精华液一区二区三区| 国产成人综合自拍| 成人18精品视频| 在线影视一区二区三区| 欧美在线不卡一区| 88在线观看91蜜桃国自产| 91麻豆精品国产91久久久使用方法 | 免费欧美高清视频| 精品一区二区三区在线观看| 国产乱色国产精品免费视频| 国产成人精品免费| av成人动漫在线观看| 欧美性视频一区二区三区| 91精品国产手机| 久久久久国产精品麻豆ai换脸| 亚洲国产精品精华液2区45| 亚洲视频一区二区在线观看| 亚洲图片自拍偷拍| 久久精品国产久精国产| 成人高清免费观看| 欧美日韩黄视频| 精品久久久久久久久久久久久久久 | 国产欧美一区视频| 亚洲欧美电影院| 免费在线欧美视频| 国产不卡在线播放| 91久久一区二区| 欧美一区二区成人| 国产精品萝li| 丝袜美腿亚洲综合| 成人激情文学综合网| 欧美剧在线免费观看网站| 精品久久久三级丝袜| 亚洲免费观看高清在线观看| 欧美a一区二区| 成人av网站免费观看| 欧美日韩日日骚| 国产精品网站在线观看| 视频一区二区欧美| 粉嫩av亚洲一区二区图片| 欧美日韩精品是欧美日韩精品| 久久久国产精品午夜一区ai换脸| 亚洲乱码国产乱码精品精的特点| 久久精品国产一区二区三区免费看| 成人性生交大片免费看中文| 欧美麻豆精品久久久久久| 国产精品免费av| 蜜桃视频一区二区三区| 91免费观看视频| 国产欧美精品一区| 麻豆精品国产91久久久久久| 色悠悠久久综合| www久久久久| 日韩 欧美一区二区三区| 91亚洲永久精品| 久久免费电影网| 蜜臀va亚洲va欧美va天堂| 在线日韩一区二区| 亚洲色图欧洲色图婷婷| 国产乱色国产精品免费视频| 日韩欧美在线观看一区二区三区| 亚洲天堂免费在线观看视频| 国产一区二区毛片| 欧美大片在线观看一区二区| 亚洲精品大片www| 99精品视频在线免费观看| 国产性色一区二区| 激情偷乱视频一区二区三区| 欧美福利视频导航| 日韩影院精彩在线| 欧美日韩国产精选| 亚洲成人综合视频| 欧美调教femdomvk| 亚洲自拍偷拍av| 在线亚洲一区二区| 亚洲一二三级电影| 欧美最猛性xxxxx直播| 伊人色综合久久天天人手人婷| 91亚洲永久精品| 曰韩精品一区二区| 91久久奴性调教| 亚洲国产欧美日韩另类综合| 欧美自拍偷拍一区|