掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Win7でUSBが外せない (ID:103360)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
動作環境WinXP/Win7,VB2008 USBメモリを自動で取り外すコードを作成しています。 WinXPではうまく行きましたが、Win7ではうまく行きません。 解決策をどなたかご教授お願いします。 取り外すUSBはセキュアUSBメモリです。 処理手順は以下の通りです。 1.SetupDiGetClassDevs()を使って、デバイスを列挙。 2.GetDeviceIDを使ってDeviceIDを取得。 ※Win7の場合DeviceIDが正しく取得できていないようです。 3.DeviceIDがターゲットUSBメモリのDeviceIDと一致したら CM_Request_Device_EjectWを投げて、USBメモリを外す。 コードは以下の通り Dim GUID_DEVINTERFACE_VOLUME As Guid = New Guid(&H53F5630D, &HB6BF, &H11D0, &H94, &HF2, &H0, &HA0, &HC9, &H1E, &HFB, &H8B) Dim hDevInfo As Integer = SetupDiGetClassDevs(GUID_DEVINTERFACE_VOLUME, IntPtr.Zero, 0, DIGCF_PRESENT + DIGCF_DEVICEINTERFACE) If hDevInfo <> INVALID_HANDLE_VALUE Then Dim MemberIndex As Integer = 0 Dim did As New SP_DEVINFO_DATA did.cbSize = Marshal.SizeOf(did) Dim didPtr As IntPtr = Marshal.AllocHGlobal(did.cbSize) Marshal.StructureToPtr(did, didPtr, True) While SetupDiEnumDeviceInfo(hDevInfo, MemberIndex, didPtr) <> 0 Marshal.PtrToStructure(didPtr, did) Dim pDevInst As Integer Dim BusDeviceID As String = "" CM_Get_Parent(pDevInst, did.DevInst, 0) CM_Get_Parent(pDevInst, pDevInst, 0) BusDeviceID = GetDeviceID(pDevInst) ※このときBusDeviceIDの取得値がWinXPとWin7で 違っている WinXP:列挙した中にUSBメモリのID USB\VID_0411&PID_013D\0700078B0CAC1001 が出てくる。 Win7:列挙したIDは全てHTREE\ROOT\0となっている。 If BusDeviceID = "USB\VID_" & VID & "&PID_" & PID & _ "\" & SN Then If CM_Request_Device_EjectW(pDevInst, IntPtr.Zero, _ IntPtr.Zero, 0, 0) = 0 Then Res = 0 Exit While Else Res = 1 Exit While End If End If ・ ・ ・
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.