BOOL SetInformationJobObject( HANDLE hJob, JOBOBJECTINFOCLASS JobInfoClass, LPVOID JobInfo, DWORD JobInfoSize);
この関数はNT5.0で使用可能。
引数の意味は以下の通り。
| hJob | 設定先のジョブオブジェクトのハンドル |
| JobInfoClass | 設定する制限の種別。後述の表を参照。 |
| JobInfo | 設定する制限。 |
| JobInfoSize | JobInfoのサイズ。 |
JobInfoClassに指定可能なフラグは以下の値のいずれかである。
| JobObjectBasicLimitInformation | JobInfoはJOBOBJECT_BASIC_LIMIT_INFORMATION構造体のポインタ。 |
| JobObjectBasicUIRestrictions | JobInfoはJOBOBJECT_BASIC_UI_RESTRICTIONS構造体のポインタ。 |
戻り値は、関数の実行に成功したか否かを表す真偽値である。
/* メモ帳のコピー・貼り付けを無効化する */
void DisableClipboard()
{
HANDLE hJob;
HANDLE hProcess[3];
int i;
STARTUPINFO si;
PROCESS_INFORMATION pi;
JOBOBJECT_BASIC_UI_RESTRICTIONS Rest;
si.cb = sizeof(si);
si.lpReserved = NULL;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = 0;
si.cbReserved2 = 0;
si.lpReserved2 = NULL;
/* ジョブオブジェクトの作成 */
hJob = CreateJobObject(NULL, "Test Job Object");
/* メモ帳を三つ起動 */
for(i=0; i<3; i++) {
CreateProcess(NOTEPAD_PATH, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
hProcess[i] = pi.hProcess;
}
/* 起動したメモ帳をジョブオブジェクトに関連付ける */
for(i=0; i<3; i++) AssignProcessToJobObject(hJob, hProcess[i]);
/* 三つのメモ帳のクリップボードに対する読み込み・書き込みを制限する */
Rest.UIRestrictionsClass = JOB_OBJECT_UILIMIT_READCLIPBOARD | JOB_OBJECT_UILIMIT_WRITECLIPBOARD;
SetInformationJobObject(hJob, JobObjectBasicUIRestrictions, &Rest, sizeof(Rest));
/* ジョブオブジェクトのクローズ */
CloseHandle(hJob);
}