Главная страница
    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.003 c
2-1310979425
D_2010
2011-07-18 12:57
2012.01.08
Как обработать приход нескольких одинаковых TMessage как одно?


2-1317272307
Gu
2011-09-29 08:58
2012.01.08
передний план


4-1253715907
trix
2009-09-23 18:25
2012.01.08
Как послать нажатие клавиши F2 а затем клавишу "A"


15-1316041496
Кто б сомневался
2011-09-15 03:04
2012.01.08
Кто там говорил что человек не биоробот?


11-1240488347
Dy1
2009-04-23 16:05
2012.01.08
RichEdit, модификация текста





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский