<Return[C]><Top>

CreateProcess

Declare Function Api_CreateProcess& Lib "kernel32" Alias "CreateProcessA" (ByVal aNm$, ByVal cLn$, prAt As SECURITY_ATTRIBUTES, thAt As SECURITY_ATTRIBUTES, ByVal Hnd&, ByVal Flg&, Env As Any, ByVal cDir$, sInf As STARTUPINFO, pInf As PROCESS_INFORMATION)

Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

新しい 1 個のプロセスと、そのプライマリスレッドを作成する。新しいプロセスは、指定された実行可能ファイルを実行する。
異なったセキュリティコンテキストで動作するプロセスを作成するには、CreateProcessAsUser または CreateProcessWithLogonW 関数を使う。

パラメータ
lpApplicationName
    実行するべきモジュールの名前を保持している、NULL で終わる文字列へのポインタを指定する。
    この文字列で、実行するべきモジュールのフルパスとファイル名、または部分的な名前を指定できる。

    部分的な名前を指定した場合、この関数は、カレントドライブとカレントディレクトリを使ってファイル指定を完成させる。

    この関数は、検索パスを利用しない。
lpCommandLine
    実行するべきコマンドラインを保持している、NULL で終わる文字列へのポインタを指定する。

    システムはこのコマンドラインの最後に NULL を追加し、必要に応じて文字列を切り捨て、実際にどのファイルを使うのか指定する。
    Windows NT/2000:このパラメータで const 文字列(リテラル;文字列定数)を指定すると、この関数の Unicode 版である

    CreateProcessW 関数は失敗する。
    lpCommandLine パラメータで NULL を指定することもできる。この場合、lpApplicationName パラメータで指定した文字列がコマンドライ

    ンとして扱われる。
    lpApplicationName と lpCommandLine の両方のパラメータで NULL 以外の値を指定すると、*lpApplicationName は実行するべきモジ

    ュール名、*lpCommandLine はコマンドラインを意味する。新しいプロセスは GetCommandLine 関数を使って、コマンドライン全体を取得

    できる。C のランタイムプロセスは、argc と argv の各引数を利用できる。
    lpApplicationName パラメータで NULL を指定した場合、コマンドラインのうち、最初の半角スペースで区切られたトークン(最初の半角ス

    ペースより左側)がモジュール名を意味する。長いファイル名の一部として半角スペースを使っている場合、引用符を使ってファイル名を囲

    み、ファイル名の終了位置と引数の開始位置を明示すること。ファイル名の一部として拡張子を指定しなかった場合、.exe が追加される。

    ファイル名の最後が 1 個のピリオド(.)で終わっていて拡張子が含まれていない場合や、ファイル名にパスが含まれている場合、.exe は

    追加されない。ファイル名にパスが含まれていなかった場合、Windows は次の順序で実行可能ファイルを検索する。
    1.アプリケーションのロードに使ったディレクトリ(アプリケーションの実行可能ファイルと同じディレクトリ)
    2.親プロセスのカレントディレクトリ
    3.Windows 95/98:Windows のシステムディレクトリ。このディレクトリのパスは、GetSystemDirectory 関数で取得できる。
       Windows NT/2000:32 ビットの Windows システムディレクトリ。このディレクトリのパスは、GetSystemDirectory 関数で取得できる。

       このディレクトリの既定の名前は、SYSTEM32 である。
    4.Windows NT/2000:16 ビットの Windows システムディレクトリ。このディレクトリのパスを取得する Win32 関数は無いが、

       SearchPath 関数の検索対象になる。このディレクトリの既定の名前は、SYSTEM である。
    5.Windows ディレクトリ。このディレクトリのパスは、GetWindowsDirectory 関数で取得できる。
    6.環境変数 PATH に記述されている各ディレクトリ
    7.Windows 95/98:32 ビットの Windows システムディレクトリ。このディレクトリのパスは、GetSystemDirectory 関数で取得できる。

       このディレクトリの既定の名前は、SYSTEM32 である。
