Solved

Perform a IDE bus reset using SPTI on Windows 2K/XP

Posted on 2001-09-01
10
643 Views
Last Modified: 2013-12-04
I would like to do a IDE bus reset (NT4/Win2K/XP using SPTI).

What have I got so far (also see code below) :
- This code works just fine in NT4 and resets any IDE bus just fine.
- This code does not work with the standard IDE drivers on Win2K and WinXP (if you however try it with e.g. a Promise IDE controller it will work ; apparently those drivers accept a bus reset request using the method below).

What would I like to do ?
- Perform a reset of any IDE bus in Win2K and WinXP (using the standard IDE drivers which are installed by default by the OS).

Thanks,


#include <windows.h>
#include <iostream.h>
void main()
{

  unsigned long ByteCount,Status;
  HANDLE DeviceHandle;

  DeviceHandle=CreateFile("\\\\.\\Scsi2:",
     GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,
     NULL,OPEN_EXISTING,0,NULL);

  if(DeviceHandle==INVALID_HANDLE_VALUE) {
     cout<<"Unable to open "<<GetLastError()<<endl;
     return;
  }
  cout<<"DeviceHandle="<<DeviceHandle<<endl;

  STORAGE_BUS_RESET_REQUEST rreq={0};

  Status=DeviceIoControl(DeviceHandle,OBSOLETE_IOCTL_STORAGE_RESET_BUS,&rreq,sizeof(rreq),
     NULL,0,&ByteCount,FALSE);
  cout<<Status<<' '<<GetLastError()<<endl;

  CloseHandle(DeviceHandle);
}
0
Comment
Question by:skris
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
10 Comments
 
LVL 32

Expert Comment

by:jhance
ID: 6447797
I don't find:

IOCTL_STORAGE_RESET_BUS

or

OBSOLETE_IOCTL_STORAGE_RESET_BUS

listed in the SDK as being supported by the DeviceIoControl() API.  The IOCTL_STORAGE_RESET_BUS is in the DDK as a valid IRP function but this would need a kernel-mode driver to activate it.

I think you are running into a situation where the Promise IDE controller does support this optional command via DeviceIoContol and NT4 does as well but it's been removed from W2K and later.  That's what happens when you use undocumented or obsolete stuff.  Sometimes they really do turn them off..
0
 
LVL 32

Expert Comment

by:jhance
ID: 6447799
Oh, I forgot to say...

How to do this now? Write a device driver of your own that can send an IRP to the IDE device (in kernel mode) to request that it do a IOCTL_STORAGE_RESET_BUS.
0
 
LVL 1

Expert Comment

by:Moondancer
ID: 6448161
This appears to be a "work in progress" of some complexity so this may well be relevant to this pursuit:

qid=10947941

If I'm incorrect, skris, please advise.  Just trying to help you achieve our goal and allow all participating experts to be apprised of the details that may have led to this.

Thanks,

Moondancer
Community Support Moderator @ Experts Exchange
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 1

Expert Comment

by:Moondancer
ID: 6448169
This appears to be a "work in progress" of some complexity so this may well be relevant to this pursuit:

qid=10947941

If I'm incorrect, skris, please advise.  Just trying to help you achieve our goal and allow all participating experts to be apprised of the details that may have led to this.

Thanks,

Moondancer
Community Support Moderator @ Experts Exchange
0
 
LVL 32

Accepted Solution

by:
jhance earned 300 total points
ID: 6448236
Well, from the looks of that old question this ground has already been covered.  Why this question was asked again is now quite unclear.

Regardless of how many points are offered, it's not likely to make the impossible happen...

Again, I suggest your best action if you really need to do this is to implement a device driver that can interact with the IDE controller on its own level.  If necessary you could even replace the IDE driver with your own driver and gain access to the IDE hardware.  Yes, a drastic measure but it you really need to do this, it might be your only option.
0
 

Author Comment

by:skris
ID: 6448574
That's correct ; qid=10947941 is related to this question.

Writing a device driver is (at least to me) a very complex, if not impossible, task and I have the feeling that this is a too drastic measure.

So, the issues I'm having with a device driver :
- Too complex ; overkill
- A device driver needs to be installed (and thus probably requiring a reboot)
- If some (hidden) problems with the driver exist (and there surely will, since this is a complex matter) you could mess things up pretty bad.

I really would like to keep it simple and use the functionality offered by the OS as much as possible.


0
 
LVL 32

Expert Comment

by:jhance
ID: 6448662
Sorry, but sometimes reality intrudes on what we would like to be true.  Not all solutions have simple answers.
0
 
LVL 8

Expert Comment

by:ViRoy
ID: 6459350
isnt a solution a answer?
0
 
LVL 1

Expert Comment

by:Moondancer
ID: 6646330
Please update/finalize this question.

Thanks,
Moondancer
Community Support Moderator @ Experts Exchange
0
 
LVL 1

Expert Comment

by:Moondancer
ID: 6755175
Unresponsive to my follow up request of 11/20/01, therefore I have finalized this and closed it.  Sometimes the correct "A" response is, indeed, sorry that cannot be done, or is not supported.

Moondancer
Community Support Moderator @ Experts Exchange
0

Featured Post

Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Java JRE greater than 1.6 5 74
forensics tools for file amendments/associations 2 105
Where did System.Data.Objects go? 2 62
Why use this lambda? 12 67
This article describes how to use the timestamp of existing data in a database to allow Tableau to calculate the prior work day instead of relying on case statements or if statements to calculate the days of the week.
The article will include the best Data Recovery Tools along with their Features, Capabilities, and their Download Links. Hope you’ll enjoy it and will choose the one as required by you.
The viewer will learn how to create multiple layers to apply various filters and how to delete areas from each layer’s filter.
Viewers will learn how to use the Hootsuite Dashboard.

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question