Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Создание Boot.ini

Ответить
Настройки темы
[решено] Создание Boot.ini

Старожил


Сообщения: 352
Благодарности: 44


Конфигурация

Профиль | Отправить PM | Цитировать


Добрый день !
Все Вы хорошо знаете файл Boot.ini. Так вот, нужно с помощью AutoIt правильно прописать строку загрузки default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS т.к. система может быть установлена не только на раздел С: и не только на первый жёсткий диск.

Отправлено: 15:34, 31-10-2013

 

Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


IniWrite
Номера дисков = функция _GetDiskNimberForDrive из исходника утилиты http://u.to/WwmMBA
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:04, 31-10-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 352
Благодарности: 44

Профиль | Отправить PM | Цитировать


AZJIO, Спасибо, но пока разбирался почему возвращается пустое значение по вашей ссылке, нашёл :
Код: Выделить весь код
$sDDriveLetter = "C"

$iDiskNumber = _GetDiskNimberForDrive($sDDriveLetter)

If @error Then
    MsgBox(48, "Error", "Error Number " & @error & @CRLF)
Else
    MsgBox(64, "_GetDiskNimberForDrive", "Drive " & StringUpper($sDDriveLetter) & " is on disk #" & $iDiskNumber)
EndIf



Func _GetDiskNimberForDrive($sDriveLetter)

    Local $a_hCall = DllCall("kernel32.dll", "hwnd", "CreateFile", _
            "str", "\\.\" & $sDriveLetter & ":", _; logical drive
            "dword", 0, _
            "dword", 0, _
            "ptr", 0, _
            "dword", 3, _; OPEN_EXISTING
            "dword", 128, _; FILE_ATTRIBUTE_NORMAL
            "ptr", 0)

    If @error Then
        Return SetError(1, 0, -1); your system is very old. Do something.
    EndIf

    If $a_hCall[0] = -1 Then
        Return SetError(2, 0, -1); non-existing drive
    EndIf

    Local $hDevice = $a_hCall[0]

    Local $tIOCTL_STORAGE_GET_DEVICE_NUMBER = DllStructCreate("dword DeviceType;" & _
            "dword DeviceNumber;" & _
            "int PartitionNumber")

    Local $a_iCall = DllCall("kernel32.dll", "int", "DeviceIoControl", _
            "hwnd", $hDevice, _
            "dword", 0x2D1080, _; IOCTL_STORAGE_GET_DEVICE_NUMBER
            "ptr", 0, _
            "dword", 0, _
            "ptr", DllStructGetPtr($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _
            "dword", DllStructGetSize($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _
            "dword*", 0, _
            "ptr", 0)

    If @error Or Not $a_hCall[0] Then
        DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hDevice)
        Return SetError(3, 0, -1); DeviceIoControl failed for some reason
    EndIf

    DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hDevice)

; will write some data
    ConsoleWrite("Drive " & StringUpper($sDriveLetter) & ": " & @CRLF)
    ConsoleWrite(@TAB & "DeviceType: " & DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceType") & @CRLF)
    ConsoleWrite(@TAB & "DeviceNumber: " & DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceNumber") & @CRLF)
    ConsoleWrite(@TAB & "PartitionNumber: " & DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "PartitionNumber") & @CRLF)
    ConsoleWrite(@CRLF)
; end writing

    If DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceType") = 7 Then; FILE_DEVICE_DISK
        Return SetError(0, 0, DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceNumber"))
    EndIf

    Return SetError(4, 0, -1); not a disk partition

EndFunc ;==>_GetDiskNimberForDrive
Вроде бы то что искал, почти.

Отправлено: 10:56, 01-11-2013 | #3


Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


-TRM-, пустое значение это массив, номер диска и номер партиции, в вашем примере возвращается номер диска. Разобраться не сложно, функция та же, просто формат и количество возвращаемых данных зависит уже от вашей фантазии. Можно сразу формировать готовую строку внутри функции и даже сразу записать в ini, а можно более правильно, возвратив данных а уже другой функцией формировать. Правильно, это когда функция содержит цельный блок, а не симбиоз нескольких функций, потому что в дальнейшем её не придётся переписывать под несколько иной алгоритм.

Отправлено: 12:17, 01-11-2013 | #4


Старожил


Сообщения: 352
Благодарности: 44

Профиль | Отправить PM | Цитировать


AZJIO, Так и сделал, спс.

Отправлено: 14:59, 01-11-2013 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Создание Boot.ini

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Загрузка - [решено] Перемещение или создание файла boot.ini SVt Microsoft Windows 2000/XP 11 02-07-2010 12:47
Загрузка - boot.ini Vampire Microsoft Windows 2000/XP 41 13-03-2008 11:09
Загрузка - boot.ini KurtS Microsoft Windows 2000/XP 7 02-11-2004 19:53
boot.ini makcum Хочу все знать 13 12-05-2004 16:50
Boot.ini а может и не Boot Vovanello Microsoft Windows 95/98/Me (архив) 1 11-06-2003 07:31




 
Переход