Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        /// <summary>S.M.A.R.T. attibutes</summary>
        public DiscAPI.DRIVEATTRIBUTE[] GetAttributes()
        {
            DiscAPI.DRIVEATTRIBUTE[] result = new DiscAPI.DRIVEATTRIBUTE[Constant.NUM_ATTRIBUTE_STRUCTS];
            UInt32 padding = 2;

            DiscAPI.SENDCMDOUTPARAMS prms = this.GetAttributeParamsNative();
            using (PinnedBufferReader reader = new PinnedBufferReader(prms.bBuffer))
            {
                result = new DiscAPI.DRIVEATTRIBUTE[Constant.NUM_ATTRIBUTE_STRUCTS];

                for (Int32 loop = 0; loop < result.Length; loop++)
                {
                    result[loop] = reader.BytesToStructure <DiscAPI.DRIVEATTRIBUTE>(ref padding);
                }
            }
            return(result);
        }
Exemplo n.º 4
0
 private void ToggleEnableSmart()
 {
     DiscAPI.SENDCMDOUTPARAMS enabled = this.SmartEnabled;
 }