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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » Внутренности Установщика WinXP

Ответить
Настройки темы
Внутренности Установщика WinXP

Extractor


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

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


Изменения
Автор: Mr dUSHA
Дата: 04-04-2022
DEL.

Отправлено: 01:16, 13-05-2008

 

Extractor


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

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


Цитата batcom:
Кто знает по какому алгоритму вычислют контрольную сумму установочным файлам »
Код: Выделить весь код
DWORD MapFileAndCheckSum(
  PTSTR Filename,
  PDWORD HeaderSum,
  PDWORD CheckSum
);
Копирайт MSDN

-------
Мои проекты:
Системные: Fake-Setup Advanced | MSSTMake | UserMake
Оформление: WinstyleMonitor | Winstyle - Установка на "живую" систему | Windows 7 Universal Patcher | Панель персонализации для Windows 7 Starter & Home Basic
Уголок юного археолога: Внутренности Установщика WinXP


Отправлено: 16:11, 06-07-2008 | #11



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

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


Extractor


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

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


Содержимое этого поста перенесено сюда:
http://forum.oszone.net/thread-110577.html

Последний раз редактировалось Mr dUSHA, 08-07-2008 в 03:45. Причина: Оптимизация


Отправлено: 18:46, 06-07-2008 | #12


Новый участник


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

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


Mr dUSHA, Про использование API функции MapFileAndCheckSum, для этих целей стало известно в первую очередь, меня же интересует по какому алгоритму посчитана контрольная сумма, насколько я понял это не CRC32 не СRС16, наверняка не MD5 , ну и вот что-за там контрольная сумма, кстати MapFileAndCheckSum считает по такому-же алгоритму(в описании говорится что она считает CRC32 вроде), тоглда результат не сама контрольная сумма, или они считают сумму не всего файла, а каких-то участков, инфы нету че-то, я в программировании конечно ноль, но все-же интересно...

Отправлено: 17:17, 08-07-2008 | #13


Extractor


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

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


Цитата batcom:
или они считают сумму не всего файла, а каких-то участков, »
Он считает КС всего файла, за исключением того DWORDа, в котором в заголовке собственно сама КС и прописывается.

-------
Мои проекты:
Системные: Fake-Setup Advanced | MSSTMake | UserMake
Оформление: WinstyleMonitor | Winstyle - Установка на "живую" систему | Windows 7 Universal Patcher | Панель персонализации для Windows 7 Starter & Home Basic
Уголок юного археолога: Внутренности Установщика WinXP


Отправлено: 11:18, 09-07-2008 | #14


Новый участник


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

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


Mr dUSHA,
Цитата Mr dUSHA:
2. Вопрос к общественности: Кто-нибудь знает, в каких случаях и какими утилитами используется ключ установщика -plugplay ?
В оригинальном установщике, запущенном такой строкой setup.exe -plugplay не происходит запуска инсталлятора ОС функцией InstallWindowsNt.
Вместо этого запускается функция, устанавливающая драйвера устройств. Но вот кем и когда это используется?
Вобщем-то, тоже очень интересно. Хотелось бы получить что-то вроде сиспрепа для определения оборудования на новом компе (клонирование), но без перегрузки в самом конце - сделать ее позднее самостоятельно.

На 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
В ключе "CmdLine" там стоит "setup.exe -newsetup -mini" и при применении этого файла к обычной системе после перезагрузки начинается миниустановка как при использовании SysPrep (причем, самой утилиты на компе просто нет), только все параметры приходится вбивать вручную (не знаю как привязать сюда SysPrep.inf).

Я пытался заменить "setup.exe -newsetup -mini" на "setup.exe -plugplay", но после перезагрузки и лого Винды просто черный экран с указателем мышки на несколько секундр, потом перегрузка и при следующей загрузке сообщение, что система не установлена до конца, надо опять переставить. Т.е. что-то не работает (как хотелось бы...). Пробовал применять файл без двух последних ключей с мини-установкой. Тоже не работает...

Можно вопрос? А есть ли теоретическа возможность отключить насильственную перегрузку компа в конце этой процедуры сетапа (в моем случае для мини-установки)? Извиняюсь, если влез не туда Тогда просто проигнорируйте
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:46, 03-08-2008 | #15


Extractor


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

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


Цитата Oleg_II:
В ключе "CmdLine" там стоит "setup.exe -newsetup -mini" и при применении этого файла к обычной системе после перезагрузки начинается миниустановка как при использовании SysPrep »
SysPrep просто прописывает эти параметры в реестр, а дальше миниустановку за него все делает сам стандартный установщик InstallWindowsNt из библиотеки Syssetup.dll. Именно его в таком случае setup.exe и запускает, а сам больше ничего не делает.

"setup.exe -plugplay" запускает только процедуру установки драйверов устройств. Эта процедура находится прямо в теле setup.exe.

