Laufwerksbuchstabe bei WM_Devicechange
-
In meinem service empfange ich SERVICE_CONTROL_DEVICEEVENT Messages. Nun will ich, bei einem neuen Volume den Laufwerksbuchstaben angeziegt bekommen.
Wenn ich nun probiere unitmask auszulesen, bekomme ich im service ein anderen Laufwerksbuchtaben als wenn ich da ganze mit einer normalen Win32 anwendungs mit fenster mache.
Service:case SERVICE_CONTROL_DEVICEEVENT: if(dwEventType == DBT_DEVICEARRIVAL) { if(((PDEV_BROADCAST_HDR)lpEventData)->dbch_devicetype==DBT_DEVTYP_DEVICEINTERFACE) { Beep(1000,500); PDEV_BROADCAST_VOLUME pDb = (PDEV_BROADCAST_VOLUME)lpEventData; cDrive = FirstDriveFromMask(pDb->dbcv_unitmask); MessageBox(NULL, ((AnsiString)cDrive).c_str(), "Laufwerksbuchstabe", MB_SERVICE_NOTIFICATION); } } break;Win32:
case DBT_DEVICEARRIVAL: Form1->ListBox2->AddItem("DBT_DEVICEARRIVAL",Form1); pDB = (PDEV_BROADCAST_VOLUME)Msg.LParam; cDrive = FirstDriveFromMask(pDB->dbcv_unitmask); Label2->Caption = cDrive; Label4->Caption = (int)cDrive; Label5->Caption = (int)((PDEV_BROADCAST_VOLUME)Msg.LParam); path = cDrive; Label6->Caption = path; break;Zudem bekomme ich z.B. wenn ich einen USB Stick einstecke 3 messages. Davon enthält nur die letzte den richtigen Laufwerksbuchstaben. Diese Message mit dem richtigen Laufwerksbuchstaben kommt aber anscheinend nicht beim service an.
Weiß zu dem Thema jemand etwas?
MFG
Ace
-
*push*
Warum bekomme ich in meinem Dienst einen anderen laufwerksbuchstaben raus als bei meiner Win32 anwendung?
-
AceKiller73 schrieb:
Zudem bekomme ich z.B. wenn ich einen USB Stick einstecke 3 messages.
Hi Ace!
Lass mich raten: DBT_MEDIAREMOVAL,DBT_DEVICEARRIVAL,DBT_MEDIAARRIVAL?
(Wenn's die alls überhaupt gibt)Mir fällt zur Unterscheidung zwischen Service/UserApp noch ein dass User sich ja eigene Mappings festlegen können (z.B. "net use"), vielleicht hat's damit zu tun?
Grüsse
*this
-
Falls du in dem Programm schon an den Namen des Volumes gekommen bist, könntest du mit "GetVolumePathNamesForVolumeName" alle zugeordneten Pfade ermitteln. Unter NTFS bzw. Win2000/WinXP kannst du einen USB-Stick ja als Ordner innerhalb einer anderen Partition mounten, so dass eventuell gar kein Laufwerksbuchstabe existiert.
Die mehrfachen Messages sind mir auch schon aufgefallen. Ich vermute, dass die Messages einmal für das Device (den Stick selbst), als auch für das Erscheinen des Volumes sowie des Laufwerks bzw. Pfads jeweils gesendet werden. Dies würde auch erklären, warum erst beim 3. Mal ein Laufwerk enthalten ist. Wenn man einen USB Stick einsteckt, blendet im SysTray das Icon für die sichere Hardwareentfernung auch 3x auf und der Balloon Tooltip wechselt mehrfach. Wenn man sich dann dort die Gerätekomponenten anzeigen lässt (Checkbox), sieht man auch 3 Einträge:
+ USB-Massenspeichergerät
|- Name des Sticks
|- Zugeordnete Volume(s)Eventuell hilft dir auch noch dieser Beitrag weiter:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-178153.html