Seriennummer von meinem USB-Stick auslesen
Re: Seriennummer von meinem USB-Stick auslesen
Hier gibt es noch etwas, nicht nur zum Seriennummer auslesen.
- deify
- Beiträge: 141
- Registriert: 29.03.2010 22:01
- Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM - Kontaktdaten:
Re: Seriennummer von meinem USB-Stick auslesen
hab da mal nen code zusammengebastelt gehabt... nicht zu viel erwarten ist von meiner anfangszeit mit pb und da ist bestimmt das ein oder andere unnütz oder nicht so top (:
War dazu geplant den pc zu sperren wenn ein als "Master" gesetzter usbstick entfernt wird ^^ hat auch gut funktioniert, habs leider nichtmehr weitergeführt, weil man den schutz mit dem taskmanager umgehen konnte. Hätte zwar via registry mit XP funktioniert aber vista und 7 haben ja das securitycenter und das habe ich nie wegbekommen (:
hoffe der code hilft dir weiter wenn du noch was brauchst
arbeitet mit winapi und coMate soweit ich das noch durchblicke (:
Code:
mfg deify
War dazu geplant den pc zu sperren wenn ein als "Master" gesetzter usbstick entfernt wird ^^ hat auch gut funktioniert, habs leider nichtmehr weitergeführt, weil man den schutz mit dem taskmanager umgehen konnte. Hätte zwar via registry mit XP funktioniert aber vista und 7 haben ja das securitycenter und das habe ich nie wegbekommen (:
hoffe der code hilft dir weiter wenn du noch was brauchst
arbeitet mit winapi und coMate soweit ich das noch durchblicke (:
Code:
Code: Alles auswählen
Enumeration
#DiskNr
#List_partition
#Check_USB
#Button
EndEnumeration
Enumeration
#Menu
EndEnumeration
Enumeration
#Menu_Refresh
#Menu_Minimize
#Menu_Exit
EndEnumeration
IncludeFile "COMate.pbi"
Structure PartitionInfo
Partition.s
DriveLetter.s
FileSystem.s
FreeSpace.s
Size.s
VolumeName.s
VolumeSerialNumber.s
Bootable.l
BootPartition.l
PrimaryPartition.l
Type.s
EndStructure
Structure DiskInfo
DiskNr.s
PartNr.PartitionInfo
DeviceID.s
PNPDeviceID.s
FirmwareRevision.s
InterfaceType.s
MediaType.s
Model.s
Status.s
Name.s
EndStructure
Global NewList masters.s()
Global NewList info.DiskInfo(),Laufwerk.s, Exit = #False,currentid.s = ""
OpenFile(0,GetHomeDirectory()+"\Desktop\usb.log")
Procedure ListSearch(item.s)
ResetList(masters())
While NextElement(masters())
If masters() = item
ProcedureReturn(#True)
Break
EndIf
Wend
ProcedureReturn(#False)
EndProcedure
Procedure Partition_To_DiskDrive(devID.s)
Define.COMateObject objWMIService, USBCfg,EnumUSB
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
EnumUSBset.COMateEnumObject
x=0
EnumUSBset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_DiskDrive Where DeviceID= $0027" + devID +"$0027')")
If EnumUSBset
EnumUSB = EnumUSBset\GetNextObject()
While EnumUSB
If EnumUSB
info()\FirmwareRevision=EnumUSB\GetstringProperty("FirmwareRevision")
info()\InterfaceType=EnumUSB\GetstringProperty("InterfaceType")
info()\MediaType=EnumUSB\GetstringProperty("MediaType")
info()\Model=EnumUSB\GetstringProperty("Model")
info()\PNPDeviceID=EnumUSB\GetstringProperty("PNPDeviceID")
info()\Status=EnumUSB\GetstringProperty("Status")
EnumUSB\Release()
x=x+1
EndIf
EnumUSB = EnumUSBset\GetNextObject()
Wend
EnumUSBset\Release()
EndIf
objWMIService\Release()
EndIf
EndProcedure
Procedure Win32_DiskDrivePhysicalMedia()
Define.COMateObject objWMIService, EnumDiskDrive
EnumDiskDriveset.COMateEnumObject
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
x=0
EnumDiskDriveset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_DiskDrivePhysicalMedia')")
If EnumDiskDriveset
EnumDiskDrive = EnumDiskDriveset\GetNextObject()
While EnumDiskDrive
If EnumDiskDrive
physdrive.l=FindString(EnumDiskDrive\GetstringProperty("Antecedent"),"\\\\.\\PHYSICALDRIVE",1)
If physdrive
diskpart.s=RemoveString(Mid(EnumDiskDrive\GetstringProperty("Antecedent"),physdrive,Len("\\\\.\\PHYSICALDRIVE")+2),Chr(34))
Partition_To_DiskDrive(diskpart)
EndIf
EndIf
EnumDiskDrive = EnumDiskDriveset\GetNextObject()
Wend
EnumDiskDriveset\Release()
EndIf
objWMIService\Release()
EndIf
EndProcedure
Procedure.s Diskpartition(diskpart.s)
found.l= FindString(diskpart,Chr(34),1)
ProcedureReturn Mid(diskpart,found,Len(diskpart)-found+1)
EndProcedure
Procedure LogicalDiskToPartition(antecedent.s)
Define.COMateObject objWMIService, EnumLDisk
EnumLDiskset.COMateEnumObject
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
x=0
antecedent=ReplaceString(antecedent, "\", "\\")
EnumLDiskset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_LogicalDiskToPartition Where Antecedent= $0027" + antecedent +"$0027')")
If EnumLDiskset
EnumLDisk = EnumLDiskset\GetNextObject()
While EnumLDisk
If EnumLDisk
driveletter.s=EnumLDisk\GetstringProperty("Dependent")
info()\PartNr\DriveLetter=RemoveString(diskpartition(driveletter),Chr(34))
EnumLDisk\Release()
EndIf
EnumLDisk = EnumLDiskset\GetNextObject()
Wend
EnumLDiskset\Release()
EndIf
objWMIService\Release()
EndIf
EndProcedure
Procedure Win32_DiskDriveToDiskPartition()
Define.COMateObject objWMIService, EnumDisk
EnumDiskset.COMateEnumObject
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
x=0
EnumDiskset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_DiskDriveToDiskPartition')"); Where DeviceID= $0027" + devID +"$0027')")
If EnumDiskset
EnumDisk = EnumDiskset\GetNextObject()
While EnumDisk
If EnumDisk
AddElement(Info())
diskpart.s= EnumDisk\GetstringProperty("Dependent")
LogicalDiskToPartition(diskpart)
diskpartition(diskpart)
For xx=1 To CountString(diskpartition(diskpart),",")+1
Ergebnis$ = StringField(diskpartition(diskpart), xx, ",")
Ergebnis$= RemoveString(Ergebnis$,Chr(34))
If xx=1
Info()\DiskNr=Ergebnis$
If tmp$<>Ergebnis$
tmp$=Ergebnis$
diskNr.s=RemoveString(tmp$,"Disk #")
EndIf
y=x
Else
Info()\PartNr\Partition=Ergebnis$
y=x
x=x+1
EndIf
Next
physdrive.l=FindString(EnumDisk\GetstringProperty("Antecedent"),"\\\\.\\PHYSICALDRIVE",1)
If physdrive
diskpart.s=RemoveString(Mid(EnumDisk\GetstringProperty("Antecedent"),physdrive,Len("\\\\.\\PHYSICALDRIVE")+2),Chr(34))
If tmpdisk$<>diskpart
tmpdisk$=diskpart
Info()\DeviceID=EnumDisk\GetstringProperty("Antecedent")
Partition_To_DiskDrive(diskpart)
EndIf
EndIf
EndIf
EnumDisk = EnumDiskset\GetNextObject()
Wend
EnumDiskset\Release()
EndIf
objWMIService\Release()
EndIf
EndProcedure
Procedure Win32_DiskPartition(DeviceID.s)
Define.COMateObject objWMIService, EnumPart
EnumPartset.COMateEnumObject
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
x=0
EnumPartset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_DiskPartition Where DeviceID= $0027" + DeviceID +"$0027')")
If EnumPartset
EnumPart = EnumPartset\GetNextObject()
While EnumPart
If EnumPart
Info()\PartNr\Bootable=EnumPart\GetIntegerProperty("Bootable")
Info()\PartNr\BootPartition=EnumPart\GetIntegerProperty("BootPartition")
Info()\PartNr\PrimaryPartition=EnumPart\GetIntegerProperty("PrimaryPartition")
Info()\PartNr\Type=EnumPart\GetstringProperty("Type")
EndIf
EnumPart = EnumPartset\GetNextObject()
Wend
EnumPartset\Release()
EndIf
objWMIService\Release()
EndIf
EndProcedure
Procedure.s DiskSpace(strval.s)
Protected lpTotalNumberOfBytes.q, res.f, CapStr.s
lpTotalNumberOfBytes=ValQ(strval.s)
res= lpTotalNumberOfBytes/(1024*1024*1024)
CapStr= StrD(res,2)
ProcedureReturn CapStr
EndProcedure
Procedure Win32_LogicalDisk(Driveletter.s)
Define.COMateObject objWMIService, EnumDrive
EnumDriveset.COMateEnumObject
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
x=0
EnumDriveset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_LogicalDisk Where Caption= $0027" + Driveletter +"$0027')")
If EnumDriveset
EnumDrive = EnumDriveset\GetNextObject()
While EnumDrive
If EnumDrive
Info()\PartNr\FileSystem=EnumDrive\GetstringProperty("FileSystem")
Info()\PartNr\FreeSpace=DiskSpace(EnumDrive\GetstringProperty("FreeSpace"))
Info()\PartNr\Size=DiskSpace(EnumDrive\GetstringProperty("Size"))
Info()\PartNr\VolumeName=EnumDrive\GetstringProperty("VolumeName")
Info()\PartNr\VolumeSerialNumber= EnumDrive\GetstringProperty("VolumeSerialNumber")
EndIf
EnumDrive = EnumDriveset\GetNextObject()
Wend
EnumDriveset\Release()
EndIf
objWMIService\Release()
EndIf
EndProcedure
Procedure listFilesByLetter(dl)
Protected Name.s = Space(256)
ClearList(Info())
Win32_DiskDriveToDiskPartition()
ResetList(Info())
While NextElement(Info())
If dl = 0
If Info()\PartNr\Driveletter = Left(Laufwerk,2)
GetVolumeInformation_(info()\PartNr\DriveLetter, @Name, 255,0,0,0,0,0)
info()\Name = name
currentid = info()\PNPDeviceID
For i = 0 To CountGadgetItems(0)
If GetGadgetItemText(0,i,0) <> info()\PartNr\DriveLetter
If GetGadgetItemText(0,i,0) > info()\PartNr\DriveLetter
AddGadgetItem(0,i,info()\PartNr\DriveLetter + Chr(10) + info()\Name + Chr(10) + info()\InterfaceType + Chr(10) + info()\Model + Chr(10) + info()\PNPDeviceID + Chr(10) + info()\MediaType)
WriteStringN(0,"Insert Device @ "+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date())+": "+info()\PartNr\DriveLetter + " " + info()\Name + " " + info()\InterfaceType + " " + info()\Model + " " + info()\PNPDeviceID + " " + info()\MediaType)
Break
ElseIf i = CountGadgetItems(0) And GetGadgetItemText(0,i,0) <> info()\PartNr\DriveLetter
AddGadgetItem(0,-1,info()\PartNr\DriveLetter + Chr(10) + info()\Name + Chr(10) + info()\InterfaceType + Chr(10) + info()\Model + Chr(10) + info()\PNPDeviceID + Chr(10) + info()\MediaType)
WriteStringN(0,"Insert Device @ "+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date())+": "+info()\PartNr\DriveLetter + " " + info()\Name + " " + info()\InterfaceType + " " + info()\Model + " " + info()\PNPDeviceID + " " + info()\MediaType)
Break
EndIf
Delay(10)
Else
Break
EndIf
Next
Break
EndIf
Delay(10)
Else
If CountGadgetItems(0) = 0
GetVolumeInformation_(info()\PartNr\DriveLetter, @Name, 255,0,0,0,0,0)
info()\Name = name
AddGadgetItem(0,-1,info()\PartNr\DriveLetter + Chr(10) + info()\Name + Chr(10) + info()\InterfaceType + Chr(10) + info()\Model + Chr(10) + info()\PNPDeviceID + Chr(10) + info()\MediaType)
Else
For i = 0 To CountGadgetItems(0)
If GetGadgetItemText(0,i,0) <> info()\PartNr\DriveLetter
GetVolumeInformation_(info()\PartNr\DriveLetter, @Name, 255,0,0,0,0,0)
info()\Name = name
If GetGadgetItemText(0,i,0) > info()\PartNr\DriveLetter
AddGadgetItem(0,i,info()\PartNr\DriveLetter + Chr(10) + info()\Name + Chr(10) + info()\InterfaceType + Chr(10) + info()\Model + Chr(10) + info()\PNPDeviceID + Chr(10) + info()\MediaType)
Break
ElseIf i = CountGadgetItems(0)
AddGadgetItem(0,-1,info()\PartNr\DriveLetter + Chr(10) + info()\Name + Chr(10) + info()\InterfaceType + Chr(10) + info()\Model + Chr(10) + info()\PNPDeviceID + Chr(10) + info()\MediaType)
Break
EndIf
Delay(10)
Else
Break
EndIf
Next
EndIf
Delay(10)
EndIf
Wend
EndProcedure
Procedure.s GetDevice(Bits)
For i = 'A' To 'Z'
If Bits & 1 = 1
Laufwerk.s = Chr(i)
EndIf
Bits = Bits >> 1
Next
ProcedureReturn Laufwerk
EndProcedure
Procedure CB(hwnd,msg,wParam,lParam)
Protected *db.DEV_BROADCAST_HDR
Protected *dbv.DEV_BROADCAST_VOLUME
If msg = #WM_DEVICECHANGE
Select wParam
Case #DBT_DEVICEARRIVAL
*db = lParam
If *db\dbch_devicetype = #DBT_DEVTYP_VOLUME
*dbv = *db
Laufwerk = GetDevice(*dbv\dbcv_unitmask) + ":\"
thread = CreateThread(@listFilesByLetter(),0)
If ListSearch(currentid) = #True And currentid <> ""
BlockInput_(#False)
EndIf
EndIf
Case #DBT_DEVICEREMOVECOMPLETE
*db = lParam
If *db\dbch_devicetype = #DBT_DEVTYP_VOLUME
*dbv = *db
Laufwerk.s = GetDevice(*dbv\dbcv_unitmask) + ":\"
For i=0 To CountGadgetItems(0)
If GetGadgetItemText(0,i,0) = Left(Laufwerk,2) And Not ListSearch(GetGadgetItemText(0,i,4))
WriteStringN(0,"Removed Device @ "+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date())+": "+ GetGadgetItemText(0,i,0) + " " + GetGadgetItemText(0,i,1)+ " "+ GetGadgetItemText(0,i,2)+ " " + GetGadgetItemText(0,i,3)+ " " + GetGadgetItemText(0,i,4)+ " " + GetGadgetItemText(0,i,5))
RemoveGadgetItem(0,i)
ElseIf ListSearch(GetGadgetItemText(0,i,4)) = #True And currentid <> ""
WriteStringN(0,"Removed Master (lock pc) @ "+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date()))
RemoveGadgetItem(0,i)
BlockInput_(#True)
EndIf
Next
EndIf
EndSelect
ProcedureReturn 1
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 100, 100, 700, 350, "USB Recognition", #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_Invisible)
ListIconGadget(0, 0, 0, 700, 300, "Drive Letter", 116, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Name",116)
AddGadgetColumn(0, 2, "Interface Type",116)
AddGadgetColumn(0, 3, "Model",116)
AddGadgetColumn(0, 4, "PNP Device-ID",116)
AddGadgetColumn(0, 5, "Media Type",116)
ButtonGadget(#Button,290,310,120,30,"Set device as master")
CreateThread(@listFilesByLetter(),1)
SetWindowCallback(@CB(),0)
hIcon1 = LoadIcon_(0, #IDI_APPLICATION)
hidden = 1
AddSysTrayIcon(1, WindowID(0), hIcon1)
SysTrayIconToolTip(1, "USB Recognition")
If CreatePopupMenu(#Menu)
MenuItem(#Menu_Refresh, "Refresh")
MenuItem(#Menu_Minimize,"Maximize Window")
MenuBar()
MenuItem(#Menu_Exit, "Exit")
EndIf
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_SysTray
If EventType() = #PB_EventType_LeftClick Or EventType() = #PB_EventType_RightClick
DisplayPopupMenu(#Menu, WindowID(0))
EndIf
Case #PB_Event_Menu
Select EventMenu()
Case #Menu_Refresh
If hidden = 0 And Not IsThread(refresh)
ClearGadgetItems(0)
refresh = CreateThread(@listFilesByLetter(),1)
EndIf
Case #Menu_Minimize
If hidden = 0
HideWindow(0,1)
SetMenuItemText(#Menu,#Menu_Minimize,"Maximize window")
hidden = 1
Else
HideWindow(0,0)
SetMenuItemText(#Menu,#Menu_Minimize,"Minimize to tray")
hidden = 0
EndIf
Case #Menu_Exit
exit = #True
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Button
For i = 0 To CountGadgetItems(0)
If GetGadgetItemState(0,i) = #PB_ListIcon_Selected
WriteStringN(0,"Device: "+GetGadgetItemText(0,i,1)+" ("+GetGadgetItemText(0,i,4)+") Set As Master@ "+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",Date()))
AddElement(masters())
masters() = GetGadgetItemText(0,i,4)
If masters() = ""
DeleteElement(masters())
EndIf
EndIf
Next
EndSelect
Case #PB_Event_CloseWindow
HideWindow(0,1)
SetMenuItemText(#Menu,#Menu_Minimize,"Maximize window")
hidden = 1
EndSelect
Until exit
EndIf
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Re: Seriennummer von meinem USB-Stick auslesen
Hallo,
danke für deinen Tip und Source. Werde mich mal durchlesen und das Thema weiterverfolgen!
Gruss ... Velindos
danke für deinen Tip und Source. Werde mich mal durchlesen und das Thema weiterverfolgen!
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)