
22.05.07, 15:03
|
|
Yönetici
|
|
Üyelik Tarihi: 15.01.07
Yer: Adana
Mesaj: 2,405
|
|
Kodlar not defterine yapıştırın ve uzantısını .vbs yaparak kaydedin.
Kod:
' Visual Basic Script program to reset the DMA status of all ATA drives
' Copyright © 2006 Hans-Georg Michna
' Version 2006-03-14
' 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}\"
ValueName1 = "MasterIdDataChecksum"
ValueName2 = "SlaveIdDataChecksum"
ValueName3 = "ResetErrorCountersOnSuccess"
MessageText = "The following ATA channels have been reset:"
MessageTextLen0 = Len(MessageText)
SubsequentMisses = 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 & ValueName1
*e1 = Err.Number
*Err.Clear
*On Error Goto 0
*If e1 = 0 Then
* *On Error Resume Next
* *WshShell.RegDelete RegPath & RegSubPath & ValueName1
* *On Error Goto 0
* *MessageText = MessageText & vbNewLine & "Master"
*End If
*' Slave
*Err.Clear
*On Error Resume Next
*WshShell.RegRead RegPath & RegSubPath & ValueName2
*e2 = Err.Number
*On Error Goto 0
*If e2 = 0 Then
* *On Error Resume Next
* *WshShell.RegDelete RegPath & RegSubPath & ValueName2
* *On Error Goto 0
* *If e1 = 0 Then
* * *MessageText = MessageText & " and "
* *Else
* * *MessageText = MessageText & vbNewLine
* *End If
* *MessageText = MessageText & "Slave"
*End If
*If e1 = 0 Or e2 = 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 & ";"
* *SubsequentMisses = 0
*Else
* *SubsequentMisses = SubsequentMisses + 1
* *If SubsequentMisses >= 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
|