![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите определить серийный номер флэшки? [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]На всякий случай, Вы его где-то видели ?