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

Вниз

HDD s/n   Найти похожие ветки 

 
Evg12   (2004-01-21 18:46) [0]

Уважаемые нужно узнать серийный (заводской) номер первого HDD носителя. (не диска C:)
Просмотрел несколько наработок на эту тему, например от Alex Konshin и т.д.
Все они прекрасно работают под NT-подобыми системами. И абсолютно не работоспособны под 95, 98.
Есть ли в природе исходник, работоспособный под всеми системами?
Ссылочку, плиззззз.


 
Intell ©   (2004-01-21 20:51) [1]

А что, они чем-то отличаются?


 
hyper_omsk ©   (2004-01-22 05:52) [2]

Попробуй это:


   procedure TForm1.Button1Click(Sender: TObject);
var

SerialNum : dword;
a, b : dword;
Buffer  : array [0..255] of char;
begin

if GetVolumeInformation("c:\", Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then
Label1.Caption := IntToStr(SerialNum);
end;  


 
Alex Konshin ©   (2004-01-22 05:54) [3]

Устал я, устал бороться...


 
Alex Konshin ©   (2004-01-22 06:03) [4]

hyper_omsk ©   (22.01.04 05:52) [2]
Ты вопрос-то понял?


 
Polevi ©   (2004-01-22 10:03) [5]

>Alex Konshin ©   (22.01.04 06:03) [4]
он не понял, но ведь работает :-)


 
pavel_guzhanov ©   (2004-01-22 10:03) [6]

На этом сайте есть компонент msysinfo, с примерами. У меня все работает.
http://www.torry.net/vcl/system/systeminfo/msysinfo.zip


 
Intell ©   (2004-01-23 18:43) [7]

Дык. Я не понимаю - C:\ это лишь указатель на вин. В чём разница получения серийника вина таким образом и другим (который ты ищешь)? Или это я не врубаюсь - этот код по твоему получает номер раздела? Если ты укажешь D:\ (тотже вин) то он тотже серийник должен вывести. Я давно подобным кодом пользуюсь - каких либо подвохов не заметил.


 
nikkie ©   (2004-01-23 19:10) [8]

>Если ты укажешь D:\ (тотже вин) то он тотже серийник должен вывести.
а если взять и проверить?

GetVolumeInformation - возвращает серийный номер тома, выставляемый при форматировании.

>В чём разница получения серийника вина таким образом и другим (который ты ищешь)?
опять-таки взять и сравнить.


 
Evg12   (2004-01-23 19:22) [9]

Повторяю для тупых и убогих: серийный (заводской) номер первого HDD носителя
То Alex Konshin: Действительно не пашет под виндой 98, почти днь потратил. Я бсделал но уменя познаний на низком уровне маловато. Может чье-то чужое есть, яб твою и ту в кучу б собрал.


 
Alex Konshin ©   (2004-01-23 21:56) [10]

Для primary-master точно должно работать. Если нет, то что-то не так в твоей системе. smartvsd.vxd, надеюсь, установлен правильно?

Ну есть, например, http://www.winsim.com/diskid32/diskid32.html
Опять-таки он ставит свой vxd.

Видел я где-то код на asm, который выходит в ring0 и читает порты без каких-либо vxd. Попробую вспомнить, где это было.  

Вот есть еще чей-то код прямого чтения-записи к портам, может это и сработает на Windows 98/ME (но что-то не верится):

{$IFDEF Windows}
 uses WinCrt;
{$ENDIF}
var
 InfoArray : array[0..255] of word;
 IdeInfo  : record
   Config    : word;
   CylsTotal : word;
   Unused    : word;
   HeadTotal : word;
   BPT       : word;
   BPS       : word;
   SPT       : word;
   Vendor    : array[0..2] of word;
   Serial    : array[1..20] of char;
   BufType   : Word;
   BufSize   : Word;
   ECC       : Word;
   Revision  : array[1..8] of char;
   Model     : array[1..40] of char;
 end absolute InfoArray;
 Count : byte;
 i : byte;
