혼합 권장 규칙 규칙 집합
Microsoft 혼합을 권장 규칙 잠재적인 보안 허점을, 응용 프로그램 충돌 및 다른 중요 한 논리 및 설계 오류를 포함 하 여 공용 언어 런타임을 지 원하는 C++ 프로젝트에서는 가장 일반적이 고 중요 한 문제에 중점을 둡니다.공용 언어 런타임에서 지 원하는 C++ 프로젝트를 만드는 사용자 정의 규칙 집합을 설정 합니다.이 규칙을 포함 해야 합니다.이 규칙 집합 Visual Studio Professional edition 및 더 높은 구성 하도록 설계 되었습니다.
규칙 |
설명 |
---|---|
초기화 되지 않은 메모리를 사용 하 여 |
|
Null 포인터를 역참조 함 |
|
검사 되지 않은 값은 사용할 수 |
|
반환 값이 무시 |
|
0에서 호출 종료 |
|
종료 없음 0 |
|
잘못 된 연결 |
|
Format 함수 문자열 인수가 없습니다. |
|
Format 함수에 정수 인수가 없습니다. |
|
Format 함수 포인터 인수가 없습니다. |
|
문자열 형식 함수 포인터 인수가 없습니다. |
|
초기화 되지 않은 메모리를 반환합니다. |
|
인덱스 버퍼 최대값을 초과 했습니다. |
|
인덱스 스택 버퍼 최대값을 초과 했습니다. |
|
잘못 된 HRESULT BOOL로 캐스팅 |
|
잘못 된 캐스팅 HRESULT BOOL |
|
잘못 된 HRESULT BOOL 컴파일러 삽입 캐스팅 |
|
NOT과 잘못 된 HRESULT 테스트 |
|
잘못 된 HRESULT 비교-1 |
|
잘못 된 HRESULT 배정-1 |
|
HRESULT 부울 값으로 잘못 사용 |
|
0이 아닌 상수에 논리-나 |
|
논리적으로 또는 0이 아닌 상수입니다. |
|
논리 0-부작용을 상실 하 고 |
|
강제로 로컬 해제 |
|
만들기 Null DACL |
|
릴리스되지 않은 주소 설명자 |
|
보호 되지 않은 Alloca 사용 |
|
사용 하 여 스레드를 종료 |
|
죽은 비트 코드-또는 제한 스위치 |
|
사용 하는 바이트 산술 연산 |
|
과도 한 스택 사용 |
|
루프에서 Alloca를 사용 하 여 |
|
캐스트에서 누락 된 괄호 |
|
포인터 역참조 무시 |
|
Format 함수에 Float 인수가 없습니다. |
|
불필요 한 인수 형식 함수 |
|
Format 함수에 Float 되지 않은 인수 |
|
Format 함수에 정수가 아닌 것 |
|
문자가 아닌 인수 형식 함수 |
|
잘못 된 문자열 캐스팅 |
|
잘못 된 오류가 호출 |
|
새 배열 스칼라 Delete 일치 하지 않습니다. |
|
새 스칼라 배열 Delete 일치 하지 않습니다. |
|
메모리 할당 할당 취소 일치 하지 않습니다. |
|
관계 우선 순위 비트 |
|
배정 테스트를 대체합니다. |
|
기본 배열의 새 스칼라 Delete 불일치 |
|
잘못 된 개체 인수 형식 함수 |
|
논리-또는 상수 |
|
0이 아닌 논리적으로 나 부작용의 손실 |
|
예비 테스트 |
|
논리로 상호 포함-및 False입니다 |
|
상호 배제를 통해 논리적으로 나 마찬가지입니다 |
|
비트 논리 부정-및 우선 순위 |
|
비트 논리 부정-또는 우선 순위 |
|
루프에서 최대 개수 |
|
루프 최소부터 아래로 계산 |
|
루프 본문이 실행 되지 않습니다 |
|
무한 루프 |
|
한 번만 실행 되는 루프 |
|
결과 shift 키를 더 큰 크기를 캐스팅 |
|
비트 필드를 부울 비교 |
|
Format 함수에 잘못 된 문자 문자열 인수 |
|
Format 함수에 잘못 된 와이드 문자 문자열 인수 |
|
일치 하지 않는 크기 및 개수 사용 |
|
잘못 된 가변 인수 함수 호출 |
|
Realloc 누수 |
|
예외 필터 상수가 잘못 되었습니다. |
|
예외 실행 루프 계속 |
|
비트-또는 우선 순위 |
|
보수 하지 않습니다 |
|
예외 계속 검색 |
|
쉼표를 무시합니다. |
|
문자열 비교 대신 문자열 복사 |
|
잠재 인수 형식이 일치 하지 않습니다 |
|
VirtualFree 잘못 된 플래그 |
|
VirtualFree 잘못 된 매개 변수 |
|
VirtualFree 잘못 된 크기 |
|
프로세스 핸들 누수 |
|
시스템 종료 정보를 누락 되었습니다. |
|
요소 수가 바이트-버퍼 오버런 수 |
|
포인터 크기 구분 |
|
읽기 오버런 |
|
쓰기 오버런 |
|
잘못 된 매개 변수 값 |
|
잘못 된 매개 변수 값 |
|
잘못 된 특성 속성 |
|
충돌 하는 특성 속성 값 |
|
참조는 Null 일 수 없습니다. |
|
Null 포인터 기능을 |
|
MustCheck Void에 |
|
버퍼 크기가 아닌 포인터 또는 배열 |
|
역참조 0에서 null 일치 하지 않습니다. |
|
상수를 쓰기 액세스 |
|
전제 조건에 사용 되는 반환 |
|
Null이 아닌 포인터를 종료 합니다. |
|
MustCheck 같아야 합니다 예 또는 아니요 |
|
버퍼 크기를 없이 요소 크기 |
|
배열 크기가 버퍼 크기를 초과합니다. |
|
포인터가 아닌 버퍼 크기 |
|
특성에 속성이 없는 |
|
올바른 크기의 버퍼를 읽을 수 없는 |
|
쓸 쓸 버퍼 크기 |
|
주석이 잘못 되었습니다. 'NeedsRelease' 속성의 값은 Yes 또는 No |
|
잘못 된 크기의 문자열을 역참조 |
|
크기 문자열 형식이 잘못 되었습니다. |
|
잘못 된 크기의 문자열 매개 변수 |
|
잘못 된 크기 문자열 위치에 연결할 수 없음 |
|
잘못 된 크기 문자열 버퍼 형식입니다. |
|
주석이 잘못 되었습니다. 'NeedsRelease' 속성이 void 형식의 값에 사용할 수 없습니다 |
|
인식할 수 없는 형식 문자열 스타일입니다. |
|
이 함수에 특성 주석 사용 하는 모든 해당 기존 __declspec 주석이 무효화 됩니다. |
|
크기 사양이 잘못 되었습니다: 식을 구문 분석할 수 없습니다 |
|
잘못 된 Deref = 또는 Notref =: 식을 구문 분석할 수 없습니다 |
|
값이 유효한 예/아니오/아마 값이 되었습니다. |
|
값은 문자열 값이 아닙니다. |
|
값에 숫자가 아닙니다. |
|
주석 오류 식 |
|
주석에 대 한 인수의 실제 수가 예상 되는 수의 주석 인수 맞지 않습니다. |
|
주석 오류에 대 한 주석 |
|
XML 로그 파일을 저장할 수 없습니다. |
|
경쟁 조건 |
|
연동된 작업 제대로 사용 실패 |
|
호출자가 잠금을 유지 하는 데 실패 |
|
호출자가 잠금을 해제 하지 못했습니다. |
|
호출자는 잠금을 유지 수 없습니다. |
|
잠금 해제 실패 |
|
취득 하거나 잠금을 보유 하도록 실패 |
|
Unheld 잠금을 해제 |
|
SAL 주석이 동시성 오류 |
|
식에이 호출 그렇지 않습니다. |
|
주석이 있는 매개 변수에 대 한 포인터 이어야 합니다. |
|
이 함수에는 함수 클래스 함수 클래스 정의에 사용 되는 형식 정의에서 일치 하지 않습니다. |
|
할당 되거나 전달 되는 함수는 _Function_class_ 주석 클래스 중 하나에 대 한 있어야 합니다. |
|
함수 포인터를 할당 하 고 함수 클래스 목록에 포함 되어 있지 않습니다 함수 클래스, 주석 처리 됩니다. |
|
실제 매개 변수의 형식과 정확히 일치 해야 합니다. |
|
Interlocked 함수를 통해 액세스할 수 있는 변수는 항상 Interlocked 함수를 통해 액세스 되어야 합니다. |
|
지역 변수는 Interlocked 함수를 통해 액세스합니다. |
|
함수를 호출할 수 있어야를 try / 블록을 제외한 |
|
가변 인수 대신 상수 (리터럴) 이어야 합니다. |
|
인수는 변수 대신 이어야 합니다. |
|
다른 함수를 대신 사용 하십시오. |
|
Error 주석 |
|
함수에서 호출 되지 해야를 try / 블록을 제외한 |
|
인수 (않는 포인터 포인터) 개체에 대 한 포인터를 필요로 하는 함수에 전달 되 고 |
|
NULL 포인터를 역참조 합니다.포인터가 다른 포인터와 같이 NULL 값을 포함 합니다. |
|
인수 값을 수 있습니다 및 포인터에서 값의 복사본을 찾을 수합니다 |
|
검사 해야 하는 값을 변수에 포함 |
|
요구 사항이 충족 되지 않습니다.(식이 true로 계산 되지 않습니다.) |
|
비정적 멤버에 대 한 잘못 된 참조 |
|
클래스 멤버에 대 한 모호한 참조입니다. |
|
_Success_ 또는 _on_failure_가 잘못 된 컨텍스트에 사용 되는 |
|
구조체를 왼쪽 피연산자가 포인트 '->' |
|
왼쪽된 피연산자가 구조체, 사용 '.' |
|
기호에 대 한 선언에 충돌 하는 선언이 있습니다. |
|
주석 __on_failure 컨텍스트에 대해 명시적인 사전 컨텍스트에서 수 없습니다. |
|
정적 컨텍스트 이름이 sal_context에 있어야 합니다. |
|
포인터 식에 대 한 주석 필요 합니다. |
|
_Use_decl_annotations_ 주석, 수정 되지 않은 상태로 이전 선언을 참조할 수 사용 해야 합니다. |
|
특성 매개 변수 이름은 p1... 있어야 9 페이지 |
|
Typefix에는 typefix가 매개 변수를 적용할 수 없습니다. |
|
CheckReturn 주석 사후 특정 함수 매개 변수에 대 한 조건에만 적용 됩니다. |
|
함수에 대 한 매개 변수를 주석 파일에서 찾은 일치 하지 |
|
함수 paramteer에 대 한 매개 변수를 주석 파일에서 찾은 일치 하지 |
|
열거형의 멤버에 대 한 주석 매개 변수를 주석으로 필요합니다. |
|
주석에 대 한 주석에 매개 변수에 정수 식이 필요합니다. |
|
문자열 식의 주석에 매개 변수에 필요 합니다. |
|
__yes, __no, 또는 __maybe에 대 한 주석 필요합니다. |
|
토큰/식별자에 대 한 주석에서 찾을 수 없습니다 매개 변수 |
|
주석 매개 변수를 필요로합니다. |
|
필수 매개 변수의 올바른 개수에서 찾을 수 없습니다. |
|
주석 (현재 선언)에 있는 PrimOp 될 수도 수 없습니다. |
|
주석을 PrimOp 수 없습니다 또한 (이전 선언을 참조 하십시오.) |
|
주석 매개 변수: 유형에서 주석을 사용할 수 없습니다 |
|
주석 매개 변수를 지원 하지 않습니다. |
|
매개 변수 형식 멤버가 있습니다. |
|
주석 배열에만 유효 |
|
전, 게시, 또는 deref 주석으로 적용 되지 |
|
전, 게시, 또는 deref 블록에 적용 |
|
식 __at 현재 함수에는 적용 되지 않습니다. |
|
함수를 주석으로 독립 실행형 수 없습니다. |
|
주석에 식에 사용할 수 없습니다. |
|
주석에서 매개 변수를 더 이상 지원 |
|
주석에서 매개 변수 값에 stringValue 및 longValue 하나 이상 있습니다.Paramn 사용 하 여 = xxx |
|
주석에서 매개 변수 값 이나 stringValue, longValue 또는 있습니다. 및 paramn = xxx.Paramn만을 사용 = xxx |
|
주석 매개 변수에 매개 변수 2가 있지만 없음 param1가 |
|
주석은 함수 매개 변수에 대 한 인식할 수 없습니다. |
|
함수 매개 변수를 좀 더에 대해 주석 처리 하는 실제 형식 보다 주석 역참조 |
|
주석 기능에 대해 구문 분석할 수 없는 매개 변수/외부 주석을 했습니다. |
|
주석 기능에 대 한 '이' 비-멤버 함수에 주석을 달아합니다 |
|
매개 변수가 주석 기능에 대 한 매개 변수의 형식이 일치 하지 않습니다. |
|
함수에 대 한 일관성 없는 주석: 이전 인스턴스 오류가 있습니다. |
|
함수에 대해 일관 되지 않은 주석:이 경우에 오류가 발생 했습니다. |
|
함수에 대 한 일관성 없는 주석: 매개 변수에이 인스턴스를 다른 주석 있습니다. |
|
함수에 대 한 일관성 없는 주석: 매개 변수에이 인스턴스를 다른 주석 있습니다. |
|
dynamic_cast < > ()에서 주석은 지원 되지 않습니다. |
|
함수는 주석 주석 내의 구문 오류를 찾을 수 |
|
내장 주석에 대해 조건부 주석에서 구문 오류를 찾을 수 |
|
결과 목록 값은 상수 여야 합니다. |
|
구문 오류는 주석에서 주석 함수를 찾을 수 있습니다. |
|
주석 기능에 대 한 매개 변수를 검사 하는 경우 함수 선언에 일관성이 없습니다. |
|
함수에 대 한 단서 함수 선언과 일치 하지 않습니다. |
|
_Macro_value_ 매개 변수가 null입니다. |
|
기호에 대 한의 '시작'에 일치 하는 '끝 없는' 발견 했습니다 |
|
기호에 대 한 '끝'을 시 키 지 않고 '시작' 찾을 |
|
형식 문자열에서 있어야 합니다. |
|
함수에 대 한 매개 변수를 구문 오류가 발생 했습니다. |
|
함수에 대 한 끝부분에 구문 오류가 발생 했습니다. |
|
구문 오류 _At_() 주석 (알 수 없는 매개 변수 이름)에서 함수에 대 한 |
|
구문 오류 (잘못 된 매개 변수 이름) _At_() 주석에서 함수에 대 한 |
|
함수: ReadableTo 또는 WritableTo 한 매개 변수로 제한-사양 |
|
주석 기능에 대 한 실제 매개 변수 개수 보다 더 많은 외부 참조가 포함 되어 있습니다. |
|
포스트 수준을 deref null/notnull에는 함수에 대 한 의미가 없습니다. |
|
식은 피연산자에 연산자를 호환 되지 않는 형식 |
|
첫 번째 함수 선언에 대 한 주석은 없습니다. |
|
주석에서 여분의 _Deref_ 연산자를 찾을 수 없습니다. |
|
주석에서 모호한 _Deref_ 연산자를 찾을 수 없습니다. |
|
잘못 배치 된 _Notref_ 연산자 토큰에 적용 하는 찾을 수 없습니다. |
|
토큰을 구문 분석 하는 동안 오류가 발견 되었습니다. |
|
매개 변수에서 주석이 퇴행 되 |
|
매개 변수에서 주석이 퇴행 되 |
|
주석 조건적으로 적용할 수 없는 경우를 설명 합니다. |
|
위치 (변수) 동적 값 조건에서 사용할 수 없습니다 주석에 대해 설명 합니다. |
|
삭제 가능한 필드가 있는 형식은 삭제 가능 해야 합니다. |
|
이벤트 처리기를 제대로 선언 하십시오. |
|
AssemblyVersionAttribute 어셈블리 표시 |
|
인터페이스 메서드는 자식 형식에서 호출할 수 있어야 합니다. |
|
네이티브 리소스가 있는 형식은 삭제 가능 해야 합니다. |
|
P/Invoke를 NativeMethods 클래스로 이동 |
|
기본 클래스 메서드를 숨기지 마십시오 |
|
Idisposable을 올바르게 구현 |
|
예기치 않은 위치에서 예외를 발생 시 키 지 마십시오 |
|
중복 된 액셀러레이터를 방지 합니다. |
|
P/Invoke 진입점이 존재 해야 |
|
P/Invoke 볼 수 없습니다. |
|
자동 레이아웃 형식은 COM에서 볼 수 없습니다. |
|
바로 P/Invoke 후 Getlasterror를 호출 합니다. |
|
COM 노출 형식의 기본 형식은 COM 노출 이어야 합니다. |
|
COM 등록 메서드는 일치 해야 합니다. |
|
P/Invoke를 제대로 선언 하십시오. |
|
빈 종료자를 제거 합니다. |
|
값 형식 필드는 이식 가능 해야 합니다. |
|
P/Invoke 선언은 이식 가능 해야 합니다. |
|
약한 id 가진 개체를 잠그지 않음 |
|
SQL 쿼리 보안 문제에 대 한 검토 |
|
P/Invoke 문자열 인수에 대해 마샬링을 지정합니다 |
|
값 형식에서 선언적 보안을 검토 합니다. |
|
포인터가 볼 수 없습니다. |
|
보안된 형식은 필드를 노출 하면 |
|
메서드 보안은 형식의 상위 집합 이어야 합니다. |
|
APTCA 메서드는 APTCA 메서드를 호출 하면 |
|
APTCA 형식은 APTCA 기본 형식을 확장 합니다. |
|
링크 요청이 있는 메서드를 간접적으로 노출 하지 마십시오. |
|
재정의 링크 요청 기반으로 동일 해야 합니다. |
|
랩 공격에 취약 한 finally 절 외부에서 보십시오. |
|
형식 링크 요청 상속 요청이 필요합니다. |
|
중요 한 보안 형식을 형식 등가에 참가할 수 없습니다. |
|
기본 생성자가 기본 형식의 기본 생성자에는 적어도 중요 해야 |
|
대리자 메서드를 일관성 있게 투명 하 게 바인딩해야 합니다. |
|
메서드가 기본 메서드를 재정의 하는 경우 일관 된 투명도 유지 합니다. |
|
투명 한 방법을 확인할 수 있는 IL만 있어야 합니다. |
|
투명 한 방법을 SuppressUnmanagedCodeSecurity 특성을 갖는 메서드를 호출 해야 |
|
중요 한 항목을 보안 투명 코드를 참조 하지 않아야 |
|
Linkdemands가 투명 한 방법 만족 해야 하지 |
|
형식은 해당 기본 형식 및 인터페이스는 적어도 중요 해야 합니다. |
|
보안 투명 메서드 수 어설션 |
|
투명 메서드의 네이티브 코드를 호출 해서는 안 |
|
스택 정보를 유지 하도록 다시 throw 하십시오. |
|
개체는 여러 번 삭제 하지 마십시오. |
|
값 형식의 정적 필드를 인라인으로 초기화 |
|
서비스 되는 구성 요소를 WebMethod 표시 하지 않음 |
|
삭제 가능한 필드는 삭제 해야 합니다. |
|
생성자에 재정의 가능한 메서드를 호출 하지 마십시오. |
|
삭제 가능한 형식은 종료자를 선언 해야 합니다. |
|
종료자는 기본 클래스 종료자 호출 해야 |
|
Serialization 생성자를 구현 합니다. |
|
Valuetype.equals를 재정의에 같음 연산자를 오버 로드 합니다. |
|
표시 Windows Forms 진입점을 STAThread |
|
Serializable 이외의 모든 필드를 표시 합니다. |
|
ISerializable 형식에 기본 클래스 메서드를 호출 합니다. |
|
Serializableattribute로 ISerializable 표시 형식 |
|
Serialization 메서드를 올바르게 구현 |
|
Iserializable을 올바르게 구현 |
|
형식 메서드에 올바른 인수를 제공 합니다. |
|
Nan에 대해 정확 하 게 테스트 |