IsBadReadPtr 함수(winbase.h)
호출 프로세스에서 지정된 메모리 범위에 대한 읽기 권한이 있는지 확인합니다.
구문
BOOL IsBadReadPtr(
[in] const VOID *lp,
[in] UINT_PTR ucb
);
매개 변수
[in] lp
메모리 블록의 첫 번째 바이트에 대한 포인터입니다.
[in] ucb
메모리 블록의 크기(바이트)입니다. 이 매개 변수가 0이면 반환 값은 0입니다.
반환 값
호출 프로세스에서 지정된 메모리 범위의 모든 바이트에 대한 읽기 권한이 있는 경우 반환 값은 0입니다.
호출 프로세스에 지정된 메모리 범위의 모든 바이트에 대한 읽기 권한이 없는 경우 반환 값은 0이 아닙니다.
애플리케이션이 디버깅 버전으로 컴파일되고 프로세스에 지정된 메모리 범위의 모든 바이트에 대한 읽기 권한이 없는 경우 함수는 어설션을 발생시키고 디버거에 침입합니다. 디버거를 벗어나면 함수는 평소와 같이 계속되며 0이 아닌 값을 반환합니다. 이 동작은 디버깅 보조 기능으로 의도적으로 수행됩니다.
설명
이 함수는 일반적으로 타사 DLL에서 메모리 관리 동작을 확인할 수 없는 타사 라이브러리에서 반환된 포인터로 작업할 때 사용됩니다.
프로세스의 스레드는 다른 스레드가 필요로 하는 메모리를 해제하지 않는 방식으로 협력해야 합니다. 이 함수를 사용하면 이 작업을 수행할 필요가 없습니다. 이 작업을 수행하지 않으면 애플리케이션이 예측할 수 없는 방식으로 실패할 수 있습니다.
잠재적으로 잘못된 포인터를 역참조하면 다른 스레드에서 스택 확장을 사용하지 않도록 설정할 수 있습니다. 스택 확장을 사용하지 않도록 설정된 경우 스택을 소모하는 스레드는 팝업 오류 창이나 진단 정보 없이 부모 프로세스가 즉시 종료됩니다.
호출 프로세스에서 지정된 메모리 범위의 바이트 중 일부(전부는 아님)에 대한 읽기 권한이 있는 경우 반환 값은 0이 아닙니다.
선점 멀티태스킹 환경에서 다른 스레드가 테스트 중인 메모리에 대한 프로세스의 액세스를 변경할 수 있습니다. 함수가 프로세스에 지정된 메모리에 대한 읽기 권한이 있음을 나타내는 경우에도 메모리에 액세스하려고 할 때 구조적 예외 처리를 사용해야 합니다. 구조적 예외 처리를 사용하면 시스템에서 액세스 위반 예외가 발생하는 경우 프로세스에 알릴 수 있으므로 프로세스에서 예외를 처리할 수 있습니다.
요구 사항
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winbase.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |