パラメーターの検証Parameter Validation

ほとんどのセキュリティ強化 CRT 関数および多くの既存の関数は個々のパラメーターを検証します。Most of the security-enhanced CRT functions and many of the preexisting functions validate their parameters. これには、NULL のポインターの確認、整数が有効範囲に入ることの確認、または列挙値が有効であるかどうかの確認が含まれる場合があります。This could include checking pointers for NULL, checking that integers fall into a valid range, or checking that enumeration values are valid. 無効なパラメーターが見つかると、無効なパラメーター ハンドラーが実行されます。When an invalid parameter is found, the invalid parameter handler is executed.

無効なパラメーター ハンドラー ルーチンInvalid Parameter Handler Routine

C ランタイム ライブラリ関数は、無効なパラメーターを検出すると、エラーに関する特定の情報をキャプチャし、無効なパラメーター ハンドラー ディスパッチ関数 _invalid_parameter_invalid_parameter_noinfo、または _invalid_parameter_noinfo_noreturn のいずれかをラップするマクロを呼び出します。When a C Runtime Library function detects an invalid parameter, it captures some information about the error, and then calls a macro that wraps an invalid parameter handler dispatch function, one of _invalid_parameter, _invalid_parameter_noinfo, or _invalid_parameter_noinfo_noreturn. これらのディスパッチ関数は、コードがデバッグ ビルドの場合、製品ビルドの場合、エラーが回復可能とは見なされない場合にそれぞれ呼び出されます。The dispatch function called depends on whether your code is, respectively, a debug build, a retail build, or the error is not considered recoverable.

デバッグ ビルドでは、通常は、無効なパラメーター マクロによって、ディスパッチ関数が呼び出される前に、失敗したアサーションおよびデバッガー ブレークポイントが呼び出されます。In Debug builds, the invalid parameter macro usually raises a failed assertion and a debugger breakpoint before the dispatch function is called. コードが実行されると、「中止」、「再試行」、「続行」または類似の選択肢 (オペレーティング システムとランタイム ライブラリ バージョンによって異なる) を含むダイアログ ボックスで、ユーザーにアサーションが報告される可能性があります。When the code is executed, the assertion may be reported to the user in a dialog box that has "Abort", "Retry", and "Continue" or similar choices, depending on the operating system and runtime library version. これらのオプションを使用すると、ユーザーはすぐにプログラムを終了するか、デバッガーをアタッチするか、既存のコードを継続的に実行してディスパッチ関数を呼び出すかを選択できます。These options allow the user to immediately terminate the program, to attach a debugger, or to let the existing code continue to run, which calls the dispatch function.

次いで無効なパラメーター ハンドラーのディスパッチ関数は、現在割り当てられている無効なパラメーター ハンドラーを呼び出します。The invalid parameter handler dispatch function in turn calls the currently assigned invalid parameter handler. 既定では、無効なパラメーターの場合に _invoke_watson が呼び出されます。これにより、アプリケーションは "クラッシュ" します。つまり、終了してミニ ダンプを生成します。By default, the invalid parameter calls _invoke_watson which causes the application to "crash," that is, terminate and generate a mini-dump. オペレーティング システムで有効にされている場合、ダイアログ ボックスにより、Microsoft にクラッシュ ダンプを読み込んで分析を行うかどうかがユーザーに尋ねられます。If enabled by the operating system, a dialog box asks the user if they want to load the crash dump to Microsoft for analysis.

関数 _set_invalid_parameter_handler または _set_thread_local_invalid_parameter_handler を使用して無効なパラメーター ハンドラーを独自の関数に設定すれば、この動作を変更できます。This behavior can be changed by using the functions _set_invalid_parameter_handler or _set_thread_local_invalid_parameter_handler to set the invalid parameter handler to your own function. 指定した関数がアプリケーションを終了しない場合、無効なパラメーターを取得した関数に制御が返されます。If the function you specify does not terminate the application, control is returned to the function that received the invalid parameters. CRT では、通常、これらの関数は関数の実行を中断し、errno をエラー コードに設定し、エラー コードを返します。In the CRT, these functions will normally cease function execution, set errno to an error code, and return an error code. 多くの場合、errno 値と戻り値はどちらも EINVAL です。これは、無効なパラメーターを示します。In many cases, the errno value and the return value are both EINVAL, indicating an invalid parameter. 場合によっては、より具体的なエラー コードが返されます。たとえば、無効なファイル ポインターがパラメーターとして渡された場合の EBADF などです。In some cases, a more specific error code is returned, such as EBADF for a bad file pointer passed in as a parameter. errno の詳細については、errno、_doserrno、_sys_errlist, and _sys_nerr をご覧ください。For more information on errno, see errno, _doserrno, _sys_errlist, and _sys_nerr.

関連項目See also

CRT のセキュリティ機能Security Features in the CRT
CRT ライブラリの機能CRT Library Features