/// <summary>Get system device info structure</summary> /// <param name="bytesReturned">Length of system device info</param> /// <returns>System device info structure</returns> private DiscAPI.SENDCMDOUTPARAMS GetDeviceInfo(out UInt32 bytesReturned) { DiscAPI.SENDCMDINPARAMS inParams = DiscAPI.SENDCMDINPARAMS.Create(false); inParams.cBufferSize = Constant.BUFFER_SIZE; inParams.irDriveRegs.bCommandReg = DiscAPI.IDEREGS.IDE.ID_CMD; DiscAPI.SENDCMDOUTPARAMS outParams = this.DeviceIoControl(Constant.IOCTL_DISC.SMART_RCV_DRIVE_DATA, inParams, out bytesReturned); return(outParams); }
private DiscAPI.SENDCMDOUTPARAMS ReadAttributes(DiscAPI.IDEREGS.SMART featureReg) { DiscAPI.SENDCMDINPARAMS inParams = DiscAPI.SENDCMDINPARAMS.Create(true); inParams.cBufferSize = Constant.BUFFER_SIZE; inParams.irDriveRegs.bFeaturesReg = featureReg; UInt32 bytesReturned; return(this.DeviceIoControl(Constant.IOCTL_DISC.SMART_RCV_DRIVE_DATA, inParams, out bytesReturned)); }
/// <summary>Send device IO control command</summary> /// <param name="inParams">In command params</param> /// <param name="dwIoControlCode">Control code</param> /// <param name="bytesReturned">Bytes returned from command operation</param> /// <returns>Out device params</returns> private DiscAPI.SENDCMDOUTPARAMS DeviceIoControl(UInt32 dwIoControlCode, DiscAPI.SENDCMDINPARAMS inParams, out UInt32 bytesReturned) { DiscAPI.SENDCMDOUTPARAMS result = this.Device.IoControl <DiscAPI.SENDCMDOUTPARAMS>( (UInt32)dwIoControlCode, inParams, out bytesReturned); if (result.DriverStatus.bDriverError != DiscAPI.DRIVERSTATUS.SMART_ERROR.NO_ERROR) { throw new InvalidOperationException(result.DriverStatus.bDriverError.ToString()); } else { return(result); } }