Microsoft KB Archive/196550

{|
 * width="100%"|

HOWTO: Access IDE Controller Registers Using IDE Passthrough

 * }

Q196550

-

The information in this article applies to:


 * Microsoft Win32 Device Driver Kit (DDK) versions Windows 95, Windows 98

-

SUMMARY
Windows 95 device driver programmers can use the IOS IOR_IDE_PASS_THROUGH command to directly access an IDE disk controller's command and control registers, if using Windows 95 Version B (also known as OSR2) or later.

MORE INFORMATION
The support for this command is provided in the IDE port driver, ESDI_506.pdr.

IDE Passthrough support was added to accommodate the Vendor-Supplied Driver Smartvsd.vxd (Self-Monitoring Analysis and Reporting Technology) that resides in the IOS layered driver hierarchy.

The latest ESDI_506.pdr driver for Windows 95 can be found at the following location:

"http://support.microsoft.com/support/downloads/dp2884.asp" Alternatively, perform a device driver search for ESDI_506.pdr or Remideup.exe.

NOTE: This driver is available for download by the end user, not for distribution by the developer. This policy helps ensure a single control point for device driver versions.

Following are the general IOP specifications for the IDE Passthrough command that is processed by the IDE port driver ESDI_506.pdr.

On request calldown, the following IOP fields should be completed, as well as the DCB fields and other normally completed fields. The IOP, IDE register structure, and buffer must be locked. Register EBX must point to the BDD portion of the DCB (DCB_bdd) when IOS_SendCommand is called with a passthrough request:

IOR_func:

IOR_IDE_PASS_THROUGH (0x2B)

IOR_buffer_pointer:

linear buffer pointer if data transfer is to occur.

IOR_xfer_count:

transfer length if the command involves transfer of data (0 if none).

IOR_requestor_usage[0]:

Initially contains the seven parameters to send to be written to the IDE task file (command and control registers). When the port driver completes, this field contains the end-of-command values of the task file registers.

typedef struct _IDEREGS {

BYTE bFeaturesReg;     // Used for specifying DFP "sub commands". BYTE bSectorCountReg;  // IDE sector count register. BYTE bSectorNumberReg; // IDE sector number register. BYTE bCylLowReg;       // IDE low order cylinder value. BYTE bCylHighReg;      // IDE high order cylinder value. BYTE bDriveHeadReg;    // IDE drive/head register. BYTE bCommandReg;      // Actual IDE command. Checked for validity by                             driver.

} IDEREGS, *PIDEREGS, *LPIDEREGS;

IOR_flags:

IORF_DATA_IN if reading from drive, IORF_DATA_OUT if writing to drive. Neither should be set if no data is transferred. Also set the following flags: IORF_HIGH_PRIORITY, IORF_SYNC_COMMAND, and IORF_VERSION_002.

IOR_next, IOR_start_addr[2], IOR_req_vol_handle:

Set these fields to zero.

IOR_vol_designtr:

Set equal to DCB_unit_number. Physical unit (0x80) based.

On request callback, the task file register structure, is updated to reflect each value in the task file. Good IOR_STATUS= IORS_SUCCESS is always returned for passthrough requests. You can find specifications for SMART IDE at the ring 3 (application) level on the following Web site:

"http://www.microsoft.com/hwdev/respec/storspec.htm" NOTE: If the IDE port driver is not loaded, then SMARTVSD does not load. Any attempt by an application to open SMARTVSD then fails.

Additional query words:

Keywords : kbDDK kbStorageDev kbOSWin95 kbOSWin98

Issue type : kbhowto

Technology : kbAudDeveloper kbWin95search kbWin98search kbWinDDKSearch kbWin32sSearch kbWin32DDK95 kbWin32DDKSearch kbWin32DDK98