Odată ce am confruntat cu sarcina - pentru a scrie un program de protecție, care să permită utilizarea stick USB aprobate doar pe anumite calculatoare. Am decis să o facă obligatorie la numărul de serie. precum și VID Flash și PID (ID furnizor și partea ID-ul), care poate fi, în general, considerate ca fiind informații unice.
Acum, eu nu văd cum rescriere arbitrare de memorii flash sub VID, PID, serial, toate acestea se poate face prin alegerea utilitku corespunzătoare sub controlul producătorului.
Deci, atîrna sarcina de a învăța toate informațiile necesare. Acum, eu nu va lua în considerare dezvoltarea întregului ansamblu, și arată doar o funcție de bază. Aș fi bucuros dacă cineva poate ajuta la finalizarea programului. Da, și va îmbunătăți în mod constant și actualiza codul.
Deci, vom folosi datele pentru a alege meu preferat WMI (Windows Management Instrumentation). De ce îmi place? Da, pentru că totul funcționează „din cutie“, nu este nevoie pentru a instala software-ul și componente suplimentare, și există o mulțime de clase.
Cum de a lucra cu o tehnologie - să caute WMI obscene, WMIC, si am sa povesteasca mai departe.
Vor alege datele din identificatorul dispozitivului de linie, care arata ceva de genul:
Această linie are un VID, PID și numărul de serie după al doilea slash.
Este important să nu se confunde numărul de serie flash card și numărul de serie al volumului. Ultimele modificări (disponibile de la comanda dir) în formatarea stick-ul și nu sunt adecvate pentru identificarea unică.
Mecanismul de obținere a numerelor de serie Flash
Sarcina acum - a obține această linie.
WMI înseamnă că obține aceste informații de la clasa Win32_usbhub. a anunțat în spațiu \\ rădăcină \ cimv2
Deci, executați linia de comandă, există un program de WMIC.

Scrierea acolo comandă DeviceId selecție câmp din clasa Win32_usbhub. Privind în perspectivă pentru a spune că va sta o mulțime de dispozitive (hub rădăcină, mouse-ul, etc), asa ca am scrie imediat filtrul în dispozitive de stocare.
WMIC: rădăcină \ cli> calea win32_usbhub În cazul în care (Caption = "Mass Storage USB Device") get DeviceId

calea WMIC obține în cazul în care
Asta a primit linia noastră prețuită. Analizează-le, au fost alte mijloace.
Apropo, aici este timpul de funcționare pe Delphi, cineva poate veni la îndemână.
Codul, desigur, este nepoliticos, dar asamblate pe genunchi. Principalul lucru - munca. Utilizați dacă doriți să:

Descărcați proiectul într-un fișier executabil, puteți conecta
Astfel, prin utilizarea WMI, am primit numărul de serie al stick-ul. precum și informații suplimentare sub formă de VID și PID.
Este posibil să se schimbe într-un fel numărul de serie al stick-ul?
Da, poți. program, care-semnalizatoarele (pentru fiecare cip are propriul program), care poate fi folosit pentru a schimba numărul de serie și a identificatorilor VID PID. De exemplu, pentru chips-uri Alcor Eu folosesc Alcor Schimbare Pid reprelucrare Vid.

Modificarea numărului de card flash de serie

Modificarea numărului de card flash de serie

Modificarea numărului de card flash de serie
Schimbarea numărul de serie este ușor pentru a lipi. Conectați unitatea flash USB, selectați-l în lista Port. Apăsați Configurare (se deschide o fereastra pe poze de mai sus), introduceți PID dorit VID și SN și am apăsați pe butonul START. unitate flash USB gata într-un moment cu un nou număr de serie.
Apropo, am scris mai devreme, cum să formatați unitatea flash pentru a NTFS - poate fi util!
Vă veți bucura, de asemenea:
În acest cod în nici un fel. Dar puteți utiliza altă clasă suplimentară WMI. win32_diskdrive
Pentru comparație, următoarea comandă în linia de comandă cu stick-ul de memorie introdus:
> Calea WMIC win32_diskdrive obține pnpdeviceid, dimensiunea
Vei vedea o linie cum ar fi numărul de serie, precum și dimensiunea în octeți.
Este necesar doar să aloce un număr de serie pentru a găsi într-una dintre aceste linii, precum și pentru a da dimensiunea în octeți (numărate anterior, de exemplu, în MB).
Bună ziua, ar putea să-mi spui, am agățat evenimentul funcția WM_DEVICECHANGE, ci mai degrabă pe mesajul DBT_DEVICEARRIVAL, adică, atunci când stick-ul este introdus doar o singură dată trebuie să știu numărul de serie, în cele din urmă I a lua o eroare
„Nu se poate face un apel de ieșire, deoarece aplicația procesează apelul sincron de intrare.“
Întârziere de 5 secunde salvează, dar poate într-un fel este posibil să se stabilească această eroare?
Vă mulțumim anticipat.
@litladmin. Aici este codul:
Procedura DEVICECHANGE (var Msg: TMessage); WM_DEVICECHANGE mesaj;
Procedura TForm1.DEVICECHANGE (var Msg: TMessage);
var
Enumeratorul: IEnumVariant;
WbemLocator, WbemServices, WbemObjectSet. varianta;
Proprietăți. IEnumVariant;
Proprietate1, Sistem. OleVariant;
j. LongWord;
sProperty. șir de caractere;
Vid, Pid, serial. ShortString;
începe
caz de Msg.WParam
DBT_DEVICEARRIVAL:
începe
Label1.Caption: = 'schimbare Flash';
Pentru articol Multumesc, voi încerca să înțeleagă.