无忧启动论坛

标题: Win7PE Wpeinit等几个关键文件的作用,供参考 [打印本页]

作者: yamingw    时间: 2009-8-10 22:57
标题: Win7PE Wpeinit等几个关键文件的作用,供参考
近来论坛部分Win7PE爱好者讨论PECMD不能完全代替Wpeinit.exe的问题,否则会出现网络不正常的现象。其实以PECMD提供的命令是
可以做到的。以下是WinPeShl,WpeInit程序运行的大致流程,聪明的你很快就会把它改成PECMD的配置文件吧。
------------------------------------------------------------------------------------------------------------
WinPeShl.exe:
wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
{
  
  if ( QueryRegValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\microsoft\\windows nt\\currentversion\\WinPE", L"ShellLogPath") )

    CreateLogFile( );
else
    CreateLogFile(L"winpeshl.log");

Message("Windows PE Shell beginning execution");
  SetCursors();
  InitSys();
  LoadExec(L"%SystemRoot%\\system32\\winpeshl.ini")
  
}
InitSys()
{
  
   LoadLocalFonts();
  
  QueryRegValue(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\WinPE", L"CustomBackground") )
  
  SystemParametersInfoW();
  WpeInstallServicePrivileges();
  
  WpeInstallServicesSecurityTemplate();

  hObject = CreateEventW((LPSECURITY_ATTRIBUTES)v9, 1, v9, L"Global\\EVENT_WINPE_REMSTOR");
  hHandle = CreateThread((LPSECURITY_ATTRIBUTES)v9, v9, StartAddress, (LPVOID)v9, v9, &ThreadId);
  result = (void *)QueryRegValue01(
                     HKEY_LOCAL_MACHINE,
                     L"SYSTEM\\CurrentControlSet\\Control\\WMI\\Autologger\\WinPEFileTrace",
                     L"Start");
  if ( result )
  {
    v30 = v9;
    sub_1006847(67108864, L"Profiling is enabled; initializing run-time profiler.", ST18_4_0);
    result = CreateThread((LPSECURITY_ATTRIBUTES)v9, v9, SerializeAppProfile, (LPVOID)v9, v9, &v30);
    dword_100B040 = (int)result;
  }
  
}
-----------------------------------------------------------------------------------------------------------------------
WpeInit.exe:
int wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
{

  if ( lpCmdLine )
    UnattendFindFileFromCmdLine();
  else
    {
    wttime = GetTickCount();
    WpeWaitForRemovableStorage();
    Waitime = GetTickCount() - wttime;
    hLogFile = XLOG(L"wpeinit.log");
    if (UnattendFindAnswerFile()){
//Checkit;
    }
   
   else
        WriteLog(hLogFile,"No unattend file was found; WPEINIT is using default settings to initialize WinPE" );
     
    if ( Waitime )
      WriteLog(hLogFile, "Spent Waitime%ums initializing removable media before unattend search" );
    }
      result = WpeActuateUnattendSettings();
   //CleanUp
return result;
}
-----------------------------------------------------------------------------------------------------------------------
WpeUtil.Dll:
WpeActuateUnattendSettings()
{
    UnattendDisplay();
  
    UnattendCompterName();
   
    UnattendPageFile();
   
    UnattendOC();
   
    UnattendNet();
   
    UnattendFireWall();
  
    UnattendRunSynchronous();
   
    UnattendRunASyncs();
   
    UnattendRestart();
}

UnattendNet()
{
  if(NetNotEnable == WpeQueryNetworkStatus()
            
  MyInitNetWork();
}
MyInitNetWork()
{
  
  
WpeInitializeNetworkComponents();

WpeInitializeNetworkDrivers();
  
}
  
WpeInitializeNetworkComponents()
{
  Install MS_MSCLIENT
  Install MS_NETBIOS
  Install MS_SMB
  Install MS_TCPIP6
  Install MS_TCPIP
  StartService dhcp
  StartService lmhosts
  StartService ikeext
  StartService mpssvc
//lanmanStation...
}
WpeInitializeNetworkDrivers()
{
  WpeInitializeDriversOfClass();
}
WpeInitializeDriversOfClass(int a1, int a2)
{
//EnumDevice then DiInstallDevice();
}
作者: yulon    时间: 2009-8-11 00:45
多谢前辈!正瞅着呢!

这应该是VC的码吧···

[ 本帖最后由 yulon 于 2009-8-11 19:02 编辑 ]
作者: huabbs88    时间: 2009-8-11 01:57
看不懂!支持一下!!!!!
作者: uepon    时间: 2009-8-11 12:13
我也发现如果不执行winpeshl.exe 。win7的安装程序启动的很慢。

谢谢提供这些信息。
作者: fjjin21    时间: 2009-8-11 12:29
正在慢慢学习中 这段代码还看不明白
作者: ndyndy    时间: 2009-8-12 13:34
吸收消化!!!!!!!
作者: achst    时间: 2013-2-6 20:20
楼主的数据结构式描述,我没完全理解你的意思。
也没包含我想要的代码部分。
求助于LZ,WinPEshl.exe 具体是如何调用文件的,能否详细点。

微软官方说明如下:
主题:Windows PE 启动过程
阐述:
此处省略几行字。。。
[1]. Winlogon.exe 根据 HKEY_LOCAL_MACHINE\SYSTEM\Setup\CmdLine 注册表值来运行设置。Winpeshl.exe 将启动 %SYSTEMDRIVE%\sources\setup.exe 文件,前提是该文件存在。如果该文件不存在,Winpeshl.exe 将确定 %SYSTEMROOT%\system32\winpeshl.ini 文件是否指定了某个应用程序。如果该文件未指定应用程序,则 Winpeshl.exe 将执行 cmd /k %SYSTEMROOT%\system32\startnet.cmd 文件。默认情况下,Windows PE 包含启动 Wpeinit.exe 文件的 Startnet.cmd 文件。Wpeinit.exe 将加载网络资源并协调网络组件(如 DHCP)。
[2]. 当 Wpeinit.exe 结束时,将会出现命令提示符窗口。当命令提示符窗口出现时,Windows PE 的启动进程结束。

但是,在[1]中的结论似乎只在BOOT.WIM 文件中是成立的。
在WinRE.WIM 中,winpeshl.exe 跳过了setup.exe ,直接运行了winpeshl.ini 中的命令:

  1. [LaunchApp]
  2. AppPath=X:\sources\recovery\recenv.exe
复制代码

特来向LZ求解。

[ 本帖最后由 achst 于 2013-2-6 20:23 编辑 ]
作者: achst    时间: 2013-2-6 20:24
希望楼主看到,帮帮我这个大忙。而我试试从现象看本质。
==========================================
OKAY,借楼主的帖子作场地,现场试验,保存资料。//回头再删掉...  ...
==========================================

[ 本帖最后由 achst 于 2013-2-6 22:00 编辑 ]

winpeshl.log from WinRE.jpg (29.61 KB, 下载次数: 20)

winpeshl.log from WinRE.jpg

进程-来自WinRE.jpg (28.74 KB, 下载次数: 28)

进程-来自WinRE.jpg

winpeshl.log from BOOT.WIM.jpg (34.08 KB, 下载次数: 19)

winpeshl.log from BOOT.WIM.jpg

进程-来自BOOT.WIM.jpg (42.69 KB, 下载次数: 46)

进程-来自BOOT.WIM.jpg

winpeshl.log from WinPE.wim.jpg (36.97 KB, 下载次数: 22)

winpeshl.log from WinPE.wim.jpg

进程-来自WinPE.WIM.jpg (38.14 KB, 下载次数: 22)

进程-来自WinPE.WIM.jpg

winpeshl.log from 修改的BOOT.WIM.jpg (39.87 KB, 下载次数: 24)

winpeshl.log from 修改的BOOT.WIM.jpg

进程-来自$Windows.~bt替换为空值的BOOT.WIM.jpg (35.45 KB, 下载次数: 27)

进程-来自$Windows.~bt替换为空值的BOOT.WIM.jpg

作者: 红毛樱木    时间: 2016-5-9 00:30
本帖最后由 红毛樱木 于 2024-5-13 22:21 编辑

WpeInitializeNetworkComponents()
{
  Install MS_MSCLIENT
  Install MS_NETBIOS
  Install MS_SMB
  Install MS_TCPIP6
  Install MS_TCPIP
  StartService dhcp
  StartService lmhosts
  StartService ikeext
  StartService mpssvc
//lanmanStation...
}







欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3