lpProcessAttributes
    1 個の SECURITY_ATTRIBUTES 構造体へのポインタを指定する。

    この構造体で、子プロセスが、取得したハンドルを継承できるかどうかを指定する。このパラメータで NULL を指定すると、取得したハンド

    ルを継承できない。
    Windows NT/2000:SECURITY_ATTRIBUTES 構造体の lpSecurityDescriptor メンバで、新しいプロセスに適用されるセキュリティ記

    述子を指定する。このパラメータで NULL を指定すると、既定のセキュリティ記述子がプロセスに適用される。
lpThreadAttributes
    1 個の SECURITY_ATTRIBUTES 構造体へのポインタを指定する。

    この構造体で、子プロセスが、取得したハンドルを継承できるかどうかを指定する。

    このパラメータで NULL を指定すると、取得したハンドルを継承できない。
bInheritHandles
    新しいプロセスが、呼び出し側プロセスのハンドルを継承するかどうかを指定する。

    TRUE を指定すると、呼び出し側プロセス内で開いている、継承可能なハンドルは、新しいプロセスへ継承される。

    継承されたハンドルは、元のハンドルと同じ値とアクセス権を持つ。
dwCreationFlags
    優先順位クラスとプロセスの作成を制御するフラグを指定する。

    プロセス作成に関する制御フラグは、特に注意がない場合、次の値の任意の組み合わせで指定できる。

    値                                                       

意味                                                                                                              

    CREATE_BREAKAWAY_FROM_JOB

Windows 2000:あるプロセスが特定のジョブに関連付けられている場合でも、その子プロセス

 

を、そのジョブに関連付けない。

    CREATE_DEFAULT_ERROR_MODE

新しいプロセスは、呼び出し側プロセスのエラーモードを継承しない。

    CREATE_FORCE_DOS

Windows NT/2000:このフラグは、16 ビット版のアプリケーションを起動する場合にのみ有効。

    CREATE_NEW_CONSOLE

新しいプロセスは、親のコンソールを継承せず、新しいコンソールを持つ。

 

DETACHED_PROCESS フラグと同時に指定することはできない。

    CREATE_NEW_PROCESS_GROUP

新しいプロセスを、新しいプロセスグループのルートプロセスにする。

    CREATE_NO_WINDOW

Windows NT/2000:このフラグは、コンソールアプリケーションを起動する場合にのみ有効。

 

このフラグを指定すると、コンソールウィンドウなしでアプリケーションを実行する。

    CREATE_SEPARATE_WOW_VDM

Windows NT/2000:このフラグは、16 ビット版 Windows ベースのアプリケーションを起動する

 

場合にのみ有効である。

    CREATE_SHARED_WOW_VDM

Windows NT/2000:このフラグは、16 ビット版 Windows ベースのアプリケーションを起動する

 

場合にのみ有効である。

    CREATE_SUSPENDED

プライマリスレッドをサスペンド状態にして、新しいプロセスを作成する。

    CREATE_UNICODE_ENVIRONMENT

lpEnvironment パラメータが指す環境ブロックの形式を指定する。このフラグを指定すると、その

 

環境ブロックは Unicode 文字を使う。このフラグを指定しなかった場合、ANSI 文字を使う。

lpEnvironment
    新しいプロセスの環境ブロックへのポインタを指定する。

lpCurrentDirectory
    新しいプロセスのカレントドライブ名とカレントディレクトリ名を保持している、NULL で終わる文字列へのポインタを指定する。
lpStartupInfo
    新しいプロセスのメインウィンドウの表示方法を保持している、1 個の STARTUPINFO 構造体へのポインタを指定する。
lpProcessInformation
    1 個の PROCESS_INFORMATION 構造体へのポインタを指定する。関数から制御が返ると、この構造体に、新しいプロセスに関する情

    報が格納される。

 
戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。