MORE INFORMATION
The following file is available for
download from the Microsoft Download Center:
Download the SmartApp.exe package now. Release
Date: Feb-04-1999
For additional information about how
to download Microsoft Support files, click the following
article number to view the article in the Microsoft Knowledge
Base:
119591
How to Obtain Microsoft Support Files from Online Services
Microsoft scanned this file for viruses. Microsoft used
the most current virus-detection software that was available
on the date that the file was posted. The file is stored on
security-enhanced servers that help to prevent any
unauthorized changes to the file.
File Name 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
Additional Considerations
Microsoft does not recommend
replacing SMARTVSD with your own implementation. For example,
if you want to make your own SCSI miniport respond to the
SMART API (SMARTVSD works only with devices on the IDE bus,
ignoring devices on the SCSI bus). If you do this, you will
disable SMART functionality for other third-party IDE devices
that use ESDI_506.