Показать сообщение отдельно
Старый 08.04.2009, 19:57     # 5
ceadr
Member
 
Аватар для ceadr
 
Регистрация: 12.06.2005
Адрес: Энск
Пол: Male
Сообщения: 299

ceadr Популярный человек на этом форумеceadr Популярный человек на этом форумеceadr Популярный человек на этом форумеceadr Популярный человек на этом форумеceadr Популярный человек на этом форумеceadr Популярный человек на этом форумеceadr Популярный человек на этом форумеceadr Популярный человек на этом форуме
Ну тогда так: resetDMA.vbs
Код:
' Visual Basic Script program to reset the DMA status of all ATA drives

' Copyright c 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
Комментарий Модератора:
Borland:
Или так http://www.imho.ws/showthread.php?t=122875 или так http://www.imho.ws/showthread.php?t=87666 или так http://www.imho.ws/showthread.php?t=99407
ceadr вне форума