2012-12-14 2 views
4

작은 도구로 USB 장치에서 작업을 기록하고 있습니다. 내 도구는 모든 장치 이벤트를 포착하는 Windows 서비스로 작동하지만 기본적으로 DBT_DEVICEARRIVAL 이벤트를 수신하면 USB 장치를 모니터링하기 시작합니다. 이 후에 모니터를 곧 중지해야합니다 (그렇지 않으면 내 서비스가 장치를 꺼내지 못하게됩니다). DBT_DEVICEQUERYREMOVE이 표시됩니다. 문제는 도구가 여러 장치 수를 모니터링 할 수 있어야하므로 사용자가 어느 장치를 꺼내려고하는지 확인할 수 있어야한다는 것입니다. DBT_DEVICEQUERYREMOVE 이벤트에 DEV_BROADCAST_HANDLE 구조가 있음을 알게되었습니다. 이 구조에서 어떤 장치가 방출되는지 식별 할 수있는 유용한 정보를 추출하려고합니다. 장치에 대한 핸들이 있다는 것을 알았습니다. 시스템 함수 GetFinalPathNameByHandle을 사용하여 드라이브 문자를 추출하려고했지만 제대로 작동하지 않습니다 (빈 값 반환). 어떻게하면됩니까?C의 장치 핸들에서 드라이브 문자 가져 오기

대단히 감사합니다!

+0

@MSalters 제 질문은 귀하의 의견에 명시된 질문에 포함되지 않은 특정 질문입니다. 어떤 아이디어? –

답변

1

대답이 내가 생각한 것보다 덜 분명한 것 같습니다. 관심있는 각 장치에 대해 RegisterDeviceNotification으로 전화하여 핸들로 장치를 식별하십시오. 등록을 만들면 어느 드라이브 문자가 어떤 알림 핸들에 매핑되는지 알 수 있습니다.

+0

[pinvoke] (http://pinvoke.net/default.aspx/user32/RegisterDeviceNotification.html)를 통해이 기능을 사용하고 계신지요? – Default

+0

@Default : 다른 방법은 없다고 생각합니다. Windows의 기본 API는 C 기반입니다. – MSalters