Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите определить серийный номер флэшки? [D6, D7, Win2k, WinXP]


Sairex ©   (2007-09-19 17:27:00) 

Здравствуйте. Мне необходимо получить серийный номер флэш карты. Подскажите как его получить.
Заранее спасибо.


Sairex   (2007-09-22 14:04:00) [1]

Хммм интересно... попробую , если все получиться то напишу


Lacmus   (2007-09-21 16:40:00) [2]

На основе http://www.delphimaster.ru/cgi-bin/forum.pl?id=1160629902&n=10



const
 SetupApi = 'SetupApi.dll';

type
 HDEVINFO = THandle;

 PSP_DEVINFO_DATA = ^SP_DEVINFO_DATA;
 SP_DEVINFO_DATA = packed record
   cbSize: DWORD;
   ClassGuid: TGUID;
   DevInst: DWORD;
   Reserved: DWORD;
 end;

function SetupDiGetClassDevsA(ClassGuid: PGUID; Enumerator: PChar; hwndParent: HWND; Flags: DWORD): HDEVINFO; stdcall; external setupapi;
function SetupDiEnumDeviceInfo(DeviceInfoSet: HDEVINFO; MemberIndex: DWORD; DeviceInfoData: PSP_DEVINFO_DATA): boolean; stdcall; external setupapi;
function SetupDiDestroyDeviceInfoList(DeviceInfoSet: HDEVINFO): boolean; stdcall; external setupapi;
function CM_Get_Device_ID_Size(pulLen: PDWORD; dnDevInst: DWORD; ulFlags: DWORD): DWORD; stdcall; external setupapi;
function CM_Get_Device_IDA(dnDevInst: DWORD; Buffer: PChar; BufferLen: DWORD; ulFlags: DWORD): DWORD; stdcall; external setupapi;

const
 CR_SUCCESS = $00000000;

function GetDeviceName(aDevInst: THandle): string;
var
 IDLen: Integer;
begin
 Result := '';
 if (CM_Get_Device_ID_Size(@IDLen, aDevInst, 0) = CR_SUCCESS) and (IDLen > 0) then begin
   SetLength(Result, IDLen);
   if CM_Get_Device_IDA(aDevInst, PChar(Result), IDLen + 1, 0) CR_SUCCESS then
     Result := ''
 end
end;

procedure EnumDiskDrive;
const
 GUID_DEVCLASS_DISKDRIVE: TGUID =
   (D1: $4D36E967; D2: $E325; D3: $11CE; D4: ($BF, $C1, $08, $00, $2B, $E1, $03, $18));
var
 hDevInfoSet: HDEVINFO;
 DevInfo: SP_DEVINFO_DATA;
 i: Integer;
begin
 DevInfo.cbSize := sizeof(SP_DEVINFO_DATA);
 hDevInfoSet := SetupDiGetClassDevsA(@GUID_DEVCLASS_DISKDRIVE, nil, 0, 2);
 i := 0;
 if hDevInfoSet INVALID_HANDLE_VALUE then begin
   while (SetupDiEnumDeviceInfo(hDevInfoSet, i, @DevInfo)) do begin
     ShowMessage(GetDeviceName(DevInfo.DevInst));
     Inc(i)
   end;
   SetupDiDestroyDeviceInfoList(hDevInfoSet);
 end
end;

procedure TForm69.Button1Click(Sender: TObject);
begin
 EnumDiskDrive
end;


Lacmus   (2007-09-21 13:04:00) [3]

>mr.Bear   (21.09.07 12:18) [5]

"Внук" HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\ и есть серийный номер


mr.Bear   (2007-09-21 12:46:00) [4]

Помогите определить серийный номер флэшки? [D6, D7, Win2k, WinXP]
в 98 естественно параметров нет. для простенькойзащиты сойдет.
Серьезная защита предполагает серьезные исследования и денежные вложения, используйте аппаратные ключи типа Aladdin, Guardant


DC-AC   (2007-09-21 12:36:00) [5]

У меня, например, в Win98, в ветке HKEY_LOCAL_MACHINE\Enum\SCSI есть инфа, что когда-либо были подключены такие накопители (HardwareID, других вышеназванных параметров у меня НЕТ):

JETFLASHTS1GJF2A________8,GenDisk,SCSI\JETFLASHTS1GJF2A________8
KINGSTONDATATRAVELER_2.01,GenDisk,SCSI\KINGSTONDATATRAVELER_2.01
USB_2.0_(FS)_FLASH_DISK_1,GenDisk,SCSI\USB_2.0_(FS)_FLASH_DISK_1

И что же здесь уникального ???


mr.Bear   (2007-09-21 12:18:00) [6]

Посмотрите в реестре ветку HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\

Для каждого нового устройства внутри этой ветки создается раздел. Внутри каждого раздела есть параметры FriendlyName, HardwareID, ParentIdPrefix. Еще есть UINumber, обычно=0.
Для простенькой защиты сойдет.


Lacmus   (2007-09-20 20:22:00) [7]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1189944571&n=0

Lacmus ©   (16.09.07 16:51) [8]

WIN32_DISKDRIVE

Для флеш-диска последняя часть PNPDeviceID - серийный номер

Должен быть метод определения попроще, на данный момент не знаю.


Sairex   (2007-09-20 17:11:00) [8]

Хех... мне нужно просто привязать программу к флэшке. Если подскажите как то буду очень рад


palva   (2007-09-19 22:11:00) [9]

Наверно, ему нужен серийный номер тома, который выдается среди прочего, если выдать команду dir


Lacmus   (2007-09-19 18:09:00) [10]

На всякий случай, Вы его где-то видели ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо