ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Получение серийного номера Ide диска
  #1  
Старый 22.05.2008, 14:11
Аватар для KSoniX
KSoniX
Познающий
Регистрация: 17.01.2008
Сообщений: 94
Провел на форуме:
314553

Репутация: 38
Отправить сообщение для KSoniX с помощью ICQ
По умолчанию Получение серийного номера Ide диска

вот пример из инета но он на delphi
Код:
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Поличение серийного номера IDE диска.  Функция 
получает серийный номер первого физического диска IDE 
(не серийный номер тома!). Используется S.M.A.R.T. API, а 
под Windows NT/2K/XP запрос производится не напрямую к
 диску, а через miniport драйвер контроллера, что позволяет читать серийный номер не имея прав 
администратора. Функция может не работать, если первый 
контролер в системе не ATA или если первое устройство не 
является винчестером, который поддерживает SMART 
(современные винчестеры поддерживают). Если Вы хотите 
получить другие параметры диска/других дисков, то 
смотрите пример IdeInfo2 с моего сайта. На Windows 9x 
требует наличия драйвера smartvsd.vxd (должен быть в 
стандартной поставке), просто скопируйте его в \windows
\system\iosubsys и перезагрузите компьютер.  Зависимости: 
Windows, SysUtils Автор: Alex Konshin, 
akonshin@earthlink.net, Boston, USA Copyright: 
http://home.earthlink.net/~akonshin/index.htm Дата: 30 
декабря 2002 г. 
***************************************************** }  

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);
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_CONT ROL));
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, 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 := 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(sSerialNumbe r)); 
end; 
end; 

 Пример использования:  
var s : String; rc : DWORD; 
begin 
s := GetIdeDiskSerialNumber; 
if s='' then 
begin 
rc := GetLastError; 
if rc=0 then 
WriteLn('IDE drive is not support SMART feature') 
else 
WriteLn(SysErrorMessage(rc)); end else WriteLn('Disk serial number: ''', s,''''); 
end.  

Автор: Alex Konshin, akonshin@earthlink.net, Boston, USA
помогите плз переделать его на С++

added:

или у каго есть что нибуть похожее на этот пример на с++

мне надо взять серийного номер диска

Последний раз редактировалось Jes; 22.05.2008 в 15:36..
 
Ответить с цитированием

  #2  
Старый 22.05.2008, 15:41
Аватар для GlOFF
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме:
1845671

Репутация: 1338


Post

Цитата:
DWORD GetSerialHDD()
{
DWORD VolumeSerialNo;
GetVolumeInformation("C:\\", 0,0,&VolumeSerialNo, 0, 0, 0,0);
return VolumeSerialNo;
}
 
Ответить с цитированием

  #3  
Старый 22.05.2008, 16:28
Аватар для KSoniX
KSoniX
Познающий
Регистрация: 17.01.2008
Сообщений: 94
Провел на форуме:
314553

Репутация: 38
Отправить сообщение для KSoniX с помощью ICQ
По умолчанию

мне надо взять серийного номер диска не тома

спасибо GlOFF
 
Ответить с цитированием

  #4  
Старый 23.05.2008, 14:50
Аватар для Amoura
Amoura
Участник форума
Регистрация: 23.01.2008
Сообщений: 182
Провел на форуме:
2268999

Репутация: 410
Отправить сообщение для Amoura с помощью ICQ
По умолчанию

http://www.sources.ru/cpp/cpp_show_ide_information.shtml

почитай, может подойдет..
 
Ответить с цитированием

  #5  
Старый 23.05.2008, 20:51
Аватар для _Great_
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

>>DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT,
>>rbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
>>CreateFile( '\\.\Scsi0:',

интересный у тебя ide диск
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Большой выбор 6-ти значных номеров Rusil ICQ - Покупка, продажа 57 14.06.2010 22:04
Обзор программ для очистки жёсткого диска v1ru$ Soft - Windows 21 17.01.2010 21:07
Вся история ICQ, Mirabilis; первые найденные Баги ICQ Mr. P.S. Авторские статьи 19 25.04.2008 23:21



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