1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| PROCEDURE GetDriveInfo(nDriveNumber est un entier)
nHandleDrive est un entier sans signe
stDI est un STDrive_Info
bRetour est un booléen
stSCIP est un STSendCmdInParams
nBytesReturned est un entier sans signe sur 4 octets
stSec est un STIDSector
tabArrOut est un tableau de OUTPUT_DATA_SIZE entier sans signe sur 1 octet
sfArrOut est une chaîne fixe sur 528
nIndex est un entier
nHandleDrive =API("kernel32","CreateFileA","\\.\PhysicalDrive"+nDriveNumber,OUBinaire(GENERIC_READ,GENERIC_WRITE),OUBinaire(FILE_SHARE_READ,FILE_SHARE_WRITE),0,OPEN_EXISTING,0,0)
SI nHandleDrive <> -1 ALORS
stDI:nDriveType = 0
stDI:nNumAttributes = 0
Dimension(stDI:tabAttributes,0)
stDI:nDriveType = 1
stSCIP:nBufferSize = 0
stSCIP:stIrDriveRegs:nFeaturesReg = SMART_ENABLE_SMART_OPERATIONS
stSCIP:stIrDriveRegs:nSectorCountReg = 1
stSCIP:stIrDriveRegs:nSectorNumberReg = 1
stSCIP:stIrDriveRegs:nCylLowReg = SMART_CYL_LOW
stSCIP:stIrDriveRegs:nCylHighReg = SMART_CYL_HI
stSCIP:stIrDriveRegs:nDriveHeadReg = 0xA0
SI PAS (Val(SysVersionWindows(sysVersionNuméro)) >= 4 ET SysVersionWindows(sysVersionPlateForme) = "NT") ALORS
stSCIP:stIrDriveRegs:nDriveHeadReg = OUBinaire(stSCIP:stIrDriveRegs:nDriveHeadReg,(ETBinaire(nDriveNumber,1) * 16))
FIN
stSCIP:stIrDriveRegs:nCommandReg = IDE_EXECUTE_SMART_FUNCTION
stSCIP:nDriveNumber = nDriveNumber
SI API("kernel32","DeviceIoControl",nHandleDrive,DFP_SEND_DRIVE_COMMAND,&stSCIP,32,&sfArrOut,16,&nBytesReturned,0) ALORS
stSCIP:nBufferSize = IDENTIFY_BUFFER_SIZE
stSCIP:nDriveNumber = nDriveNumber
stSCIP:stIrDriveRegs:nFeaturesReg = 0
stSCIP:stIrDriveRegs:nSectorCountReg = 1
stSCIP:stIrDriveRegs:nSectorNumberReg = 1
stSCIP:stIrDriveRegs:nCylLowReg = 0
stSCIP:stIrDriveRegs:nCylHighReg = 0
stSCIP:stIrDriveRegs:nDriveHeadReg = 0xA0
SI PAS (Val(SysVersionWindows(sysVersionNuméro)) >= 4 ET SysVersionWindows(sysVersionPlateForme) = "NT") ALORS
stSCIP:stIrDriveRegs:nDriveHeadReg = OUBinaire(stSCIP:stIrDriveRegs:nDriveHeadReg,(ETBinaire(nDriveNumber,1) * 16))
FIN
stSCIP:stIrDriveRegs:nCommandReg = IDE_ID_FUNCTION
bRetour = API("kernel32","DeviceIoControl",nHandleDrive,DFP_RECEIVE_DRIVE_DATA,&stSCIP,32,&sfArrOut,OUTPUT_DATA_SIZE,&nBytesReturned,0)
Transfert(&stSec,(&sfArrOut+16),256)
POUR nIndex = 1 _A_ (Taille(stSec:sfModelNumber)-1) PAS 2
stDI:sModel+= stSec:sfModelNumber[[nIndex+1]]+stSec:sfModelNumber[[nIndex]]
FIN
POUR nIndex = 1 _A_ (Taille(stSec:sfSerialNumber)-1) PAS 2
stDI:sSerialNumber+= stSec:sfSerialNumber[[nIndex+1]]+stSec:sfSerialNumber[[nIndex]]
FIN
stDI:sModel = SansEspace(stDI:sModel)
stDI:sSerialNumber = SansEspace(stDI:sSerialNumber)
FIN
FIN
RENVOYER(stDI) |
Partager