Win32API: CreateProcess

指定した実行ファイルのプロセスを起動し、プライマリスレッドを作成します。


定義
Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _
         (lpApplicationName As BytePtr, _
          lpCommandLine As BytePtr, _
    ByRef lpProcessAttributes As SECURITY_ATTRIBUTES, _
    ByRef lpThreadAttributes As SECURITY_ATTRIBUTES, _
          bInheritHandles As Long, _
          dwCreationFlags As DWord, _
          lpEnvironment As VoidPtr, _
          lpCurrentDirectory As BytePtr, _
    ByRef lpStartupInfo As STARTUPINFO, _
    ByRef lpProcessInformation As PROCESS_INFORMATION) As DWord
lpApplicationName
実行ファイルを示すパスが格納された文字列へのポインタを指定します。省略時は、NULL を指定することもできます。

lpCommandLine
アプリケーションに渡すコマンドラインが格納された文字列へのポインタを指定します。省略時は、NULL を指定することもできます。

lpProcessAttributes
取得したハンドルの子プロセスへの継承を許可するかどうかを決める、SECURITY_ATTRIBUTES 構造体へのポインタを指定します。NULL を指定すると、ハンドルは継承されません。

lpThreadAttributes
取得したハンドルの子プロセスへの継承を許可するかどうかを決める、SECURITY_ATTRIBUTES 構造体へのポインタを指定します。NULL を指定すると、ハンドルは継承されません。

bInheritHandles
新しいプロセスに、呼び出し側プロセスのハンドルを継承させるかどうかを指定します。継承させるときは TRUE を、継承させないときは FALSE を指定します。

dwCreationFlags
プロセス作成に関する制御フラグ、及び優先順位クラスを以下の定数の組み合わせで指定します。
制御フラグ説明
CREATE_DEFAULT_ERROR_MODE新しいプロセスに、呼び出し側プロセスのエラーモードを継承させません。新しいプロセスには、デフォルトのエラーモードを適用します。
CREATE_NEW_CONSOLE新しいプロセスに、親のコンソールを継承させず、新しいコンソールを持たせます。DETACHED_PROCESS と同時に指定することはできません。
CREATE_NEW_PROCESS_GROUP新しいプロセスを、新しいプロセスグループのルートプロセスにします。
CREATE_SEPARATE_WOW_VDM新しいプロセスを、プライベートな仮想 DOS マシン上で実行させます(WindowsNT系OSのみ)。このフラグは、16 ビットの Windows アプリケーションを起動するときにだけ有効です。
CREATE_SHARED_WOW_VDMWIN.INI ファイルの Windows セクション内の DefaultSeparateVDM スイッチが TRUE のとき、そのスイッチを無効にし、新しいプロセスを共有された仮想 DOS マシン上で実行させます(WindowsNT系OSのみ)。このフラグは、16 ビットのWindows アプリケーションを起動するときにだけ有効です。
CREATE_SUSPENDEDプライマリスレッドをサスペンド状態にして起動します。スレッドを実行するには、ResumeThread関数を使います。
CREATE_UNICODE_ENVIRONMENTlpEnvironment パラメータが指す環境ブロックが Unicode 文字を使用していることを示します。デフォルトでは、ANSI 文字が使用されているものとみなされます。
DEBUG_PROCESS呼び出し側プロセスがデバッガのときに指定します。作成したプロセス内で新たにプロセスが作成されたとき、そのプロセスもデバッグの対象とします(DEBUG_ONLY_THIS_PROCESS と同時に指定することはできません)。
DEBUG_ONLY_THIS_PROCESS呼び出し側プロセスがデバッガのときに指定します。作成したプロセス内で新たにプロセスが作成されたとき、そのプロセスはデバッグの対象としません(DEBUG_PROCESS と同時に指定することはできません)。
DETACHED_PROCESS新しいプロセスに、親プロセスのコンソールへのアクセスを持たせません。新しいプロセスは、AllocConsole 関数を使って新しいコンソールを作成できます。CREATE_NEW_CONSOLE フラグと同時に指定することはできません。

優先順位クラス説明
HIGH_PRIORITY_CLASSタイムクリティカルなタスクを実行するプロセスであることを示します。
IDLE_PRIORITY_CLASSシステムがアイドル状態のときにだけ実行するプロセスであることを示します。
NORMAL_PRIORITY_CLASS特別なスケジューリングを必要としない、一般的なプロセスであることを示します。
REALTIME_PRIORITY_CLASS最も高い優先順位クラスを持つプロセスであることを示します。このクラスのスレッドは、重要なタスクを行うオペレーティングシステムのプロセスを含むほかのすべてのプロセスのスレッドよりも先に実行されます。少しでも長い時間実行すると、ディスクキャッシュがフラッシュされなくなったり、マウスが応答しなくなったりします。
※デフォルトの優先順位クラスは、NORMAL_PRIORITY_CLASS です。ただし、呼び出し側プロセスが IDLE_PRIORITY_CLASS のときは、作成されるプロセスも IDLE_PRIORITY_CLASS になります。

lpEnvironment
新しいプロセスの環境ブロックが格納されたバッファへのポインタを指定します。
環境ブロックの構成は次のようになります。
Ex"name1=value1\0name2=value2\0……nameN=valueN\0\0"

lpCurrentDirectory
新しいプロセスのカレントディレクトリが格納された文字列へのポインタを指定します。

lpStartupInfo
新しいプロセスのメインウィンドウに関する情報が格納されている、STARTUPINFO構造体へのポインタを指定します。

lpProcessInformation
PROCESS_INFORMATION構造体へのポインタを指定します。プロセスが作成されると、この構造体に、プロセス・プライマリスレッドのハンドル及びIDが格納されます。

戻り値

関数が成功すると、TRUE が返ります。失敗すると FALSE が返ります。

解説

PROCESS_INFORMATION構造体で受け取ったハンドルは、不必要になり次第、CloseHandle関数でメモリから解放して下さい。

環境情報

インクルード ファイル: api_system.sbp 内で定義済み
DLLファイル: kernel32.dll


CloseHandle関数ExitProcess関数ResumeThread関数OpenProcess関数