|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » Внутренности Установщика WinXP |
|
|
Внутренности Установщика WinXP
|
|
Extractor Сообщения: 1422 |
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 | |
|