매개 변수 유효성 검사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 및 _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