begin
 writeln("Информация о дисководах IDE:"^M^J);
{$IFDEF WINDOWS}
 for count := 1 to mem[  $0040:$0075] do begin
{$ELSE}
 for count := 1 to mem[Seg0040:$0075] do begin
{$ENDIF}
   FillChar(InfoArray, SizeOf(InfoArray), 0);
   {Проверить готовность}
   while (port[$1F7] and $80<>0) do ;
   {Запретить прерывания}
   port[$3f6] := 2;
   port[$1f6] := $A0 + ((count-1) shl 4);
   port[$1f7] := $EC;
   {Проверить готовность}
   while (port[$1F7] and $80<>0) do ;
   {Получить информацию}
   for i := 0 to 255 do InfoArray[i] := swap(portw[$1F0]);
   {Hапечатaть информацию}
   writeln("Информация о физическом диске ",count-1,^M^J);
   with IdeInfo do begin
     writeln("Емкость неформатированная :", 9.5367431641E-7* {1/2^20}
       swap(BPT)*swap(CylsTotal)*swap(HeadTotal):5:0, "Mb");
     writeln("Емкость форматированная   :",
       longint(swap(SPT))*swap(CylsTotal)*swap(HeadTotal) div 2048:5, "Mb");
     writeln("Число цилиндров           :", swap(CylsTotal):7);
     writeln("Число головок             :", swap(HeadTotal):7);
     writeln("Число секторов на дорожку :", swap(SPT):7);
     writeln("Число байт на дорожку*    :", swap(BPT):7);
     writeln("Число байт на сектор*     :", swap(BPS):7);
     writeln("Размер буфера             :", swap(BufSize):7);
     writeln("Код ECC                   :", swap(ECC):7);
     writeln(" * -- неформатированная емкость", ^M^J);
     writeln("Серийный номер            :", serial);
     writeln("Версия                    :",revision);
     writeln("Модель                    :",model);
   end;
   write("Hажмите любую клавишу...");
{$IFDEF WINDOWS}
   readkey;
{$ELSE}
   asm xor ah,ah ; int 16h end;
{$ENDIF}
   writeln(^M^J);
 end;
end.


 
Alex Konshin ©   (2004-01-23 22:50) [11]

Да, надеюсь понятно, что приведенный выше код не нужно пытаться использовать без изменений (так-то он точно не заработает), я его просто привел потому, что там видно какие порты нужно читать и как потом разбирать информацию.


 
Evg12   (2004-01-24 00:11) [12]

To Alex Konshin: Только глянул, не проверял. А если проще сделать.
Проверять NT-евая система и в зависимости от результата тупо вызывать твою процедуру, или эту


 
Alex Konshin ©   (2004-01-24 00:27) [13]

Так я про NT и не говорю, там-то уж всяко лучше делать моим методом. Если приглядишься, то я в своих примерах систему проверяю, только вот на 9x/ME я пользуюсь smartvsd.vxd, а с ним-то и проблемы.


 
ЮрЫк   (2004-01-24 11:36) [14]

Сразу могу сказать, что есть харды, которые вне зависимости от операционки НЕ ЧИТАЮТСЯ...
Первый вариант мне дал VolumeLabel, а это далеко не то, что нужно.


 
ЮрЫк   (2004-01-24 11:39) [15]

И еще интересный штрих smartvsd.vxd для того, чтобы заработал должен перегрузить комп, а иногда это непозволительная роскошь.


 
Alex Konshin ©   (2004-01-24 14:16) [16]

Сразу могу сказать, что есть харды, которые вне зависимости от операционки НЕ ЧИТАЮТСЯ...
Современных не встречал, потому как SMART включен в стандарт ATA.
Его можно отключить, так и включить не проблема.
Насчет smartvsd.vxd: я в 9x/ME велосипедов не изобретал, я просто добавил этот код для создания хоть какой-то совместимости. Реально те примеры создавались для поиска путей решения этой проблемы на NT+ системах, что более-менее удалось - все-таки я научился читать s/n с IDE дисков не имея прав админа. Можно было бы попытаться там двинуться дальше, но лично мне это было уже не интересно, да и времени не нашел.
Если посмотреть, как это делают другие, то видно, что ничего нового на NT с тех пор не изобрели (хотя странно), либо используется мой способ, либо пишется драйвер. До смешного доходит: иногда на просторах интернета слышу о появлении какого-то нового способа, скачиваю, смотрю, а там даже мой копирайт сохранен.
А на 9x/ME, как я уже говорил, мне неинтересно. Мне даже потестировать-то негде.


 
ЮрЫк   (2004-01-24 16:22) [17]

