alle USBSTOR - geräte sicher entfernen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

alle USBSTOR - geräte sicher entfernen

Beitrag von bingo »

entfernt alle USBSTOR - geräte (memorystick ...) mit hinweis "kann jetzt entfernt werden" . 8)

pb4-code (bei pb3 GetFunction durch IsFunction ersetzen !)

Code: Alles auswählen

#DIGCF_PRESENT                     =   2 
#DIGCF_ALLCLASSES                  =   4 

hDeviceInfoSet = SetupDiGetClassDevs_(0,0,0,#DIGCF_PRESENT|#DIGCF_ALLCLASSES) 

Structure SP_DEVINFO_DATA 
  cbSize.l 
  ClassGuid.GUID 
  DevInst.l 
  Reserved.l 
EndStructure 

Global DeviceInfoData.SP_DEVINFO_DATA ;global für funktion 
DeviceInfoData\cbSize=SizeOf(DeviceInfoData) 

#SPDRP_SERVICE = 4 

*MemoryID = AllocateMemory(500) 

i.l 

OpenLibrary(1,"setupapi.dll") 

*F1 = GetFunction(1, "SetupDiGetDeviceInstanceIdA") 
*F2 = GetFunction(1, "SetupDiGetDeviceRegistryPropertyA") 
*F3 = GetFunction(1, "CM_Locate_DevNodeA") 
*F4 = GetFunction(1, "CM_Request_Device_Eject_ExA") 

While SetupDiEnumDeviceInfo_(hDeviceInfoSet,i,@DeviceInfoData) 
i+1 
CallFunctionFast(*F2,hDeviceInfoSet,DeviceInfoData,#SPDRP_SERVICE,0,*MemoryID,500,0) 

If UCase(PeekS(*MemoryID)) = "USBSTOR" 
CallFunctionFast(*F1,hDeviceInfoSet,DeviceInfoData,*MemoryID,500,0) 
If CallFunctionFast(*F3,@devinst.l,PeekS(*MemoryID),0) = 0 
CallFunctionFast(*F4,devinst,0,0,0,0,0) 
EndIf 
EndIf 

Wend 

SetupDiDestroyDeviceInfoList_(hDeviceInfoSet) 

CloseLibrary(1) 

FreeMemory(*MemoryID)
1:0>1
Benutzeravatar
RAaBe
Beiträge: 80
Registriert: 07.09.2004 12:52
Wohnort: Münsterland
Kontaktdaten:

Beitrag von RAaBe »

Moin, Code getestet und hat sich als sehr praktisch erwiesen. Funktioniert auch mit 2 USB-Sticks und Kartenleser!

Schönen Tach noch...
Antworten