プロセス作成フラグ
CreateProcess、CreateProcessAsUser、CreateProcessWithLogonW、および CreateProcessWithTokenW 関数では、次のプロセス作成フラグが使用されます。 これらは、記載されている場合を除き、任意の組み合わせで指定できます。
例
BOOL creationResult;
creationResult = CreateProcess(
NULL, // No module name (use command line)
cmdLine, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, // creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&startupInfo, // Pointer to STARTUPINFO structure
&processInformation); // Pointer to PROCESS_INFORMATION structure
GitHub の Windows クラシック サンプルの例 。
Flags
定数/値 | 説明 |
---|---|
|
ジョブに関連付けられているプロセスの子プロセスは、ジョブに関連付けられません。 呼び出し元のプロセスがジョブに関連付けられていない場合、この定数は影響を受けません。 呼び出し元プロセスがジョブに関連付けられている場合、ジョブは JOB_OBJECT_LIMIT_BREAKAWAY_OK 制限を設定する必要があります。 |
|
新しいプロセスは、呼び出し元プロセスのエラー モードを継承しません。 代わりに、新しいプロセスは既定のエラー モードを取得します。 この機能は、ハード エラーを無効にして実行されるマルチスレッド シェル アプリケーションに特に役立ちます。 既定の動作は、新しいプロセスが呼び出し元のエラー モードを継承することです。 このフラグを設定すると、既定の動作が変更されます。 |
|
新しいプロセスには、親のコンソール (既定値) を継承するのではなく、新しいコンソールがあります。 詳細については、「 コンソールの作成」を参照してください。 このフラグは 、DETACHED_PROCESSでは使用できません。 |
|
新しいプロセスは、新しいプロセス グループのルート プロセスです。 プロセス グループには、このルート プロセスの子孫であるすべてのプロセスが含まれます。 新しいプロセス グループのプロセス識別子は、 lpProcessInformation パラメーターで返されるプロセス識別子と同じです。 プロセス グループは GenerateConsoleCtrlEvent 関数によって使用され、コンソール プロセスのグループに Ctrl + BREAK シグナルを送信できます。 このフラグを指定すると、新しいプロセス グループ内のすべてのプロセスに対して Ctrl + C シグナルが無効になります。 CREATE_NEW_CONSOLEで指定した場合、このフラグは無視されます。 |
|
このプロセスは、コンソール ウィンドウなしで実行されているコンソール アプリケーションです。 そのため、アプリケーションのコンソール ハンドルは設定されていません。 このフラグは、アプリケーションがコンソール アプリケーションでない場合、または CREATE_NEW_CONSOLE または DETACHED_PROCESS で使用される場合は無視されます。 |
|
プロセスは、保護されたプロセスとして実行されます。 システムは、保護されたプロセスと保護されたプロセスのスレッドへのアクセスを制限します。 プロセスが保護されたプロセスと対話する方法の詳細については、「 プロセスのセキュリティとアクセス権」を参照してください。 保護されたプロセスをアクティブ化するには、バイナリに特別な署名が必要です。 この署名は Microsoft によって提供されますが、現在、Microsoft 以外のバイナリでは使用できません。 現在、メディア基盤、オーディオ エンジン、Windows エラー報告、システムの 4 つの保護されたプロセスがあります。 これらのバイナリに読み込むコンポーネントも署名する必要があります。 マルチメディア企業は、最初の 2 つの保護されたプロセスを活用できます。 詳細については、「 保護されたメディア パスの概要」を参照してください。 Windows Server 2003 および Windows XP: この値はサポートされていません。 |
|
呼び出し元が、通常はプロセスに自動的に適用されるプロセス制限をバイパスする子プロセスを実行できるようにします。 |
|
このフラグを使用すると、Virtualization-Based セキュリティ環境で実行されるセキュリティで保護されたプロセスを起動できます。 |
|
このフラグは、16 ビット Windows ベースのアプリケーションを起動する場合にのみ有効です。 設定されている場合、新しいプロセスはプライベート Virtual DOS マシン (VDM) で実行されます。 既定では、すべての 16 ビット Windows ベースのアプリケーションは、単一の共有 VDM でスレッドとして実行されます。 個別に実行する利点は、クラッシュによって単一の VDM のみが終了することです。個別の VDM で実行されている他のプログラムは、引き続き正常に機能します。 また、個別の VDM で実行される 16 ビットの Windows ベースのアプリケーションには、個別の入力キューがあります。 つまり、あるアプリケーションが一時的に応答を停止した場合、個別の VDM 内のアプリケーションは入力を受け取り続けます。 個別に実行する場合の欠点は、実行するメモリが大幅に多くなる点です。 このフラグは、ユーザーが 16 ビット アプリケーションを独自の VDM で実行するよう要求した場合にのみ使用する必要があります。 |
|
フラグは、16 ビット Windows ベースのアプリケーションを起動する場合にのみ有効です。 WIN.INIの Windows セクションの DefaultSeparateVDM スイッチが TRUE の場合、このフラグはスイッチをオーバーライドします。 新しいプロセスは、共有仮想 DOS マシンで実行されます。 |
|
新しいプロセスのプライマリ スレッドは中断状態で作成され、 ResumeThread 関数が呼び出されるまで実行されません。 |
|
このフラグが設定されている場合、 lpEnvironment が指す環境ブロックは Unicode 文字を使用します。 それ以外の場合、環境ブロックは ANSI 文字を使用します。 |
|
呼び出し元のスレッドは、新しいプロセスを開始してデバッグします。
WaitForDebugEvent 関数を使用して、関連するすべてのデバッグ イベントを受信できます。 |
|
呼び出し元のスレッドは、新しいプロセスと、新しいプロセスによって作成されたすべての子プロセスを開始してデバッグします。
WaitForDebugEvent 関数を使用して、関連するすべてのデバッグ イベントを受信できます。 DEBUG_PROCESSを使用するプロセスがデバッグ チェーンのルートになります。 これは、チェーン内の別のプロセスが DEBUG_PROCESS で作成されるまで続きます。 このフラグを DEBUG_ONLY_THIS_PROCESSと組み合わせると、呼び出し元は子プロセスではなく、新しいプロセスのみをデバッグします。 |
|
コンソール プロセスの場合、新しいプロセスは親のコンソール (既定値) を継承しません。 新しいプロセスでは、後で AllocConsole 関数を呼び出してコンソールを作成できます。 詳細については、「 コンソールの作成」を参照してください。 この値は 、CREATE_NEW_CONSOLEでは使用できません。 |
|
このプロセスは、拡張スタートアップ情報を使用して作成されます。 lpStartupInfo パラメーターは STARTUPINFOEX 構造体を指定します。 Windows Server 2003 および Windows XP: この値はサポートされていません。 |
|
プロセスは、親のアフィニティを継承します。 親プロセスに複数の プロセッサ グループにスレッドがある場合、新しいプロセスは、親によって使用されている任意のグループのグループ相対アフィニティを継承します。 Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: この値はサポートされていません。 |
解説
32 ビット Windows では、16 ビット アプリケーションは個々のプロセスとして実行されるのではなく、ntvdm.exeによってシミュレートされます。 したがって、プロセス作成フラグは ntvdm.exeに適用されます。 ntvdm.exeは最初の 16 ビット アプリケーションを実行した後も保持されるため、別の 16 ビット アプリケーションを起動すると、新しい作成フラグは適用されません。ただし、新しいntvdm.exeを作成する CREATE_NEW_CONSOLE と CREATE_SEPARATE_WOW_VDMを除きます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows Server 2003 [デスクトップ アプリのみ] |
ヘッダー |
|