이 글을 3줄로 요약하면
· 코드 31의 내부 이름은 CM_PROB_FAILED_ADD입니다. 장치가 아니라 드라이버가 붙는 단계에서 실패한 상태입니다.
· 장치 종류와 무관하게 같은 코드가 뜹니다. 랜카드든 그래픽카드든 원인 갈래는 동일합니다.
· 원인은 네 갈래입니다. 판별표에서 자기 상황을 찾아 해당 섹션부터 처리하면 됩니다.
코드 31은 정확히 무슨 뜻인가
장치가 고장 났다는 뜻이 아닙니다. 실패한 지점이 어디인지 먼저 정리합니다.
장치 관리자에 표시되는 문구는 "이 장치가 제대로 작동하지 않습니다. Windows에서 이 장치에 필요한 드라이버를 로드할 수 없기 때문입니다. (코드 31)"입니다. Microsoft 드라이버 문서는 이 코드의 내부 이름을 CM_PROB_FAILED_ADD로 정의합니다.
문서가 밝히는 원인은 한 줄입니다. 그 장치를 담당하는 함수 드라이버가 AddDevice 루틴에서 오류를 돌려줬다는 것입니다. 쉽게 옮기면, 윈도우가 "이 장치를 네가 맡아라"라고 드라이버를 불렀는데 드라이버가 그 요청을 처리하지 못하고 실패를 반환한 상태입니다.
그래서 코드 31은 하드웨어 고장 코드가 아닙니다. 장치는 인식됐고 자리도 잡혔는데, 그 자리에 올라갈 소프트웨어가 제 역할을 못 한 상태입니다. Microsoft 문서가 제시하는 권장 조치도 "장치 드라이버를 업데이트한다" 한 가지입니다.
이 코드는 장치 종류를 가리지 않습니다. 네트워크 어댑터에서 나면 인터넷이 끊기고, 디스플레이 어댑터에서 나면 화면이 기본 해상도로 떨어지고, 사운드 장치에서 나면 소리가 나오지 않습니다. 증상은 달라 보여도 드라이버가 붙지 못했다는 사실은 같습니다.
랜선·공유기부터 바꾸면 시간을 버립니다
네트워크 어댑터에서 코드 31이 났다면 문제는 회선이 아니라 PC 안에 있습니다. 다른 기기가 같은 공유기에서 정상이라면 바깥 장비를 손대는 단계는 건너뜁니다.
시작하기 전에 두 가지를 적어 둡니다. 어느 분류의 어떤 장치인지, 그리고 언제부터 그랬는지입니다. 두 번째 정보가 아래 판별표에서 원인을 가르는 기준이 됩니다.
증상으로 원인 좁히기
같은 코드라도 언제·몇 개 장치에서 났는지에 따라 손댈 곳이 달라집니다.
| 증상 | 유력한 원인 | 먼저 볼 항목 |
|---|---|---|
| 장치 하나만 문제이고 언제부터인지 특정하기 어렵다 | 드라이버 파일 손상·부적합 | 원인 A → 제거 후 재설치 |
| 윈도우 업데이트나 드라이버 설치 직후부터 그렇다 | 최근 변경이 원인 | 원인 B → 롤백·복원 |
| 드라이버를 몇 번 다시 깔아도 그대로다 | 필터 드라이버 잔재 | 원인 C → 필터값 확인 |
| 백신·가상 드라이브·이미징 프로그램을 지운 뒤부터 그렇다 | 제거된 프로그램의 필터가 남음 | 원인 C → 필터값 확인 |
| 여러 분류의 장치에서 동시에 같은 코드가 뜬다 | 시스템 파일·구성 요소 손상 | 원인 D → sfc·DISM |
| 어떤 드라이버를 받아야 하는지부터 모르겠다 | 장치 식별이 안 된 상태 | 진단 → 하드웨어 ID 확인 |
해당하는 줄이 여러 개면 D → C → B → A 순으로 확인 범위를 좁힙니다. 여러 장치가 동시에 문제인데 한 장치의 드라이버만 다시 까는 것은 순서가 뒤바뀐 조치입니다.
인터넷이 끊긴 상태라면 준비부터
문제 장치가 랜카드·무선 어댑터라면 드라이버를 받을 방법이 없습니다. 스마트폰 USB 테더링으로 임시 연결을 만들거나, 다른 PC에서 드라이버를 받아 USB로 옮겨 둔 뒤 시작하는 편이 빠릅니다.
원인 A드라이버 파일이 손상됐거나 맞지 않는다
Microsoft 문서가 이 코드에 제시하는 기본 조치가 바로 이 갈래입니다.
드라이버 파일 일부가 깨졌거나, 그 장치용이 아닌 버전이 올라가 있으면 AddDevice 단계에서 실패가 반환됩니다. 이때는 지금 올라가 있는 드라이버를 지우고 정상 버전을 새로 올리는 것이 정공법입니다.
1한 번은 재부팅으로 걸러 본다
절전 해제 직후나 장치를 뽑았다 꽂은 직후에 일시적으로 로드가 실패했다면 재부팅만으로 정상으로 돌아옵니다. 여기서 풀리면 아래 단계는 필요 없습니다.
2드라이버까지 지우고 장치를 다시 잡게 한다
Win + R → devmgmt.msc → 해당 장치 우클릭 → 디바이스 제거. 창에 "이 장치의 드라이버 소프트웨어를 삭제합니다" 체크박스가 있으면 체크합니다. 체크하지 않으면 문제가 있는 그 파일이 그대로 다시 올라갑니다.
3하드웨어를 다시 검색시킨다
장치 관리자 상단 동작 → 하드웨어 변경 사항 검색과 같은 일을 하는 명령입니다. 재부팅해도 결과는 같습니다.
4그래도 남으면 제조사 정식 드라이버로 덮는다
장치 우클릭 → 드라이버 업데이트 → 내 컴퓨터에서 드라이버 찾아보기로 내려받은 파일을 지정합니다. 제조사 설치 프로그램에 기존 드라이버 삭제 후 설치 옵션이 있으면 그쪽이 더 깔끔합니다.
드라이버는 공식 출처에서만 받습니다
검색 결과 상단의 "드라이버 자동 설치" 사이트들은 서명되지 않은 파일을 섞어 주는 경우가 있습니다. 칩셋 제조사 또는 PC·노트북 제조사의 지원 페이지에서 모델명으로 받습니다.
이 방법이 안 통하는 경우
제거·재설치를 두세 번 반복해도 결과가 같다면 드라이버 파일 문제가 아닙니다. 로드 자체를 막는 무언가가 남아 있다는 뜻이므로 원인 C의 필터값 확인으로 넘어갑니다.
원인 B최근 업데이트나 드라이버 교체 직후 생겼다
"어제까지 멀쩡했다"면 새 드라이버를 찾기 전에 되돌리는 쪽이 빠릅니다.
윈도우 업데이트가 드라이버를 함께 갈아 끼우는 경우가 있습니다. 새 버전이 그 하드웨어 리비전과 맞지 않으면 그 시점부터 코드 31이 나타납니다. 이때는 직전 버전으로 되돌리는 것이 가장 확실합니다.
1이전 드라이버 버튼이 살아 있는지 본다
장치 우클릭 → 속성 → 상단 드라이버 탭에서 이전 드라이버 버튼을 확인합니다. 눌리는 상태면 직전 버전이 보관돼 있다는 뜻이라 한 번의 클릭으로 되돌아갑니다.
2버튼이 비활성이면 보관본이 없는 것이다
회색으로 눌리지 않으면 되돌릴 이전 버전이 남아 있지 않습니다. 이 경우 제조사 지원 페이지에서 이전 버전 드라이버를 직접 받아 설치하는 방법으로 대신합니다.
3변경 시점 이전으로 시스템을 되돌린다
Win + R에 입력해 시스템 복원을 엽니다. 다른 복원 지점 선택을 눌러 문제 발생 이전 날짜를 고릅니다. 복원 지점이 하나도 없으면 시스템 보호가 꺼져 있는 상태입니다.
4같은 드라이버가 다시 깔리지 않게 막는다
되돌린 뒤 윈도우 업데이트가 같은 버전을 또 설치하면 증상도 함께 돌아옵니다. 설정 → Windows 업데이트 → 고급 옵션 → 선택적 업데이트에서 그 드라이버 항목을 자동으로 설치하지 않도록 두는 편이 안전합니다.
이 방법이 안 통하는 경우
롤백하거나 복원한 직후에도 같은 코드가 그대로면, 최근 변경은 계기였을 뿐 원인이 아닙니다. 드라이버가 올라가는 경로 자체를 막는 것이 있는지 원인 C에서 확인합니다.
원인 C필터 드라이버 잔재가 로드를 막는다
재설치를 아무리 반복해도 그대로일 때 확인해야 하는 갈래입니다.
윈도우는 장치 분류마다 필터 드라이버를 끼워 넣을 수 있습니다. 백신, 가상 드라이브, 디스크 이미징, VPN 같은 프로그램이 자기 필터를 등록하는데, 프로그램을 지워도 레지스트리의 등록 항목만 남는 경우가 있습니다.
남은 항목은 존재하지 않는 파일을 가리킵니다. 그러면 장치를 붙이는 과정에서 그 파일을 불러오려다 실패하고, 결과적으로 정상 드라이버까지 올라가지 못합니다. 재설치가 소용없는 이유가 여기에 있습니다.
시작 전에 반드시 백업합니다
레지스트리 편집기에서 해당 키를 선택하고 파일 → 내보내기로 저장해 둡니다. 문제가 생기면 저장한 .reg 파일을 더블클릭해 원래대로 되돌릴 수 있습니다.
1장치의 클래스 GUID를 복사한다
장치 우클릭 → 속성 → 상단 자세히 탭 → 속성 드롭다운에서 클래스 Guid 선택. 아래 값 칸을 우클릭해 복사합니다. 예를 들어 네트워크 어댑터는 {4d36e972-e325-11ce-bfc1-08002be10318} 형태입니다.
2레지스트리에서 그 클래스 키를 연다
Win + R → regedit → 상단 주소창에 위 경로를 붙여 넣고 Enter를 누릅니다.
3UpperFilters·LowerFilters만 삭제한다
오른쪽 목록에 UpperFilters 또는 LowerFilters가 보이면 우클릭해 삭제합니다. 둘 다 있으면 둘 다 지웁니다. 이 두 이름 외에는 아무것도 건드리지 않습니다. 삭제 후 재부팅합니다.
4항목이 없으면 이 원인이 아니다
두 이름이 아예 보이지 않는다면 필터 잔재는 원인이 아닙니다. 없는 값을 새로 만들지 않습니다. 원인 B의 롤백이나 원인 D의 시스템 점검으로 넘어갑니다.
지운 뒤에 그 장치의 기능 하나가 빠질 수 있습니다
필터를 등록했던 프로그램을 아직 쓰고 있다면, 삭제 후 그 프로그램의 일부 기능이 동작하지 않을 수 있습니다. 장치가 정상으로 돌아온 것을 확인한 뒤 그 프로그램을 최신 버전으로 다시 설치하면 필터가 정상 상태로 재등록됩니다.
이 방법이 안 통하는 경우
필터값을 지우고 재부팅했는데도 같은 코드가 뜬다면, 그 장치 하나의 문제가 아닐 수 있습니다. 장치 관리자에서 다른 분류에도 같은 코드가 있는지 확인하고 원인 D로 넘어갑니다.
원인 D여러 장치에서 동시에 난다
장치별 조치가 아니라 윈도우 자체를 점검해야 하는 상태입니다.
서로 관련 없는 분류의 장치들이 한꺼번에 코드 31을 낸다면, 각 드라이버가 동시에 망가졌다고 보기 어렵습니다. 드라이버를 설치하고 등록하는 윈도우 쪽 구성 요소가 손상됐을 가능성이 높습니다.
1시스템 파일을 검사한다
시작 버튼을 우클릭해 터미널(관리자)로 연 뒤 실행합니다. "확인 100% 완료"와 함께 나오는 결과 문구를 그대로 읽습니다.
2복구할 원본을 먼저 되살린다
sfc가 "일부를 복구할 수 없습니다"로 끝났다면 이 명령을 먼저 돌린 뒤 sfc를 한 번 더 실행합니다. sfc는 구성 요소 저장소의 정상 파일을 원본으로 삼기 때문입니다.
3남아 있는 유령 장치를 정리한다
설치된 드라이버 패키지 목록을 보여 줍니다. 같은 장치용 패키지가 여러 버전 겹쳐 있으면 그중 하나가 우선 적용되며 충돌을 일으킬 수 있습니다. 지울 때는 pnputil /delete-driver oem##.inf 형태로 하나씩 처리합니다.
한 번에 여러 개를 지우지 않습니다
드라이버 패키지를 여러 개 한꺼번에 삭제하면 어떤 조치가 효과를 냈는지 알 수 없고, 정상 장치까지 인식이 풀릴 수 있습니다. 하나 지우고 확인을 반복합니다.
이 방법이 안 통하는 경우
sfc와 DISM이 모두 정상으로 끝났는데 여러 장치에서 코드가 그대로라면, 개인 파일과 앱을 유지하는 제자리 복구 설치가 남은 선택지입니다. 반대로 딱 한 장치만 계속 문제라면 다른 포트나 다른 PC에 물려 하드웨어 자체를 교차 확인합니다.
맞는 드라이버를 정확히 찾아내는 법
모델명 대신 하드웨어 ID로 찾으면 엉뚱한 드라이버를 받는 일이 없어집니다.
같은 제품명이라도 내부 칩셋이 다른 경우가 흔합니다. 그래서 제품 상자에 적힌 이름으로 검색하면 다른 칩셋용 드라이버를 받게 되고, 설치해도 코드 31이 그대로 남습니다. 윈도우가 장치를 식별할 때 쓰는 값을 직접 보는 편이 정확합니다.
1하드웨어 ID를 확인한다
장치 우클릭 → 속성 → 자세히 탭 → 속성 드롭다운에서 하드웨어 ID 선택. 값 목록의 첫 줄을 복사합니다.
2VEN과 DEV 값을 읽는다
PCI\VEN_8086&DEV_15F3처럼 생긴 문자열에서 VEN_ 뒤는 제조사, DEV_ 뒤는 장치 모델을 뜻합니다. USB 장치는 USB\VID_…&PID_… 형태입니다.
3그 값으로 실제 칩셋을 확인한다
복사한 문자열을 검색하면 어느 회사의 어떤 칩인지 나옵니다. 그 칩셋 제조사의 공식 지원 페이지에서 드라이버를 받습니다. 노트북이라면 칩셋 제조사판보다 노트북 제조사가 검증한 버전이 더 안정적인 경우가 많습니다.
4설치 시각 전후의 시스템 로그를 함께 본다
Windows 로그 → 시스템에서 드라이버를 설치한 시각 근처의 오류 항목을 봅니다. 어떤 서비스나 드라이버가 시작에 실패했는지 원본(Source) 이름이 남습니다.
조치를 하나 할 때마다 시각과 내용을 적어 둡니다. 드라이버 교체·필터값 삭제·시스템 복원을 한꺼번에 하면, 증상이 사라져도 무엇이 효과를 냈는지 알 수 없어 재발했을 때 처음부터 다시 시작하게 됩니다.
자주 묻는 질문
이 오류를 처리할 때 판단이 갈리는 지점만 모았습니다.
Q.레지스트리에 UpperFilters 항목이 아예 없습니다.
A.그러면 필터 잔재가 원인이 아닙니다. 없는 값을 새로 만들지 않습니다. 원인 A의 재설치나 원인 B의 롤백으로 방향을 바꿉니다.
Q.클래스 GUID 폴더가 여러 개라 어디로 들어가야 할지 모르겠습니다.
A.장치 속성 자세히 탭에서 클래스 Guid를 선택하면 그 장치의 값이 정확히 나옵니다. 그 값과 같은 이름의 폴더 하나만 열면 됩니다. 비슷해 보이는 다른 GUID 폴더는 다른 장치 분류입니다.
Q.드라이버를 지웠는데 재부팅해도 자동 설치가 안 됩니다.
A.인터넷이 끊긴 상태에서는 윈도우가 드라이버를 받아올 수 없습니다. 문제 장치가 랜카드라면 특히 그렇습니다. 다른 기기로 제조사 드라이버를 미리 받아 USB로 옮긴 뒤 드라이버 업데이트 → 내 컴퓨터에서 찾아보기로 수동 설치합니다.
Q.코드 31이면 장치가 고장 난 건가요?
A.대체로 아닙니다. Microsoft 문서는 이 코드를 드라이버가 AddDevice 단계에서 오류를 반환한 상태로 정의합니다. 다만 소프트웨어 조치를 다 거쳐도 그대로면 하드웨어 쪽 가능성이 남으므로, 다른 포트·다른 PC에서 교차 확인합니다.
Q.같은 장치에서 코드 31과 다른 코드가 번갈아 뜹니다.
A.조치를 하면서 상태가 바뀌는 중이라는 뜻입니다. 예를 들어 드라이버를 지운 직후에는 드라이버가 없다는 코드로 바뀌고, 잘못된 버전을 깔면 다시 31로 돌아옵니다. 지금 보이는 코드를 기준으로 해당 글의 절차를 따릅니다.
Q.드라이버 자동 설치 프로그램을 쓰면 편하지 않나요?
A.그런 도구는 하드웨어 ID를 대충 맞춰 범용 드라이버를 올리는 경우가 있어 같은 코드가 반복될 수 있습니다. 하드웨어 ID를 직접 확인해 공식 페이지에서 받는 쪽이 결과적으로 빠릅니다.
함께 보면 좋은 글
장치 관리자에 다른 번호가 떠 있다면 아래 글에서 코드별로 확인하세요.
장치 관리자 코드 10 오류, "이 장치를 시작할 수 없습니다" 완벽 해결법 드라이버는 올라갔는데 장치가 시작되지 않을 때의 코드입니다 · 눌러서 확인하기 → 코드 43 오류, 그래픽카드·USB 장치가 갑자기 안 잡힐 때 저는 이렇게 해결했습니다 쓰던 중에 갑자기 장치가 중지될 때 함께 봅니다 · 눌러서 확인하기 → 코드 52 드라이버 오류, 저는 이 순서로 해결했습니다 (디지털 서명 확인 실패 완전정리) 서명되지 않은 드라이버를 설치한 뒤 장치가 막혔을 때 봅니다 · 눌러서 확인하기 →참고 문서 · Microsoft Learn — 코드 31 CM_PROB_FAILED_ADD / Microsoft 지원 — Windows 장치 관리자의 오류 코드





