パラメーターの検証Parameter Validation

セキュリティが強化された CRT 関数のほとんどは、 NULLのポインターのチェック、整数が有効な範囲内にある、または列挙値が有効であることなど、パラメーターを検証します。Most of the security-enhanced CRT functions, and many that aren't, validate their parameters for things like checking pointers for NULL, that integers fall into a valid range, or that enumeration values are valid. 無効なパラメーターが見つかった場合は、無効なパラメーターハンドラーが呼び出されます。If an invalid parameter is found, the invalid parameter handler is called.

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

C ランタイムライブラリ関数は、無効なパラメーターを検出すると、エラーに関する情報をキャプチャしてから、無効なパラメーターハンドラーディスパッチ関数をラップするマクロを呼び出します。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. _Invalid_parameter_invalid_parameter_noinfo_invalid_parameter_noinfo_noreturnのいずれかになります。Which will be one of _invalid_parameter, _invalid_parameter_noinfo, or _invalid_parameter_noinfo_noreturn. どのディスパッチ関数が呼び出されるかは、コードがそれぞれ、デバッグビルド、リテールビルド、またはエラーが回復可能と見なされないかどうかによって異なります。Which dispatch function is called depends on whether your code is, respectively, a debug build, a retail build, or the error isn't considered recoverable.

デバッグビルドでは、通常、無効なパラメーターマクロによって、ディスパッチ関数が呼び出される前に失敗したアサーションとデバッガーのブレークポイントが生成されます。In debug builds, the invalid parameter macro usually raises a failed assertion and a debugger breakpoint before the dispatch function is called. このコードを実行すると、アサーションは、オペレーティングシステムとランタイムライブラリのバージョンに応じて、"Abort"、"Retry"、および "Continue" などの選択肢を持つダイアログボックスでユーザーに報告される場合があります。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 calls the currently assigned invalid parameter handler. 既定では、無効なパラメーターはを呼び出します _invoke_watson 。これにより、アプリケーションがミニダンプを閉じて生成します。By default, the invalid parameter calls _invoke_watson, which causes the application to close and generate a mini-dump. オペレーティングシステムで有効になっている場合、分析のためにクラッシュダンプを Microsoft に送信するかどうかを確認するダイアログボックスが表示されます。If enabled by the operating system, a dialog box asks the user if they want to send the crash dump to Microsoft for analysis.

この動作を変更するには、関数 _set_invalid_parameter_handler または _set_thread_local_invalid_parameter_handler を使用して、無効なパラメーターハンドラーを独自の関数に設定します。You can change this behavior 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 stop 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, to indicate 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