|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » Внутренности Установщика WinXP |
|
Внутренности Установщика WinXP
|
Extractor Сообщения: 1422 |
Профиль | Отправить PM | Цитировать
DEL.
|
|
Отправлено: 01:16, 13-05-2008 |
Extractor Сообщения: 1422
|
Профиль | Отправить PM | Цитировать Цитата batcom:
|
|
------- Отправлено: 16:11, 06-07-2008 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Extractor Сообщения: 1422
|
Профиль | Отправить PM | Цитировать Содержимое этого поста перенесено сюда:
http://forum.oszone.net/thread-110577.html |
Последний раз редактировалось Mr dUSHA, 08-07-2008 в 03:45. Причина: Оптимизация Отправлено: 18:46, 06-07-2008 | #12 |
Новый участник Сообщения: 30
|
Профиль | Отправить PM | Цитировать Mr dUSHA, Про использование API функции MapFileAndCheckSum, для этих целей стало известно в первую очередь, меня же интересует по какому алгоритму посчитана контрольная сумма, насколько я понял это не CRC32 не СRС16, наверняка не MD5 , ну и вот что-за там контрольная сумма, кстати MapFileAndCheckSum считает по такому-же алгоритму(в описании говорится что она считает CRC32 вроде), тоглда результат не сама контрольная сумма, или они считают сумму не всего файла, а каких-то участков, инфы нету че-то, я в программировании конечно ноль, но все-же интересно...
|
Отправлено: 17:17, 08-07-2008 | #13 |
Extractor Сообщения: 1422
|
Профиль | Отправить PM | Цитировать Цитата batcom:
|
|
------- Отправлено: 11:18, 09-07-2008 | #14 |
Новый участник Сообщения: 47
|
Профиль | Отправить PM | Цитировать Mr dUSHA,
Цитата Mr dUSHA:
На MSFN.ORG был найдет такой рег-файл: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\Setup] "SetupType"=dword:00000001 "SystemSetupInProgress"=dword:00000001 "CmdLine"=hex(7):73,00,65,00,74,00,75,00,70,00,2e,00,65,00,78,00,65,00,20,00,\ 2d,00,6e,00,65,00,77,00,73,00,65,00,74,00,75,00,70,00,20,00,2d,00,6d,00,69,\ 00,6e,00,69,00,00,00,00,00 "MiniSetupDoPnP"=dword:00000001 "MiniSetupInProgress"=dword:00000001 Я пытался заменить "setup.exe -newsetup -mini" на "setup.exe -plugplay", но после перезагрузки и лого Винды просто черный экран с указателем мышки на несколько секундр, потом перегрузка и при следующей загрузке сообщение, что система не установлена до конца, надо опять переставить. Т.е. что-то не работает (как хотелось бы...). Пробовал применять файл без двух последних ключей с мини-установкой. Тоже не работает... Можно вопрос? А есть ли теоретическа возможность отключить насильственную перегрузку компа в конце этой процедуры сетапа (в моем случае для мини-установки)? Извиняюсь, если влез не туда Тогда просто проигнорируйте |
|
Отправлено: 21:46, 03-08-2008 | #15 |
Extractor Сообщения: 1422
|
Профиль | Отправить PM | Цитировать Цитата Oleg_II:
"setup.exe -plugplay" запускает только процедуру установки драйверов устройств. Эта процедура находится прямо в теле setup.exe. Цитата:
|
||
------- Отправлено: 16:44, 04-08-2008 | #16 |
Новый участник Сообщения: 47
|
Профиль | Отправить PM | Цитировать Mr dUSHA
Спасибо за ответ. Но написать самому не получится - не тот уровень... А вот если бы можно было хотя бы перегрузку отключить правкой какого-нибудь файлика, то можно было бы попробовать Причем, речь идет об уже установленной системе, там где не полная установка, а только минисетап запускается. В идеале бы только определение драйверов и устройсв запускать, а все остальное нафик... |
Отправлено: 18:22, 04-08-2008 | #17 |
Extractor Сообщения: 1422
|
Профиль | Отправить PM | Цитировать Цитата Oleg_II:
|
|
------- Отправлено: 18:55, 04-08-2008 | #18 |
Компьютерный шаман Сообщения: 2910
|
Профиль | Сайт | Отправить PM | Цитировать MS, как всегда, немного врет. Только что попробовал применить волшебный рег-файл к Home edishn.
Мини - установка запустилась и прошла полностью нормально. Хотя, MS пишет, что мини-утановка невозможна для хомяка. Поэтому и я не заморачивался при работе с образами по поводу мини-setup. Так что, наверное в новой версии для заливки напишу свой фейк-сетап и буду использовать его. sysprep не дает на хомке выставить ключик -mini, но внести рег-файл перед завершением работы запечатаного образа не проблема. Oleg_II, Цитата Oleg_II:
Пути к драйверам должны уже быть внесены в реестр. function IsNtOs:boolean; var ver: TOSVERSIONINFO; begin ver.dwOSVersionInfoSize := Sizeof(ver); GetVersionEx(ver); result:= ver.dwPlatformId=VER_PLATFORM_WIN32_NT; end; function AdjustDriverPrivileges:boolean; var handle, ph: THandle; pid, n: DWORD; luid: TLargeInteger; priv: TTokenPrivileges; dummy: PTokenPrivileges; Err: DWORD; begin if IsNtOs then begin result:=false; pid := GetCurrentProcessId; ph := OpenProcess(PROCESS_ALL_ACCESS, false, pid); if not OpenProcessToken(ph, TOKEN_ADJUST_PRIVILEGES, handle) then exit; if not LookupPrivilegeValue(nil, 'SeLoadDriverPrivilege', luid) then exit; priv.PrivilegeCount := 1; priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; priv.Privileges[0].Luid := luid; dummy := nil; AdjustTokenPrivileges(handle, false, priv, 0, dummy^, n); Err := GetLastError; if Err <> ERROR_SUCCESS then exit; end; result:=true; end; function CleanupPfantom: boolean; var hAllDevices: H_DEV; dwInfo: DWORD; Data: SP_DEVINFO_DATA; Status: DWORD; ProbNumer: DWORD; rmdParams:TSPRemoveDeviceParams; begin result:=false; hAllDevices := SetupDiGetClassDevsEx(nil, nil, 0, DIGCF_ALLCLASSES, nil, nil, 0); if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then try FillChar(Data, SizeOf(SP_DEVINFO_DATA), 0); Data.cbSize := SizeOf(SP_DEVINFO_DATA); dwInfo := 0; if SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then begin while SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) do begin if CM_Get_DevNode_Status(@Status, @ProbNumer, Data.DevInst, 0) = CR_NO_SUCH_DEVNODE then if Status = 0 then begin rmdParams.ClassInstallHeader.cbSize := sizeof(SP_CLASSINSTALL_HEADER); rmdParams.ClassInstallHeader.InstallFunction := DIF_REMOVE; rmdParams.Scope := DI_REMOVEDEVICE_GLOBAL; rmdParams.HwProfile := 0; SetupDiSetClassInstallParams(hAllDevices, @Data, @rmdParams.ClassInstallHeader, sizeof(TSPRemoveDeviceParams)); SetupDiCallClassInstaller(DIF_REMOVE,hAllDevices,@Data); {CM_Uninstall_DevNode( Data.DevInst,0); } result:=true; end; Inc(dwInfo); end; end; finally if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then SetupDiDestroyDeviceInfoList(hAllDevices); end; end; function IsProblemPresent:boolean; var hAllDevices: H_DEV; dwInfo: DWORD; Data: SP_DEVINFO_DATA; Status: DWORD; ProbNumer: DWORD; begin result:=false; hAllDevices := SetupDiGetClassDevsEx(nil, nil, 0, DIGCF_PRESENT or DIGCF_ALLCLASSES, {hDev} nil, nil, 0); if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then try FillChar(Data, SizeOf(SP_DEVINFO_DATA), 0); Data.cbSize := SizeOf(SP_DEVINFO_DATA); dwInfo := 0; if SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then begin while SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) do begin if CM_Get_DevNode_Status(@Status, @ProbNumer, Data.DevInst, 0) = CR_SUCCESS then if (Status and DN_HAS_PROBLEM)<>0 then begin result:=true; exit; end; Inc(dwInfo); end; end; finally if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then SetupDiDestroyDeviceInfoList(hAllDevices); end; end; function DeleteProblemDevice: boolean; var hAllDevices: H_DEV; dwInfo: DWORD; Data: SP_DEVINFO_DATA; Status: DWORD; ProbNumer: DWORD; rmdParams:TSPRemoveDeviceParams; begin result:=false; hAllDevices := SetupDiGetClassDevsEx(nil, nil, 0, DIGCF_PRESENT or DIGCF_ALLCLASSES, nil, nil, 0); if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then try FillChar(Data, SizeOf(SP_DEVINFO_DATA), 0); Data.cbSize := SizeOf(SP_DEVINFO_DATA); dwInfo := 0; if SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then begin while SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) do begin if CM_Get_DevNode_Status(@Status, @ProbNumer, Data.DevInst, 0) = CR_SUCCESS then if (Status and DN_HAS_PROBLEM)<>0 then begin rmdParams.ClassInstallHeader.cbSize := sizeof(SP_CLASSINSTALL_HEADER); rmdParams.ClassInstallHeader.InstallFunction := DIF_REMOVE; rmdParams.Scope := DI_REMOVEDEVICE_GLOBAL; rmdParams.HwProfile := 0; SetupDiSetClassInstallParams(hAllDevices, @Data, @rmdParams.ClassInstallHeader, sizeof(TSPRemoveDeviceParams)); SetupDiCallClassInstaller(DIF_REMOVE,hAllDevices,@Data); {CM_Uninstall_DevNode( Data.DevInst,0); } result:=true; end; Inc(dwInfo); end; end; finally if DWORD(hAllDevices) <> INVALID_HANDLE_VALUE then SetupDiDestroyDeviceInfoList(hAllDevices); end; end; function Enumerate:boolean; var dwInfo: DWORD; Status: DWORD; begin Status:= CM_Locate_DevNode(dwInfo ,nil, CM_LOCATE_DEVNODE_NORMAL); result:= CM_Reenumerate_DevNode(Status, CM_REENUMERATE_NORMAL) = CR_SUCCESS; end; function WaitEndPnp(WaitProc: TWaitMsgProc): boolean; var WaitTime:integer; begin WaitTime:=100; result:=false; if CMP_WaitNoPendingInstallEvents(0) = WAIT_OBJECT_0 then exit; if CMP_WaitNoPendingInstallEvents(0) = WAIT_FAILED then exit; while (CMP_WaitNoPendingInstallEvents(100) = WAIT_TIMEOUT) and (WaitTime>0) do begin if @WaitProc<>nil then WaitProc; dec(WaitTime); result:=true; end; end; function UpdatePnpDrivers(WaitProc: TWaitMsgProc):boolean; begin if AdjustDriverPrivileges then begin DeleteProblemDevice; Enumerate; sleep(1000); WaitEndPnp(WaitProc); result:= UpdatePnpDeviceDrivers = 0; WaitEndPnp(WaitProc); end else result:=false; end; |
|
------- Отправлено: 15:52, 07-08-2008 | #19 |
Новый участник Сообщения: 47
|
Профиль | Отправить PM | Цитировать Boa Soft
Вот спинным мозгом чувствую, что это то, чего хотелось , а признаться стыдно, что не совсем понимаю, куда это применить... Не подскажете в общих чертах куда и как это применить? Еще раз напомню, чего хотелолсь бы получить: у меня этот регфайл тоже работает, но хотелось бы чтобы автоопределение устройств начиналось автоматом и компьютер потом не перегружался. В идеале - только определение устройств и все! Все остальные процессы (установка сети, компонентов и прочее) желательно бы пропустить вообще. Почему автоматом - столкнулся с тем, что на некоторых компах мышь и клавиатура при переносе имиджа не работают. Поковырял и вроде нашел способ поддержки мыши в образе в такой ситуации, но срабатывает он только если есть сиспреп и файл ответов или вообще без применения мини-установки через некоторое время после полной загрузки системы. Хотелось бы того же, что происходит при мини-установке для нормального определения драйверов (но тоже не полной - читайте дальше Почему не перегружать... Хм... Тут немножко антинаучные мысли - сильно уменьшенная система запускается сразу в РАМ и там желательно чтобы подхватила все новые устройства как это делает BartPE, а такое возможно только при PNP установщика оси, насколько я понимаю... Соответственно, раз система загружается в РАМ, то перегрузки допускать нельзя - изменения все равно не сохранятся... Вобщем-то все и так работает, новые устройства находятся в самой системе, но есть проблемы с некоторыми контроллерами жестких дисков (САТА), не видит, гад... Т.е. надо как-то по другому их инициировать (хочется надеятся, что процедура мини-установки их найдет). ЗЫ Про заливки. Сейчас на Руборде я ковыряю китайскую заливку (выложил там самую последнюю версию от одного известного сборщика и будет еще одна от серьезного форума, копаюсь и делюсь впечатлениями). Китайцы добились очень хороших успехов в этой области - их заливки встают практически на любое железо с правильным определением любых ХАЛов, драйверов контроллеров (включая и "проблемные" AHCI), не имеют проблем с мышами и клавиатурами, да и решения вообще интересные, можно сказать даже изящные - образ полной необрезанной системы (даже длл-кэш присутствует) вместе с МС Офисом и еще кучей софта занимает всего 650МВ Если интересно, то загляните Кстати, на этом форуме тоже есть топик по заливкам-клонированию? Было бы интересно почитать |
Последний раз редактировалось Oleg_II, 07-08-2008 в 22:17. Отправлено: 19:21, 07-08-2008 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
События OnMouseOver / OnMouseClick + вопрос во созданию установщика | 0xDEADBEEF | AutoIt | 3 | 07-08-2009 15:34 | |
Создание установщика для драйвера. | voler | Поиск драйверов, прошивок и руководств | 2 | 12-07-2009 12:31 | |
[решено] Проблема при запуске установщика | Actor | Автоматическая установка Windows 2000/XP/2003 | 9 | 29-10-2008 09:09 | |
Delphi - Создание установщика | Ламер | Программирование и базы данных | 17 | 22-07-2008 05:09 |
|