재부팅할 때까지 Windows 볼륨 장치 감지에 실패했습니다.한번도 실패하지 않은

StackOverflow https://stackoverflow.com/questions/853304

문제

USB 플래시 드라이브의 볼륨 연결을 감지하는 코드가 있습니다.코드는 한동안 매우 잘 작동했지만 최근 동료 엔지니어의 컴퓨터에 오류가 발생하기 시작하여 다시 시작할 때까지 다시 제대로 작동하지 않았습니다.

이 프로젝트는 Qt 4.5.0을 사용하지만 이 질문과 그다지 관련이 없어야 합니다.

다음과 같이 알림을 등록합니다

// Register for device connect notification
DEV_BROADCAST_DEVICEINTERFACE devInt;
ZeroMemory( &devInt, sizeof(devInt) );
devInt.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
devInt.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
devInt.dbcc_classguid = GUID_DEVINTERFACE_VOLUME;

m_hDeviceNotify =
    RegisterDeviceNotification( winId(), &devInt, DEVICE_NOTIFY_WINDOW_HANDLE );   

그런 다음 처리기는 WM_DEVICECHANGE 메시지를 필터링합니다.

if (message->message == WM_DEVICECHANGE)
{
    switch (message->wParam)
    {
    case DBT_DEVICEARRIVAL:
        HandleVolumeArrival( message );
        break;

    case DBT_DEVICEREMOVECOMPLETE:
        HandleVolumeRemoval( message );
        break;

    default:
        break;
    }

    *result = TRUE;
} // end if

그런 다음 도착 메시지 처리기는 메시지를 다음과 같이 처리합니다.

void handlevolumearrival (msg *message) {if (message-> lparam == 0) {qdebug () << "lparam은 장치 도착시 0입니다";반품;} // 종료되는 경우

PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR) message->lParam;
if(pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
    PDEV_BROADCAST_VOLUME pVol = (PDEV_BROADCAST_VOLUME) pHdr;

    // Handling of the volume is performed here
} // end if

} // HandleVolumeArrival 종료

볼륨 유형에 대한 장치 유형을 확인할 때 문제가 발생했습니다.

pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME

실패했을 때 장치 유형은 다음과 같이 보고되었습니다. DBT_DEVTYP_DEVICEINTERFACE.

여러 USB 드라이브를 시도했지만 모두 동일한 문제가 발생했습니다.

전에 이런 것을 본 사람이 있나요?문제의 원인이 무엇인지, 시스템을 다시 시작하면 문제가 사라지는 이유를 알고 계십니까?

도움이 되었습니까?

해결책

내 추측은 당신이 볼 것입니다 DBT_DEVTYP_DEVICEINTERFACE 어쨌든 일반적으로.USB 장치는 자체 설명적입니다.USB 장치에는 각 인터페이스가 장치의 기능인 모든 "인터페이스"가 있을 수 있습니다.내 생각엔 USB를 연결하면 "DBT_DEVTYP_DEVICEINTERFACUSB 장치 드라이버가 해당 USB 인터페이스를 처리할 수 있다고 말할 수 있도록 USB 장치 인터페이스당 E"를 지정합니다.USB 대용량 저장 장치 드라이버용 USB 장치 드라이버가 볼륨을 마운트하여 이 메시지를 처리한 다음 DBT_DEVTYP_VOLUME 메시지.

대용량 저장 장치 인터페이스 드라이버가 올바르게 작동하지 않거나 충돌하여 다음을 처리하지 못하는 것 같습니다. DBT_DEVTYP_DEVICEINTERFACE.많이 보기 시작하지 않는 한 굳이 굳이 감당해야 할 상황은 아닌 것 같아요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top