Q208048 SmartApp.exe Accesses SMART Stats in IDE Drives

Posted by Programmer™
2022. 3. 11. 10:33 카테고리 없음

-------------------------------------------------------------------------------
The information in this article applies to:

 - Microsoft Win32 Device Driver Kit (DDK), on platform(s):
    - Microsoft Windows 98 
    - Microsoft Windows 95 
-------------------------------------------------------------------------------

 

SUMMARY
=======

SmartApp.exe is a sample Win32 application that demonstrates how to access the
SMART (Self Monitoring, Analysis and Reporting Technology) capabilities built
into IDE disk drives.

SMART technology is used to monitor disk drive degradation, in an effort to
predict future catastrophic disk failure. For more information about SMART
technology, see the REFERENCES section at the end of this article.

While this article primarily centers on using SMART technology with Windows 95
and Windows 98, it also includes information about how to modify SmartApp.exe to
work with Windows NT and Windows 2000.

 

MORE INFORMATION
================

 

The following file is available for download from the Microsoft Software
Library:

 

    SmartApp.exe

    (http://support.microsoft.com/download/support/mslfiles/SmartApp.exe)

 

Release Date: Feb-04-1999

 

For more information about downloading files from the Microsoft Software Library,
please see the following article in the Microsoft Knowledge Base:

 

   Q119591 How to Obtain Microsoft Support Files from Online Services

   FileName                Size
   -----------------------------

   SMARTAPP.C              17776
   SMARTAPP.H               1613
   SMART.H                  9857
   SMARTAPP.DOC            74240

 

USING THE SMARTAPP SAMPLE CODE
------------------------------

SmartApp.exe is a console application that you run from a DOS command prompt. You
should set up your command prompt window for 43 or 50 lines or direct the
program's output report to a file (for example, type SmartApp.exe
>c:\print.txt) because SmartApp.exe can report over 25 lines of text data.
Following is a sample report produced by SmartApp.exe:

 

SMARTVSD opened successfully
DFP_GET_VERSION returned:
   bVersion        = 1
   bRevision       = 2
   fCapabilities   = 0x7
   bReserved       = 0x0
   bIDEDeviceMap   = 0x1
   cbBytesReturned = 24
SMART Enabled on Drive: 0
   cbBytesReturned: 12
Drive 0 is an IDE Hard drive that supports SMART
   #Cylinders: 4960, #Heads: 16, #Sectors per Track: 63
   IDE TASK FILE REGISTERS:
      bFeaturesReg     = 0x0
      bSectorCountReg  = 0x1
      bSectorNumberReg = 0x1
      bCylLowReg       = 0x0
      bCylHighReg      = 0x0
      bDriveHeadReg    = 0xA0
      Status           = 0x50
   Model number: WDC AC22500L
   Firmware rev: 40.44T40
   Serial number: WD-WM3493798728
   cbBytesReturned: 512
Data for Drive Number 0
Attribute Structure Revision          Threshold Structure Revision
             5                                      5
       -Attribute Name-      -Attribute Value-     -Threshold Value-
 1 Raw Read Error Rate              200                   51
 4 Start/Stop Count                 100                   40
 5 Reallocated Sector Count         200                   0
 A Spin Retry Count                 100                   51
 B Calibration Retry Count          100                   51
C7 (Unknown attribute)              200                   0
C8 (Unknown attribute)              100                   51

The Attribute fields are defined (and refined) solely by the disk drive OEM
manufacturers.
The source code (that is, Smart.h, SmartApp.h, and SmartApp.c) was compiled and
tested using Visual Studio with Microsoft VC++ 5.0 as a console application.

 

COMMON WINDOWS 95 PROBLEMS
--------------------------

 - SMARTVSD packs the structures for the DeviceIoControl in and out buffers
   differently from the default packing used by MSVC. The application needs to
   specify #pragma pack(1) to get the structure packing to match SMARTVSD.

 - SMARTVSD subtracts 1 from the size of the SENDCMDOUTPARAMS when it validates
   the size of the SENDCMDOUTPARAMS passed to it by the application. Using the
   above packing, the size of the structure in the SMART VSD doc would be 17
   bytes long. SMARTVSD apparently compares the buffer size passed in
   DeviceIoControl to 16. This is presumably to discount the variable size
   buffer array at the end of the structure, which is defined as 1 byte long in
   the docs. The sizes of the SENDCMDINPARAMS and SENDCMDOUTPARAMS structures
   specified in the DeviceIoControl call should not include the variable size
   buffers located at the end of each structure.

 

