Главная страница
    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
15-1316925282
РВА
2011-09-25 08:34
2012.01.08
Подскажите по железу


2-1317359287
Natalie
2011-09-30 09:08
2012.01.08
Как отобразить в Memo тест длинною 4000 символов?


2-1316964668
Avpsol
2011-09-25 19:31
2012.01.08
Проблема с построением цикла


2-1317671895
demon
2011-10-03 23:58
2012.01.08
Изменить параметры отображения хинта


2-1317233178
Очень злой
2011-09-28 22:06
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский