Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2012.01.08;
Скачать: [xml.tar.bz2];

Вниз

серийный номер диска   Найти похожие ветки 

 
defen ©   (2009-09-15 07:31) [0]

Доброго времени суток. Помогите пожалуйста, необходимо программно получить серийный номер носителя (VolumeSerialNumber) не подходит. Нужен тот, который зашили производители. Сам не нашел. Может кто что-нибудь полезное подскажет?


 
MBo ©   (2009-09-15 08:41) [1]

http://home.earthlink.net/~akonshin/delphi_ru.htm


 
defen ©   (2009-09-16 08:04) [2]

Спасибо, но меня по большей части интересует USB подключение...


 
Дмитрий   (2009-09-16 09:34) [3]

Чего подключаем ? Если USB Flash, то код экземпляра устройства (например USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_2.0&REV_1.00\81100000000000000000001 E&0
) содержит в себе серийный номер (81100000000000000000001E). Только советую сначала проверить, отличается ли серийный номер разных флешек из одной партии. А то китайцы - народ своеобразный...


 
GanibalLector ©   (2009-09-16 21:52) [4]


2 MBo ©   (15.09.09 08:41) [1]
> http://home.earthlink.net/~akonshin/delphi_ru.htm


Кстати, он в Viste не работает. Судя по всему и в Win7 тоже


 
defen ©   (2009-09-17 02:06) [5]

В общем программа должна блокировать USB носители, если она не находит в базе, на удаленном сервере, знакомый ей ID. Как связать её с серваком проблем нет, а вот вытащить серийник для меня сложность. Вытащил недавно код:

function GetFlashDrivesCountA: Integer;
var
 reg: TRegistry;
 devices: TStringList;
 i: integer;
 usbRegKey:string;
begin
 usbRegKey:="\SYSTEM\CurrentControlSet\Enum\";
 Result:=0;
 reg := TRegistry.Create;
 devices := TStringList.Create;
 try
   reg.RootKey := HKEY_LOCAL_MACHINE;
   if reg.OpenKey(usbRegKey, false) then
     begin
       reg.GetKeyNames(devices);
       for i:=0 to devices.Count-1 do
         if ExtractWord(2, devices[i], ["#","&"]) = "USBSTOR" then
           begin
            if reg.OpenKey(usbRegKey+"\"+devices[i]+"\#\Control",false) then
            try
              if reg.ReadInteger("Linked")=1 then
               inc(Result);
            except end;
           end;
     end
 finally
   reg.free;
   devices.free;
 end;
end;

function GetFlashDriveSN(num: integer): shortstring;
var
 reg: TRegistry;
 devices: TStringList;
 i, j: integer;
begin
 Result:="";
 j:=0;
 reg := TRegistry.Create;
 devices := TStringList.Create;
 try
   reg.RootKey := HKEY_LOCAL_MACHINE;
   if reg.OpenKey(usbRegKey, false) then
     begin
       reg.GetKeyNames(devices);
       for i:=0 to devices.Count-1 do
         if ExtractWord(2, devices[i], ["#","&"]) = "USBSTOR" then
           begin
            if reg.OpenKey(usbRegKey+"\"+devices[i]+"\#\Control",false) then
            try
              if reg.ReadInteger("Linked")=1 then
                begin
                  inc(j);
                  if j=num then
                    begin
                      result := ExtractWord(7, devices[i], ["#","&"]);
                      break;
                    end;
                end;
            except end;
           end;
     end
 finally
   reg.free;
   devices.free;
 end;
end;

function ExistsFlashWithSerialA(serial: shortstring): boolean;
var
 reg: TRegistry;
 devices: TStringList;
 i: integer;
begin
 Result:= false;
 reg := TRegistry.Create;
 devices := TStringList.Create;
 try
   reg.RootKey := HKEY_LOCAL_MACHINE;
   if reg.OpenKey(usbRegKey, false) then
     begin
       reg.GetKeyNames(devices);
       for i:=0 to devices.Count-1 do
         if ExtractWord(2, devices[i], ["#","&"]) = "USBSTOR" then
           begin
            if reg.OpenKey(usbRegKey+"\"+devices[i]+"\#\Control",false) then
            try
              if reg.ReadInteger("Linked")=1 then
                 if Trim(ExtractWord(7, devices[i], ["#","&"])) = trim(serial) then
                   begin
                     Result := True;
                     break;
                   end
            except end;
           end;
     end
 finally
   reg.free;
   devices.free;
 end;
end;


В результате возникли проблемы c "ExtractWord" пишет Undeclared identifier: "ExtractWord"

Я так понимаю не хватает функции в Uses... Почитал в инете - не понял что к чему....


 
Дмитрий   (2009-09-17 10:12) [6]

Почитай статью "Работа с устройствами в Windows" http://pblog.ru/?p=105 там есть исходник примера. Долго "причесывать" свой выдранный из проекта код, вкратце - есть куча функций библиотек cfgmgr32.dll и setupapi.dll. И продумай способ, как будешь реализовывать - статически, перебирая все USB-устройства и далее CM_Get_Device_IDA или динамичеки через RegisterDeviceNotification и фильтруя DBT_DEVICEARRIVAL. Кстати, подключение накопителя на уровне системы таким способом не отловить, для этого нужно писать собственный драйвер.


 
trix   (2009-09-23 18:27) [7]

function hddser:string;
var
SerialNum : dword;
a, b : dword;
Buffer  : array [0..255] of char;
begin
if GetVolumeInformation(pchar("c:\"), Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then
result := IntToStr(SerialNum);
end;


 
TIF ©   (2009-09-23 22:37) [8]

> GetVolumeInformation

Речь про серийный номер ДИСКА (винчестера), а не ТОМА ;-)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2012.01.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.004 c
2-1317305480
Очень Злой
2011-09-29 18:11
2012.01.08
Как работать с двухмерным динамический массивом?


15-1316348444
alexdn
2011-09-18 16:20
2012.01.08
Php bb форумный движек и спам боты


15-1316464181
Юрий
2011-09-20 00:29
2012.01.08
С днем рождения ! 20 сентября 2011 вторник


15-1315302753
Pit
2011-09-06 13:52
2012.01.08
Особенности отображения сайтоа на iPhone


6-1249301566
BreakPoint
2009-08-03 16:12
2012.01.08
Какой процесс слушает сокет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский