Ceci est une ancienne révision du document !
DeviceIOControl en Pascal
Commandes
SMART_SEND_DRIVE_COMMAND
Types utiles
TSendCmdInParams
- jwawinioctl.pas
_SENDCMDINPARAMS = packed record cBufferSize: DWORD; // Buffer size in bytes irDriveRegs: IDEREGS; // 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; ... _IDEREGS = 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;
TSendCmdOutParams
- jwawinioctl.pas
_SENDCMDOUTPARAMS = packed record cBufferSize: DWORD; // Size of bBuffer in bytes DriverStatus: DRIVERSTATUS; // Driver status structure. bBuffer: array [0..0] of BYTE; // Buffer of arbitrary length in which to store the data read from the // drive. end; ... _DRIVERSTATUS = packed record bDriverError: BYTE; // Error code from driver, // or 0 if no error. bIDEError: BYTE; // Contents of IDE Error register. // Only valid when bDriverError // is SMART_IDE_ERROR. bReserved: array [0..1] of BYTE; // Reserved for future expansion. dwReserved: array [0..1] of DWORD; // Reserved for future expansion. end;
A etudier
BOOL CSmartReader::IsSmartEnabled(HANDLE hDevice,UCHAR ucDriveIndex) { SENDCMDINPARAMS cmdInParams={0}; SENDCMDOUTPARAMS smdOutParams={0}; DWORD dwRet=0; BOOL bRet=FALSE; cmdInParams.cBufferSize=0; cmdInParams.bDriveNumber =ucDriveIndex; cmdInParams.irDriveRegs.bFeaturesReg=ENABLE_SMART; cmdInParams.irDriveRegs.bSectorCountReg = 1; cmdInParams.irDriveRegs.bSectorNumberReg = 1; cmdInParams.irDriveRegs.bCylLowReg = SMART_CYL_LOW; cmdInParams.irDriveRegs.bCylHighReg = SMART_CYL_HI; cmdInParams.irDriveRegs.bDriveHeadReg = DRIVE_HEAD_REG; cmdInParams.irDriveRegs.bCommandReg = SMART_CMD; bRet=DeviceIoControl(hDevice,SMART_SEND_DRIVE_COMMAND,&cmdInParams,sizeof(cmdInParams),&smdOutParams,sizeof(smdOutParams),&dwRet,NULL); if(!bRet) { dwRet=GetLastError(); } return bRet; }
Sources
Sources
Vous pourriez laisser un commentaire si vous étiez connecté.