COMPILING AND USING SMARTAPP.EXE WITH WINDOWS NT OR WINDOWS 2000
----------------------------------------------------------------

To compile SmartApp.exe for Windows NT or Windows 2000, comment out or delete the
following line located at the beginning of SmartApp.c:

   #define WINDOWS9X   // Define this to compile for Windows 9x

For Windows NT and Windows 2000, the IOCTL call for SMART_GET_VERSION always
returns a bIDEDeviceMap value of 1. You must select the target physical drive
using the CreateFile() function. Note that for Windows 95 and Windows 98, the
target physical drive is selected after inspecting bIDEDeviceMap. When the
symbol WINDOWS9X is not defined (for example, when you are compiling SMARTAPP
for the Windows NT or Windows 2000 environment), SMARTAPP currently only opens
and reports the first physical drive, using the following:

   CreateFile("\\\\.\\PhysicalDrive0",GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL)

To view other drives, change the PhysicalDrive parameter to a value other than 0.
Note that you can also open a drive by specifying the drive letter. For
example:

   CreateFile("\\\\.\\c:",GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL)

 

SMARTVSD TROUBLESHOOTING CHECKLIST
----------------------------------

If opening SMARTVSD fails in Window 95 or Windows 98, one of the following might
be the cause:

 - You are using the original version of Windows 95, which does not support
   SMART (the SDI_506.PDR port driver does not contain IDE PASSTHROUGH
   functionality).

 - SMARTVSD.VXD is not installed in the \windows\system\iosubsys directory.

 - You did not restart after installing SMARTVSD.VXD.

 - Your filesystem is running in Compatibility Mode (see the System Properties
   dialog box, click the Performance tab). This means that the protected mode
   IOS subsystem, containing SMARTVSD, is being bypassed.

 - Your system does not have any IDE drives. ESDI_506.PDR does not remain
   resident if there are no IDE drives.

 - Your IDE drives are using a third-party SCSI miniport driver instead of
   Microsoft's ESDI_506 driver.

 - Windows 98 inadvertently omitted SMARTVSD.

If SMARTVSD opens, but you fail to get meaningful data, the IDE drive might not
support SMART (especially older drives).

 

 

COMMON QUESTIONS
----------------

 - How does IDE hardware report that it supports SMART functionality?

   This information is described in detail in the ATA3 or ATA4 specifications
   (see References at the end of this article). Specifically, Word 82 Bit 0 in
   the Identify Device structure indicates the drive supports SMART.

 - How does SMARTVSD communicate with the hard drive(s)?

   SMARTVSD is an IOS layered-hierarchy VSD (Vendor Supplied Driver). At the
   "top" side, SMARTVSD provides the DeviceIoControl functionality to
   communicate with WIN32 applications. At the "bottom" side, SMARTVSD
   communicates with the IDE device driver (ESDI_506.PDR) using an API called
   IDE Passthrough.

   IDE Passthrough was added to the OPK1 version (and later) of Windows 95. For
   additional information about this mechanism, please see the following
   article(s) in the Microsoft Knowledge Base:

   Q196550 HOWTO: Access IDE Controller Registers Using IDE Passthrough
   You can use IDE Passthrough to read or write the IDE controller's registers,
   from your own IOS layer VSD (Vendor Supplied Driver).

 

REFERENCES

==========

SMALL FORM FACTOR COMMITTEE (SFF) SPECIFICATIONS:

   ftp://fission.dt.wdc.com/pub/standards/SFF/specs/

   SFF-8035i (Self-Monitoring, Analysis and Reporting Technology, Version 1.0 May
   3, 1995)

   INF-8055i (S.M.A.R.T. Applications Guide for the ATA and SCSI interfaces)

ATA SPECIFICATIONS:

   ftp://fission.dt.wdc.com/pub/standards/ata/
   ftp://fission.dt.wdc.com/pub/standards/ata/ata-3/ata3-r6.doc

 

MICROSOFT SMART IOCTL API SPECIFICATIONS:

 

   http://premium.microsoft.com/msdn/library/specs/d4/iocltapi.htm

   http://www.microsoft.com/hwdev/download/respec/iocltapi.rtf

 

MISCELLANEOUS RESOURCES:

Check out the web sites of companies that manufacture IDE drives, such as Western
Digital, IBM, and Seagate to obtain additional manufacturer-specific information
about SMART technology.

 

smartapp.EXE
0.03MB

 

 

Q252215: SMART Capability Available for Released Version of Windows 95