Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777 (+6 невидимых) |
![]() |
eXeL@B —› Программирование —› Определение текущего HDD |
Посл.ответ | Сообщение |
|
Создано: 21 июля 2008 11:15 · Личное сообщение · #1 |
|
Создано: 21 июля 2008 12:27 · Личное сообщение · #2 |
|
Создано: 21 июля 2008 13:31 · Личное сообщение · #3 Вот примерчик на Делфе: procedure CorrectDevInfo(buff: pchar); // Вспомогательная процедура var i,idx:integer; x : word; begin for i:=0 to 9 do begin idx := $14+i+i; x := pword(buff+idx)^; pword(buff+idx)^ := swap(x); end; for i := 0 to $17 do begin idx := $14+26+i+i; x := pword(buff+idx)^; pword(buff+idx)^ := swap(x); end; end; procedure GetDevInfoNT(devno : byte); var gvip:GETVERSIONINPARAMS; scip : SENDCMDINPARAMS; scop : SENDCMDOUTPARAMS; cmd:BYTE; dwBytesReturned:DWORD; h:Cardinal; begin scsiflag := false; h := Createfile( pchar('\.\PhysicalDrive'+inttostr(devno)), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0); if h = INVALID_HANDLE_VALUE then raise Exception.Create('Can''t create device handle!'); try fillchar(gvip,sizeof(GETVERSIONINPARAMS),#0); fillchar(scip,sizeof(SENDCMDINPARAMS),#0); fillchar(scop,sizeof(SENDCMDOUTPARAMS),#0); if not DeviceIoControl(h,SMART_GET_VERSION,nil,0,@gvip, sizeof(GETVERSIONINPARAMS),dwBytesReturned,nil) then raise Exception.Create('DeviceIoControl filed!'); // if ((gvip.gvip_bIDEDeviceMap shr devno) and 1) = 1 then cmd := ID_CMD; // else // cmd := ATAPI_ID_CMD; scip.scip_dwBufferSize := 512; scip.scip_bDriveNumber := devno; scip.scip_irDriveRegs.ir_bSectorCountReg := 1; scip.scip_irDriveRegs.ir_bSectorNumberReg := 1; scip.scip_irDriveRegs.ir_bDriveHeadReg := ((devno + 1) shl 4) or $a0; scip.scip_irDriveRegs.ir_bCommandReg := cmd; if not DeviceIoControl(h,SMART_RCV_DRIVE_DATA,@scip,sizeof(SENDCMDINPARAMS), @scop,sizeof(SENDCMDOUTPARAMS),dwBytesReturned,nil) then raise Exception.Create('DeviceIoControl filed!'); if scop.scop_dsDriverStatus.ds_bDriverError <> DRVERR_NO_ERROR then raise Exception.Create('DeviceIoControl returned error!'); CorrectDevInfo(scop.scop_bBuffer); move(scop.scop_bBuffer, IdeInfo, 512); finally CloseHandle(h); end; end; ![]() |
|
Создано: 21 июля 2008 13:58 · Личное сообщение · #4 MSDN: To obtain the physical drive for a volume, open a handle to the volume and call the DeviceIoControl function with IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS. This control code returns the disk number of offset for each of the volume's extents; a volume can span disks. Так что из командной строки или вызовом GetModuleFileName(NULL) надо получить логический диск, потом открыть его CreateFile, а потом DeviceIoControl(handle, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, ...). ![]() |
|
Создано: 21 июля 2008 18:06 · Поправил: Isaev · Личное сообщение · #5 |
|
Создано: 22 июля 2008 10:17 · Личное сообщение · #6 Isaev Сорри... Это вырезано из моего проекта ( у меня та же задача стояла - привязать прогу к компу). В аттаче исходники, что компилируются без проблем. ![]() ![]() |
|
Создано: 22 июля 2008 15:17 · Личное сообщение · #7 =) А на асме есть чтонить еще по жестким ???. Вот тут на асме вроде серийник , но что то очень странно там ))) жесткий у меня один ! а н разделы серийники выдает ! Я гдето видел асм листинг там вообще все данные жесткого собирались , найти не могу. ![]() ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 22 июля 2008 15:28 · Личное сообщение · #8 |
|
Создано: 23 июля 2008 16:46 · Личное сообщение · #9 Thrasher Isaev пишет: Я SN уже получил см. аттач Вопрос был: Если в компьютере больше одного HDD, каким образом можно определить с какого именно запущена программа? т.к. если HDD 2 или 3, какой из них прога должна проверять? Конечно с которого она стартует... А как определить с какого она стартует и сопоставить с данными, полученными прогой? Может в какой структуре это и отображается, просто место не знаю. ![]() ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 05 августа 2008 15:18 · Личное сообщение · #10 |
![]() |
eXeL@B —› Программирование —› Определение текущего HDD |
Эта тема закрыта. Ответы больше не принимаются. |