Цитата:
А есть ли теоретическа возможность отключить насильственную перегрузку компа в конце этой процедуры сетапа
Можно написать свой setup.exe, который кроме вызова InstallWindowsNt будет реализовать и другой, нужный вам функционал до или после основного процеса установки. Так сделал я, и так например сделал BoaSoft для своего драйверного аддона. Суть в том, что перезагрузка происходит только когда завершается setup.exe.

-------
Мои проекты:
Системные: Fake-Setup Advanced | MSSTMake | UserMake
Оформление: WinstyleMonitor | Winstyle - Установка на "живую" систему | Windows 7 Universal Patcher | Панель персонализации для Windows 7 Starter & Home Basic
Уголок юного археолога: Внутренности Установщика WinXP

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:44, 04-08-2008 | #16


Новый участник


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

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


Mr dUSHA
Спасибо за ответ. Но написать самому не получится - не тот уровень... А вот если бы можно было хотя бы перегрузку отключить правкой какого-нибудь файлика, то можно было бы попробовать Причем, речь идет об уже установленной системе, там где не полная установка, а только минисетап запускается. В идеале бы только определение драйверов и устройсв запускать, а все остальное нафик...

Отправлено: 18:22, 04-08-2008 | #17


Extractor


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

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


Цитата Oleg_II:
А вот если бы можно было хотя бы перегрузку отключить правкой какого-нибудь файлика »
Этого не знаю. Не задавался такой целью.

-------
Мои проекты:
Системные: Fake-Setup Advanced | MSSTMake | UserMake
Оформление: WinstyleMonitor | Winstyle - Установка на "живую" систему | Windows 7 Universal Patcher | Панель персонализации для Windows 7 Starter & Home Basic
Уголок юного археолога: Внутренности Установщика WinXP


Отправлено: 18:55, 04-08-2008 | #18


Аватара для Boa Soft

Компьютерный шаман


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

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


MS, как всегда, немного врет. Только что попробовал применить волшебный рег-файл к Home edishn.

Мини - установка запустилась и прошла полностью нормально. Хотя, MS пишет, что мини-утановка невозможна для хомяка. Поэтому и я не заморачивался при работе с образами по поводу мини-setup.

Так что, наверное в новой версии для заливки напишу свой фейк-сетап и буду использовать его.
sysprep не дает на хомке выставить ключик -mini, но внести рег-файл перед завершением работы запечатаного образа не проблема.

Oleg_II,
Цитата Oleg_II:
В идеале бы только определение драйверов и устройсв запускать, а все остальное нафик... »
UpdatePnpDeviceDrivers();

Пути к драйверам должны уже быть внесены в реестр.

Код: Выделить весь код
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
Благодарности: 7

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


Boa Soft
Вот спинным мозгом чувствую, что это то, чего хотелось , а признаться стыдно, что не совсем понимаю, куда это применить... Не подскажете в общих чертах куда и как это применить?

Еще раз напомню, чего хотелолсь бы получить: у меня этот регфайл тоже работает, но хотелось бы чтобы автоопределение устройств начиналось автоматом и компьютер потом не перегружался. В идеале - только определение устройств и все! Все остальные процессы (установка сети, компонентов и прочее) желательно бы пропустить вообще.

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

Почему не перегружать... Хм... Тут немножко антинаучные мысли - сильно уменьшенная система запускается сразу в РАМ и там желательно чтобы подхватила все новые устройства как это делает BartPE, а такое возможно только при PNP установщика оси, насколько я понимаю... Соответственно, раз система загружается в РАМ, то перегрузки допускать нельзя - изменения все равно не сохранятся... Вобщем-то все и так работает, новые устройства находятся в самой системе, но есть проблемы с некоторыми контроллерами жестких дисков (САТА), не видит, гад... Т.е. надо как-то по другому их инициировать (хочется надеятся, что процедура мини-установки их найдет).

ЗЫ Про заливки. Сейчас на Руборде я ковыряю китайскую заливку (выложил там самую последнюю версию от одного известного сборщика и будет еще одна от серьезного форума, копаюсь и делюсь впечатлениями). Китайцы добились очень хороших успехов в этой области - их заливки встают практически на любое железо с правильным определением любых ХАЛов, драйверов контроллеров (включая и "проблемные" AHCI), не имеют проблем с мышами и клавиатурами, да и решения вообще интересные, можно сказать даже изящные - образ полной необрезанной системы (даже длл-кэш присутствует) вместе с МС Офисом и еще кучей софта занимает всего 650МВ Если интересно, то загляните
Кстати, на этом форуме тоже есть топик по заливкам-клонированию? Было бы интересно почитать

Последний раз редактировалось Oleg_II, 07-08-2008 в 22:17.


Отправлено: 19:21, 07-08-2008 | #20



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » Внутренности Установщика WinXP

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
События 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




 
Переход