Created
October 18, 2015 05:15
-
-
Save chinhodado/a650d6ff7b45ec2983fa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' Visual Basic Script program to reset the DMA status of all ATA drives | |
' Copyright © 2006 Hans-Georg Michna | |
' Version 2007-04-04 | |
' Works in Windows XP, probably also in Windows 2000 and NT. | |
' Does no harm if Windows version is incompatible. | |
If MsgBox("This program will now reset the DMA status of all ATA drives with Windows drivers." _ | |
& vbNewline & "Windows will redetect the status after the next reboot, therefore this procedure" _ | |
& vbNewline & "should be harmless.", _ | |
vbOkCancel, "Program start message") _ | |
= vbOk Then | |
RegPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\" | |
ValueName1Master = "MasterIdDataChecksum" | |
ValueName1Slave = "SlaveIdDataChecksum" | |
ValueName2Master = "UserMasterDeviceTimingModeAllowed" | |
ValueName2Slave = "UserSlaveDeviceTimingModeAllowed" | |
ValueName3 = "ResetErrorCountersOnSuccess" | |
MessageText = "The following ATA channels have been reset:" | |
MessageTextLen0 = Len(MessageText) | |
ConsecutiveMisses = 0 | |
Set WshShell = WScript.CreateObject("WScript.Shell") | |
For i = 0 to 999 | |
RegSubPath = Right("000" & i, 4) & "\" | |
' Master | |
Err.Clear | |
On Error Resume Next | |
WshShell.RegRead RegPath & RegSubPath & ValueName1Master | |
errMaster = Err.Number | |
On Error Goto 0 | |
If errMaster = 0 Then | |
On Error Resume Next | |
WshShell.RegDelete RegPath & RegSubPath & ValueName1Master | |
WshShell.RegDelete RegPath & RegSubPath & ValueName2Master | |
On Error Goto 0 | |
MessageText = MessageText & vbNewLine & "Master" | |
End If | |
' Slave | |
Err.Clear | |
On Error Resume Next | |
WshShell.RegRead RegPath & RegSubPath & ValueName1Slave | |
errSlave = Err.Number | |
On Error Goto 0 | |
If errSlave = 0 Then | |
On Error Resume Next | |
WshShell.RegDelete RegPath & RegSubPath & ValueName1Slave | |
WshShell.RegDelete RegPath & RegSubPath & ValueName2Slave | |
On Error Goto 0 | |
If errMaster = 0 Then | |
MessageText = MessageText & " and " | |
Else | |
MessageText = MessageText & vbNewLine | |
End If | |
MessageText = MessageText & "Slave" | |
End If | |
If errMaster = 0 Or errSlave = 0 Then | |
On Error Resume Next | |
WshShell.RegWrite RegPath & RegSubPath & ValueName3, 1, "REG_DWORD" | |
On Error Goto 0 | |
ChannelName = "unnamed channel " & Left(RegSubPath, 4) | |
On Error Resume Next | |
ChannelName = WshShell.RegRead(RegPath & RegSubPath & "DriverDesc") | |
On Error Goto 0 | |
MessageText = MessageText & " of " & ChannelName & ";" | |
ConsecutiveMisses = 0 | |
Else | |
ConsecutiveMisses = ConsecutiveMisses + 1 | |
If ConsecutiveMisses >= 32 Then Exit For ' Don't search unnecessarily long. | |
End If | |
Next ' i | |
If Len(MessageText) <= MessageTextLen0 Then | |
MessageText = "No resettable ATA channels with Windows drivers found. Nothing changed." | |
Else | |
MessageText = MessageText & vbNewline _ | |
& "Please reboot now to reset and redetect the DMA status." | |
End If | |
MsgBox MessageText, vbOkOnly, "Program finished normally" | |
End If ' MsgBox(...) = vbOk | |
' End of Visual Basic Script program |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment