Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> серийный номер HDD, не работает на Windows Server 2003 
:(
    Опции темы
FireAlex
Дата 1.11.2005, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.11.2004

Репутация: нет
Всего: нет



как узнать серийный номер жесткого диска (не раздела), работающего под Windows Server 2003.
на нашем серваке не работает ни один из многочисленных способов, кроме одной консольной проги на С:
http://www.winsim.com/diskid32/diskid32.html - там есть исходники

проблема в том -как переписать её на дельфи ? может кто то уже это сделал. поделитесь...

PM MAIL   Вверх
p0s0l
Дата 1.11.2005, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Попробуй код в этой теме, изменив "Scsi0:" на "PhysicalDrive0"
http://forum.vingrad.ru/index.php?showtopi...l=physicaldrive


--------------------
С уважением, г-н Посол.
PM   Вверх
FireAlex
Дата 1.11.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.11.2004

Репутация: нет
Всего: нет



не помогает - пишет "parameter is incorrect"
не работает и со scsi0

PM MAIL   Вверх
p0s0l
Дата 1.11.2005, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Судя по коду, там используется 3 способа:
в 9x - через порты
в NT - через IOCTL_SCSI_MINIPORT и через DFP_RECEIVE_DRIVE_DATA
Значит остается попробовать только через SMART API - DFP_RECEIVE_DRIVE_DATA - это реализовано в той ссылке, которую я тебе дал, но работает там только в случае Win9x, меняем CreateFile и получаем:
Код
//-----------------------------------------
function GetIdeDiskSerialNumber : 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);
      hDevice := CreateFile( '\\.\PhysicalDrive0', 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    
        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;
    with PIdSector(PChar(pOutData)+16)^ do
    begin
      ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
      SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
    end;
end;



--------------------
С уважением, г-н Посол.
PM   Вверх
FireAlex
Дата 1.11.2005, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.11.2004

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1202 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.