вот у меня три компа - современных, Пень 4, на двух хард прочитывается серийный номер, а на другом ни под 98, ни под ХР хард не читается.


 
Di   (2004-01-24 18:44) [18]

А что за винт стоит на том компе где не читается серийный номер?


 
Alex Konshin ©   (2004-01-24 23:49) [19]

И какой контроллер?


 
Alex Konshin ©   (2004-01-24 23:51) [20]

И какой из примеров использовался для проверки (если IdeSN2, то какая дата)?


 
Evg12   (2004-01-25 11:35) [21]

Скажу еще больше. Нашел у себя драйвер, открывающий прямой доступ к портам под любой системой. Исправил исходник, который Alex Konshin выше запостил, так, чтоб все обращения к портам через драйвер делались. Опять, блин, прикол вылез - Под XP все работает, перегружаюсь в 98 и результат = 0.


 
ЮрЫк   (2004-01-25 14:54) [22]

HDD - ST340016A, IDE - ATA/ATAPI Controllers

а вот какой способ я использовал... хороший вопрос. Где это в исходнике... Сейчас буду искать, позже напишу


 
ЮрЫк   (2004-01-25 14:59) [23]

Вот фрагмент кода:


begin
Result := "";
FillChar(Buffer,BufferSize,#0);
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin // Windows NT, Windows 2000
// Get SCSI port handle
hDevice := CreateFile( "\\.\Scsi0:", GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
System.Move("SCSIDISK",srbControl.Signature,8);
srbControl.Timeout := 2;
srbControl.Length := DataSize;
srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
pInData := PSendCmdInParams(PChar(@Buffer)+SizeOf(SRB_IO_CONTROL));
pOutData := pInData;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT, @Buffer, BufferSize, @Buffer, BufferSize, cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end
else
begin // Windows 95 OSR2, Windows 98
hDevice := CreateFile( "\\.\SMARTVSD", 0, 0, nil, OPEN_EXISTING, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
pInData := PSendCmdInParams(@Buffer);
pOutData := PChar(@pInData^.bBuffer);
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA, pInData, SizeOf(TSendCmdInParams)-1, pOutData, W9xBufferSize, cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end;
with PIdSector(PChar(pOutData)+16)^ do
begin
ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
end;
end;


Шоб я знал, какой это IdeSN2 и какой даты :)


 
Alex Konshin ©   (2004-01-26 02:37) [24]

Теперь видно, что старый.
Теперь очень простой вопрос: ты уверен, что твой диск стоит на контроллере Scsi0 и что он там самый первый? Скорее всего нет.
Именно поэтому я и изменил потом IdeSN2 так, чтоб он пытался найти какой-нибудь диск на каком-нибудь контроллере, иначе люди просто использовали пример как есть и, естественно, потом заловались, что он "не работает". В то же время пример демонстрировал как это сделать именно для первого диска первого контроллера и предполагалось, что люди сами допишут то, что им нужно в их конкретной ситуации. Как оказалось, никто на это уточнение внимание не обращал :). Короче, мне надоело отвечать подобные на письма и я дописал свой пример так, чтоб было более понятно, как им пользоваться.
Так что бегом на мой сайт за более новой версией!


 
Alex Konshin ©   (2004-01-26 02:41) [25]

Evg12   (25.01.04 11:35) [21]
http://www.winsim.com/diskid32/diskid32.html чего-нибудь выдает?
Он работает через собственный vxd. Это должно быть более надежно.


 
ЮрЫк   (2004-01-26 21:18) [26]

Блин, большое спасибо, Алекс, все работает. Сейчас еще под 98 протестирую и тогда с меня пиво...


 
Evg12   (2004-01-29 22:53) [27]

To Alex Konshin: Еслиб это еще и на паскале было б...


 
Alex Konshin ©   (2004-01-30 05:14) [28]

Evg12   (29.01.04 22:53) [27]
Не, так если он выдает, то просто используй их vxd.
Какие проблемы?


 
Evg12   (2004-01-30 13:20) [29]

To Alex Konshin: Он то выдает, проверил на всем что под руки попалось.
Проблема вот какая: В VXD передавать команды надо и обрабатывать результат А у меня лично познаний в С столько, что можно сдавать в мерную палату, как абсолютный 0. Врядли смогу перенести DISKID32.CPP в паскаль без багов.
Может у когото есть время немного, Да займется...
А за одно раз уж все это в ринге 0, попутно в VXD добавит функции чтения и записи в аппаратные порты байта, Word и LongWord. (LPT, COM там всеякие). В хозяйстве былаб полезная вещ!


 
Alex Konshin ©   (2004-01-30 22:11) [30]

Насчет записи в порты - таких вещей уже много.
Насчет перевести - посмотрю. Может даже имеет смысл сделать свой vxd. Но у меня не на чем тестировать, ставить же ME мне чего-то не хочется.


 
Evg12   (2004-01-31 01:31) [31]

To Alex Konshin: 1. Ну а так будет два в одном. по моему разумно. Тем более, что если отсеять все дерьмо - остается практически один - ZLPortIO со включеным  zliosetiopm(true)
(Особо отвратительный из всех - LPTIO Автор: Гречко Ю.Б.).
2. Не надо делать свой. Не знаю как кто я лично придерживаюсь мнения автомехаников - "Не мешай машине ездить" работает, и хрен сней. Я уверен если перегнать максимально близко к сишному исходнику то пойдет с первого раза. На крайняк мне сольеш, я тестону. Только обрати внимание на DeviceIoControl ->  IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, что то я этого момента в упор не понял.


 
Alex Konshin ©   (2004-01-31 09:00) [32]

IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER по идее это для media, то есть, например, для CD или для USB flash.
Но тут http://msdn.microsoft.com/library/default.asp?url=/library/en-us/storage/hh/storage/k307_6r02.asp
вот что пишут:

Queries the USB generic parent driver for the serial number of a USB device. If a USB device has a CSM-1 content security interface, a USB client driver can query for its serial number using this request. USB client drivers that help implement a digital rights management (DRM) system can use this information to ensure that only legitimate customers have access to digitized intellectual property.


 
alexey_ar   (2004-02-01 11:11) [33]

все кто писали, что программа от Alex Konshin не работает - проверьте прав ли я в своем предположении: не работает, если запускать под Win95/98/Me и винт стоит Primary/Slave без мастера?


 
Alex Konshin ©   (2004-02-02 05:54) [34]

Попрубуйте это:
http://home.earthlink.net/~akonshin/files/IdeSN3b.zip
На Windows 9x/ME нужно скопировать прилагаемый ide21201.vxd в директорий \windows\system\iosubsys и возможно перезагрузится.
Если он работает, то тогда уже попробуем избавится от перезагрузки.

Я его не проверял на 95/ME, так как негде. Попробуйте и сообщите о результатах.


 
Pavel   (2004-02-02 10:39) [35]

Попробуй этот вариант. Проверено под Win98se.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics,
 Controls, Forms, Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

function GetIdeDiskSerialNumber(nn: integer) : String;
type
 TSrbIoControl = packed record
   HeaderLength : ULONG;
   Signature : Array[0..7] of Char;
   Timeout : ULONG;
   ControlCode : ULONG;
   ReturnCode : ULONG;
   Length : ULONG;
 end;
 SRB_IO_CONTROL = TSrbIoControl;
 PSrbIoControl = ^TSrbIoControl;

 TIDERegs = packed record
   bFeaturesReg : Byte; // Used for specifying SMART "commands".
   bSectorCountReg : Byte; // IDE sector count register
   bSectorNumberReg : Byte; // IDE sector number register
   bCylLowReg : Byte; // IDE low order cylinder value
   bCylHighReg : Byte; // IDE high order cylinder value
   bDriveHeadReg : Byte; // IDE drive/head register
   bCommandReg : Byte; // Actual IDE command.
   bReserved : Byte; // reserved for future use. Must be zero.
 end;
 IDEREGS = TIDERegs;
 PIDERegs = ^TIDERegs;

 TSendCmdInParams = packed record
   cBufferSize : DWORD; // Buffer size in bytes
   irDriveRegs : TIDERegs; // Structure with drive register values.
   bDriveNumber : Byte; // Physical drive number to send command to (0,1,2,3).
   bReserved : Array[0..2] of Byte; // Reserved for future expansion.
   dwReserved : Array[0..3] of DWORD; // For future use.
   bBuffer : Array[0..0] of Byte; // Input buffer.
 end;
 SENDCMDINPARAMS = TSendCmdInParams;
 PSendCmdInParams = ^TSendCmdInParams;

 TIdSector = packed record
   wGenConfig : Word;
   wNumCyls : Word;
   wReserved : Word;
   wNumHeads : Word;
   wBytesPerTrack : Word;
   wBytesPerSector : Word;
   wSectorsPerTrack : Word;
   wVendorUnique : Array[0..2] of Word;
   sSerialNumber : Array[0..19] of Char;
   wBufferType : Word;
   wBufferSize : Word;
   wECCSize : Word;
   sFirmwareRev : Array[0..7] of Char;
   sModelNumber : Array[0..39] of Char;
   wMoreVendorUnique : Word;
   wDoubleWordIO : Word;
   wCapabilities : Word;
   wReserved1 : Word;
   wPIOTiming : Word;
   wDMATiming : Word;
   wBS : Word;
   wNumCurrentCyls : Word;
   wNumCurrentHeads : Word;
   wNumCurrentSectorsPerTrack : Word;
   ulCurrentSectorCapacity : ULONG;
   wMultSectorStuff : Word;
   ulTotalAddressableSectors : ULONG;
   wSingleWordDMA : Word;
   wMultiWordDMA : Word;
   bReserved : Array[0..127] of Byte;
 end;
 PIdSector = ^TIdSector;

const
 IDE_ID_FUNCTION = $EC;
 IDENTIFY_BUFFER_SIZE = 512;
 DFP_RECEIVE_DRIVE_DATA = $0007c088;
 IOCTL_SCSI_MINIPORT = $0004d008;
 IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;
 DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
 BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
 W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
var
 hDevice : THandle;
 cbBytesReturned : DWORD;
 pInData : PSendCmdInParams;
 pOutData : Pointer; // PSendCmdInParams;
 Buffer : Array[0..BufferSize-1] of Byte;
 srbControl : TSrbIoControl absolute Buffer;

 procedure ChangeByteOrder( var Data; Size : Integer );
 var ptr : PChar;
     i : Integer;
     c : Char;
 begin
   ptr := @Data;
   for i := 0 to (Size shr 1)-1 do
   begin
     c := ptr^;
     ptr^ := (ptr+1)^;
     (ptr+1)^ := c;
     Inc(ptr,2);
   end;
 end;

begin
 Result := "";
 FillChar(Buffer,BufferSize,#0);
 if Win32Platform=VER_PLATFORM_WIN32_NT then
   begin // Windows NT, Windows 2000
     // Get SCSI port handle
     hDevice := CreateFile( "\\.\Scsi0:", GENERIC_READ or GENERIC_WRITE,
       FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
     if hDevice=INVALID_HANDLE_VALUE then Exit;
     try
       srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
       System.Move("SCSIDISK",srbControl.Signature,8);
       srbControl.Timeout := 2;
       srbControl.Length := DataSize;
       srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
       pInData := PSendCmdInParams(PChar(@Buffer)+SizeOf(SRB_IO_CONTROL));
       pOutData := pInData;
       with pInData^ do
       begin
         cBufferSize := IDENTIFY_BUFFER_SIZE;
         bDriveNumber := nn;
         with irDriveRegs do
         begin
           bFeaturesReg := 0;
           bSectorCountReg := 1;
           bSectorNumberReg := 1;
           bCylLowReg := 0;
           bCylHighReg := 0;
           bDriveHeadReg := $A0;
           bCommandReg := IDE_ID_FUNCTION;
         end;
       end;
       if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT, @Buffer,
         BufferSize, @Buffer, BufferSize, cbBytesReturned, nil ) then Exit;
     finally
       CloseHandle(hDevice);
     end;
   end
 else
   begin // Windows 95 OSR2, Windows 98
     hDevice := CreateFile( "\\.\SMARTVSD", 0, 0, nil, CREATE_NEW, 0, 0 );
     if hDevice=INVALID_HANDLE_VALUE then Exit;
     try
       pInData := PSendCmdInParams(@Buffer);
       pOutData := PChar(@pInData^.bBuffer);
       with pInData^ do
       begin
         cBufferSize := IDENTIFY_BUFFER_SIZE;
         bDriveNumber := nn;
         with irDriveRegs do
         begin
           bFeaturesReg := 0;
           bSectorCountReg := 1;
           bSectorNumberReg := 1;
           bCylLowReg := 0;
           bCylHighReg := 0;
           bDriveHeadReg := $A0;
           bCommandReg := IDE_ID_FUNCTION;
         end;
       end;
       if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA, pInData,
          SizeOf(TSendCmdInParams)-1, pOutData, W9xBufferSize,
          cbBytesReturned, nil ) then Exit;
     finally
       CloseHandle(hDevice);
     end;
   end;
   with PIdSector(PChar(pOutData)+16)^ do
   begin
     ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
     SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s : String;
  rc : DWORD;
   i : Byte;
begin
Memo1.Lines.Clear;
for i:=0 to 3 do
begin
 s := GetIdeDiskSerialNumber(i);
 if s="" then
   begin
     rc := GetLastError;
     if rc=0 then
      Memo1.Lines.Add(IntToStr(i)+":   "+"IDE drive is not support SMART feature")
      else Memo1.Lines.Add("SysErrorMessage "+IntToStr(rc));
   end
 else Memo1.Lines.Add(IntToStr(i)+":   "+"Disk serial number: "+s);
end;
end;

end.


 
Alex Konshin ©   (2004-02-02 10:51) [36]

:)))
Ты это мне предлагаешь? :-)))

Вот почему вредно не сохранять копирайты.


 
Evg12   (2004-02-02 15:13) [37]

Попробовал.
IdeSN строка 310 Ошибка: System Error Code 87 "Параметр задан не верно".


 
Alex Konshin ©   (2004-02-02 21:15) [38]

А, ну да, тяжело писать на нескольких языках сразу :).
Убери удвоение backslash (символов "\"), должно быть так:
hVxd := CreateFile( "\\.\IDE21201.VXD", 0, 0, nil, 0, FILE_FLAG_DELETE_ON_CLOSE, 0 );
Все остальное вроде выглядит как в оригинале.
Попробуй еще.


 
Evg12   (2004-02-03 04:47) [39]

Ты прав. Пашет на ура. Правда я уже и сам исправил.
Хреново что в хэлпе что-то на эту тему очень слабовато написано. Пришлось смотреть как народ делает.
Спасибо!!!


 
Alex Konshin ©   (2004-02-03 05:08) [40]

А перезагрузка требуется?



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

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

Наверх





Память: 0.6 MB
Время: 0.039 c
1-1081457787
noob
2004-04-09 00:56
2004.04.25
Потверждение закрытия приложения.


7-1077399444
BBCHa
2004-02-22 00:37
2004.04.25
Завершение чужой проги


1-1081246202
Awod
2004-04-06 14:10
2004.04.25
Создание MDI окон с кнопкой в таскбаре


8-1073771619
alex-drob
2004-01-11 00:53
2004.04.25
Печать


14-1080438124
Александр1
2004-03-28 05:42
2004.04.25
Управление exe





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