Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wann wird DBT_DEVNODES_CHANGED gesendet? (https://www.delphipraxis.net/101314-wann-wird-dbt_devnodes_changed-gesendet.html)

Meflin 11. Okt 2007 09:28


Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Moin moin,

wenn man die WM_DEVICECHANGE messages abfängt bekommt man ziemlich oft auch die DBT_DEVNODES_CHANGED message. Steckt man beispielsweise eine Speicherkarte in den Reader, wird (zumindest bei meinem Lappi) erstmal 4x DBT_DEVNODES_CHANGED gesendet, anschließend DBT_DEVICEARRIVAL und dann noch ein mal DBT_DEVNODES_CHANGED, also insgesamt 6 messages für ein und dasselbe Device.

Nungut, MSDN spricht sich dazu so aus:
Zitat:

The system broadcasts the DBT_DEVNODES_CHANGED device event when a device has been added to or removed from the system. Applications that maintain lists of devices in the system should refresh their lists.
Na gut - aber warum bekomme ich dann 5x DBT_DEVNODES_CHANGED, es wird ja nur einmal ein Device "geaddet".

Des Weiteren habe ich meinen Device-Monitor einfach mal ein Weilchen laufen lassen, und ich bekomme immer wieder die message DBT_DEVNODES_CHANGED ohne dass irgendein Laufwerk/Datenträger/sonstige Hardware hinzugefügt oder entfernt worden wäre.

Die Spannende Frage ist also: Was genau verbirgt sich hinter DBT_DEVNODES_CHANGED?


RWarnecke 11. Okt 2007 09:42

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Viellleicht hilft Dir ja das PDF-Dokument aus diesem Beitrag weiter.

Meflin 11. Okt 2007 09:46

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Zitat:

Zitat von RWarnecke
Viellleicht hilft Dir ja das PDF-Dokument aus diesem Beitrag weiter.

Leider Nein - in diesem Artikel werden nur DBT_DEVICEARRIVAL und co erwähnt, dass auch DBT_DEVNODES_CHANGED gesendet wird wird da nichtmal erwähnt :(


Meflin 11. Okt 2007 15:53

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe meinen Device Monitor mal den Tag über laufen lassen, ca. von 9 bis 17 Uhr, also 8 Stunden. In dieser Zeit wurde insgesamt 32 mal die DBT_DEVNODES_CHANGE message gesendet, ohne erkennbaren zusammenhang.

An den Devices wurde aber nicht wirklich etwas verändert. Anbei noch ein Screenshot...

Anmerkung: eigentlich ist die Frage nicht wirklich wichtig, weil man die message nicht unbedingt braucht, um mitzubekommen, wann ein Device hinzugefügt wird. Aber mich würde es einfach interessieren...


Robert Marquardt 11. Okt 2007 16:47

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Die Geraete bei Windows sind in einem Baum organisiert. Jedesmal wenn sich die Baumstruktur aendert wird DBT_DEVNODES_CHANGED gesendet. Den Baum kann man mit dem Config Manager API zugreifen. Die meisten Funktionen sind aber undokumentiert, da Microsoft will das man das darueberliegende Setup API verwendet.
Ein Knoten im Baum entspricht einem Treiber. Eine Speicherkarte in einem Reader hat gleich einen Treiberstack. Da kommen schnell mehrere Messages zusammen.

Meflin 11. Okt 2007 16:53

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Zitat:

Zitat von Robert Marquardt
Die Geraete bei Windows sind in einem Baum organisiert. Jedesmal wenn sich die Baumstruktur aendert wird DBT_DEVNODES_CHANGED gesendet. [...]
Ein Knoten im Baum entspricht einem Treiber. Eine Speicherkarte in einem Reader hat gleich einen Treiberstack. Da kommen schnell mehrere Messages zusammen.

OK, das ist schonmal gut zu wissen. Allerdings erklärt es irgendwie noch nicht, wieso die message auch "einfach so" gesendet wird - das heißt ja, in dem Baum ändert sich etwas. Trotzdem habe ich ja aber an den Geräten nichts geändert - wieso ändert sich also dann der Baum?


Muetze1 11. Okt 2007 17:08

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Monitor Suspend?

Meflin 11. Okt 2007 17:10

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Zitat:

Zitat von Muetze1
Monitor Suspend?

Das kann sein, kann aber nur für einen Teil der messages verantwortlich sein, da ich mit Sichherheit auch welche mitten unter der Arbeit bekommen habe.


Muetze1 11. Okt 2007 17:22

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
WLAN Verbindungsverlust? Switch reset?

Robert Marquardt 12. Okt 2007 05:34

Re: Wann wird DBT_DEVNODES_CHANGED gesendet?
 
Geraete und ganze Geraete-Busse koennen virtuell sein. Schau mal unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum dort sind die Busse aufgelistet. Bei mir sind dort z. B. USBPRINT und USBSTOR, die sicher virtuell sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz