无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 128181|回复: 216
打印 上一主题 下一主题

制作WinPE的汇总贴(此贴不再更新)

  [复制链接]
跳转到指定楼层
1#
发表于 2007-8-29 13:55:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
                                                                       前  言

      本贴的内容全部来至于本论坛及其它论坛、网站制作PE前辈(高手)无私的力作,本人只作汇总收集而已,非常适合新手学习。

此贴不再更新,请移步http://bbs.wuyou.net/forum.php?mod=viewthread&tid=120647&extra=page%3D3&page=1









[ 本帖最后由 lisong 于 2008-2-27 08:07 PM 编辑 ]

评分

参与人数 2无忧币 +19 收起 理由
网上飞鹰 + 9
chinazswa + 10 鼓励一下。

查看全部评分

推荐
 楼主| 发表于 2007-8-30 21:23:56 | 只看该作者

更新外置驱动(声卡、网卡、显卡和无线网卡)

老毛的PE的驱动在 \外置程序\PE_OUTERPART下
绝版pe 在\programs\PE
其他版本 可以通过搜索DRIVERS_VGA.CAB  来确定
外置程序和programs都是隐藏的 可在任意分区下 U盘 移动硬盘也行
C盘 D盘 E盘 都有可能 大家自己找把

目录中的
DRIVERS_NET_WIRELESS是无线网卡驱动
DRIVERS_VGA.CAB 是显卡驱动
DRIVERS_NET.CAB是普通网卡驱动
DRIVERS_SOUND.CAB是声卡驱动

注意两点
用XCAB制作压缩包是一定要选上 处理INF  
要注意驱动包的名字 (不能把网卡驱动命名为DRIVERS_SOUND.CAB)

如果要添加驱动不覆盖原来的驱动
先解压原来的驱动,把自己的驱动加进去(是文件夹不是压缩包)  再用XCAB打包

[ 本帖最后由 lisong 于 2007-9-3 05:00 PM 编辑 ]
回复

使用道具 举报

推荐
 楼主| 发表于 2007-8-30 22:45:27 | 只看该作者

WimTool -- Wim文件的图形视窗处理工具

一、基本介绍
1、WimTool( WimTool-V1.0.7.0901.RAR (238.88 KB, 下载次数: 2387) )并不是Imagex的GUI,可以脱离Imagex而独立使用。
2、WimTool能提供普通用户对WIM格式文件最常用的处理功能,如制作映像文件、挂载映像、解开Wim映像到硬盘
    的目录和向现存的Wim文件加入新的映像卷等。
3、在WimTool中,对Wim文件进行操作处理时,界面元素给用户提供了相当的显示信息,对Wim文件最常见的处理
    出现失败时,WimTool会提供失败的说明。
4、WimTool界面采用分页式设计,每页都提供了必要的操作说明、选项要求和注意事项。初次使用的用户请先阅读
    每页的操作说明。

二、功能简介
    WimTool集成了处理Wim文件的以下常用功能。
1、支持制作不同压缩类型的映像文件。在制作新的映像文件时,用户可以给新的映卷指定映卷名称和映卷描述,并
    加上启动标记,同时用户可以在WimTool中指定压缩类型。
2、支持向现有的映像文件添加新的映卷,并可指定新映卷的命称和描述,并加上启动标记。向现有映像文件添加新
    的映像卷时,WimTool会自动检测原映像文件的压缩类型,并使新加入的映像卷与之匹配。
3、支持挂载和卸载Wim文件。用WimTool挂载Wim文件时,用户可以选择指定的映像文件和挂载目录,同时也可指
    定挂载方式(是否可写或只读)。
4、支持向硬盘解开(应用)Wim文件中指定的映像卷,包括解开分割包。WimTool解开Wim文件时会自动检测用户指
    定的Wim是否属分割包,并将其它分包系列也解开到指定目录。
5、支持将单一的大体积Wim文件按指定大小分割,分包文件既支持WimTool解开也支持Imagex解开。
6、支持将某一Wim文件中存在的映像卷导入到另一个Wim文件中。导入映像卷的目标Wim文件既支持Imagex操作,
    也支持WimTool操作,如挂载、解开等。
7、支持从已有的Wim文件中删除已有的映像卷条目。
8、支持查看Wim文件的基本属性和详细信息,如映卷名称、映卷描述、压缩类型、映像卷数目、是否属分割包等。
9、支持列出系统所有挂载的Wim映像及其挂载目录、挂载方式等。
10.支持修改现有的Wim映像文件中的某个映卷的名称和描述,并加上启动标记。
11.支持 Mount 、UnMount 和 Apply 三项命令行参数。
12.支持WIM映像文件与WimTool程序直接关联,并可创建右键菜单,方便挂载或打开WIM映像文件。
13.支持列出映像内的文件目录,这个功能相当于ImageX的/DIR参数,可以在PE系统中使用。
14.支持通过配置文件定义捕获映像或解开映像的规则。WimTool的配置文件与ImageX的兼容。在WimTool内置了一份
    默认的配置文件,这个配置文件与ImageX的默认配置文件相同。

三、参数说明
    WimTool的命令行参数格式如下:
    <功能参数>  [选项]  [<F=映像文件>  <p=目标路径>  <I=映卷ID>]
  其中尖括号"< >"内的参数表示必须输入,方括号"[ ]"内的表示可以省略。
1、挂载映像
    </Mount>  [/W]  <F=Wim映像文件>  <p=目标路径>  <I=映卷ID>
    其中参数 "/W" 表示可写方式挂载,省略时表示只读方式挂载,示例:
    WimTool.EXE  /Mount  /W  F=D:\Test.WIM  P=D:\PROGRAMS  I=2
2、卸载映像
    ①.卸载指定挂载目录的映像
    </UnMount>  [/C]  <p=目标路径>
    其中参数 "/C" 表示卸载时将目标目录变化的内容更新到原映像中,省略时表示不更新原映像,示例:
    WimTool.EXE  /UnMount  /C  P=D:\PROGRAMS
    ②.卸载所有被挂载的映像
    </UnMount>  </A>
    其中选项 "/A" 表示卸载所有被挂载的映像,且卸载映像时目标目录的变化不会被更新到原映像中,示例:
    WimTool.EXE  /UnMount  /A
3、解开映像
    </Apply>  [/Y]  <F=Wim映像文件>  <p=目标路径>  <I=映卷ID>
    其中参数 "/Y" 表示不确认目标目录是否已存在文件而直接解开映像(解开的文件有可能覆盖已存在的文件),
    省略该参数时,若目标目录已存在文件则要用户确认才执行解开映像操作,示例:
    WimTool.EXE  /Apply  /Y  F=E:\Install.WIM  P=C:  I=3

四、使用注意
1、在Vista系统中,WimTool必须以管理员的身份运行。
2、系统中必须正确安装WimFltr组件,WimTool才能正常工作。
3、在精简的WinPE系统中某些功能可能无法使用。
4、系统的临时目录必须有足够的空间;在PE中使用时,临时目录建议设置到硬盘上。
5、一个映像中只有一个映卷具有启动标记;映像中的映卷号是唯一的,而映卷名和映卷描述仅作为映像卷的说明,
    它们并不是唯一的,就是说一个映像中的不同映卷可以具相同的名称和描述。
6、当系统中的WIM文件关联出现错误或异常时,请点[取消文件关联]按钮,再点[设置文件关联]按钮来修复。
7、如果你对捕获映像的配置文件不很了解,请不要修改它,用默认的设置即可。


运行WimTool前,先安装WimFltr组件( WimFltr组件.part1.rar (250 KB, 下载次数: 4393)     WimFltr组件.part2.rar (191.79 KB, 下载次数: 4328) ).
再说一句修改别人的WIM用可写方式挂上,修改完后再导出成一个新映像


WiMNT是WIM文件挂载和制作工具 ( WIMNT.rar (215.14 KB, 下载次数: 3336)

1、WiMNT关联WIM文件,双击WIM文件,通过设定或默认值自动完成挂载,并执行全局设定操作,也可以转为手动方式。支持重入,可多次双击WIM文件。
2、WIM文件的挂载信息,用本工具设置。WIM内默认自动执行文件是SETUP.CMD,也可以指定文件。
3、WiMNT可以生成虚拟盘符,自动生成挂载<目录>。
4、WiMNT通过目录右键菜单制作WIM文件,象WINRAR一样方便。
5、第一次使用WIMNT,自动设置关联WIM文件和目录。


将可写挂载勾上---挂载---修改完后----卸载提示后选是就行

[ 本帖最后由 lisong 于 2007-9-9 09:38 PM 编辑 ]
回复

使用道具 举报

推荐
 楼主| 发表于 2007-8-30 22:37:20 | 只看该作者

WinPE 驱动程序最终解决方案

1. 把每种驱动放在一个目录中(每个 INF 文件名前,加上“_”开头,作为起始标志),然后把所有的驱动程序打包成为一个 CAB 文件。
2. 用下面的程序代码,指定 CAB 路径,即可自动从 CAB 安装驱动:
1) 代码会自动检测所有 PCI 设备;
2) 然后遍历 CAB 内的一个 INF 文件内容;
3) 如果找到匹配的硬件,则解压缩 INF 所在目录中随后的 所有文件到 %TEMP% 中;
4) 安装驱动程序;
5) 转跳到 2,继续遍历下一个 INF。

代码如下:
// Header
#include <SetupAPI.h>
#include <DevGuid.h>
#include <RegStr.h>
#include <CfgMgr32.h>
#pragma comment(lib, "SetupAPI.lib")
#ifdef _UNICODE
#define STR_UpdateDriverForPlugAndPlayDevices "UpdateDriverForPlugAndPlayDevicesW"
#else
#define STR_UpdateDriverForPlugAndPlayDevices "UpdateDriverForPlugAndPlayDevicesA"
#endif
typedef BOOL (WINAPI* PUPNP)(HWND  hWnd, PCTSTR ptzID, PCTSTR ptzPath, DWORD dwFlags, PBOOL bReboot);

// Compare device
PSTR DevCmp(PSTR pszStr1, PSTR pszStr2)
{
    PSTR p = pszStr2;
    for (UINT i = 0; *p; p++)
    {
        if ((*p == '&') && (++i == 2))
        {
            break;
        }
    }
    UINT uCmp = (UINT) (p - pszStr2);

    p = pszStr1;
    while (*p)
    {
        if (UMemCmp(p, pszStr2, uCmp) == 0)
        {
            return p;
        }
        p++;
    }
    return NULL;
}

// CAB callback
UINT CALLBACK DevProc(PVOID pvContext, UINT uMsg, UINT_PTR upParam1, UINT_PTR upParam2)
{
    static BOOL s_bExtract = FALSE;
    static TCHAR s_tzDevID[MAX_NAME] = {0};
    static TCHAR s_tzInfPath[MAX_PATH] = {0};
    if (uMsg == SPFILENOTIFY_FILEINCABINET)
    {
        // Is INF file or followed by INF file
        FILE_IN_CABINET_INFO *p = (FILE_IN_CABINET_INFO*) upParam1;
        PCTSTR q = UStrRChr(p->NameInCabinet, '\\');
        q = q ? (q + 1) : p->NameInCabinet;
        if ((*q == '_') || s_bExtract)
        {
            // Extract INF or driver file
            if (*q == '_')
            {
                q++;
            }
            UStrCopy(p->FullTargetName + GetTempPath(MAX_PATH, p->FullTargetName), q);
            return FILEOP_DOIT;
        }
        else
        {
            // Skip
            return FILEOP_SKIP;
        }
    }
    else if (uMsg == SPFILENOTIFY_FILEEXTRACTED)
    {
        PCTSTR ptzTarget = ((FILEPATHS*) upParam1)->Target;
        if (UStrStr(ptzTarget, TEXT(".INF")) == NULL)
        {
            // Not INF
            return NO_ERROR;
        }

        // Open INF
        PSTR pszFile = (PSTR) UFileLoad(ptzTarget, NULL);
        if (pszFile == NULL)
        {
            return NO_ERROR;
        }

        for (PSTR p = (PSTR) pvContext; *p; p += UAStrLen(p) + 1)
        {
            if ((*p != '#') && DevCmp(pszFile, p))
            {
                // Found Device
                UAStrToStr(s_tzDevID, p, MAX_NAME);
                UStrCopy(s_tzInfPath, ptzTarget);
                //UTrack(TEXT("\r\nFound %s: %s\r\n\r\n"), s_tzDevID, s_tzInfPath);
                s_bExtract = TRUE;
                *p = '#';
                return NO_ERROR;
            }
        }

        // This is next INF
        if (s_bExtract)
        {
            // Previous is uses INF
            s_bExtract = FALSE;
            HMODULE hLib = LoadLibrary(TEXT("NewDev"));
            if (hLib)
            {
                // Install INF
                PUPNP p = (PUPNP) GetProcAddress(hLib, STR_UpdateDriverForPlugAndPlayDevices);
                if (p)
                {
                    BOOL bReboot = FALSE;
                    p(NULL, s_tzDevID, s_tzInfPath, 3, &bReboot);
                    UTrack(TEXT("\r\nInstall %s: %s\r\n\r\n"), s_tzDevID, s_tzInfPath);
                }
                FreeLibrary(hLib);
            }
        }
        
        // Delete INF
        UFileDelete(ptzTarget);
    }
    return NO_ERROR;
}

#define MAX_DevID (MAX_STR * 4)
UINT DevEnum(PSTR pszDev, PCTSTR ptzClass = REGSTR_KEY_PCIENUM)
{
    // Lookup device
    HDEVINFO hDev = SetupDiGetClassDevs(NULL, ptzClass, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES );
    if (hDev == INVALID_HANDLE_VALUE)
    {
        return E_FAIL;
    }

    // Lookup Device ID
    UINT uSize = 0;
    SP_DEVINFO_DATA sdDev = {sizeof(SP_DEVINFO_DATA)};
    for (UINT i = 0; (uSize < MAX_DevID) && SetupDiEnumDeviceInfo(hDev, i, &sdDev); i++)
    {
        DWORD dwData;
        DWORD dwSize = MAX_DevID- uSize;
        if (SetupDiGetDeviceRegistryPropertyA(hDev, &sdDev, SPDRP_HARDWAREID, &dwData, (PBYTE) pszDev + uSize, dwSize, &dwSize))
        {
#ifndef _DEBUG
            // List problem device only
            ULONG uProblem = 0;
            ULONG uStatus = DN_HAS_PROBLEM;
            CM_Get_DevNode_Status(&uStatus, &uProblem, sdDev.DevInst, 0);
            if (uProblem)
#endif
            {
                uSize += UAStrLen(pszDev + uSize) + 1;
            }
        }
    }

    SetupDiDestroyDeviceInfoList(hDev);
    pszDev[uSize] = pszDev[uSize + 1] = 0;
    return uSize;
}

// Install device
HRESULT Devi(PTSTR ptzCmd)
{
    // Skip if Control Key pressed.
    if (GetAsyncKeyState(VK_CONTROL) & 0x8000)
    {
        return S_FALSE;
    }

    // Enum device ID
    CHAR szDev[MAX_DevID];
    UINT uSize = DevEnum(szDev, TEXT("PCI"));
    uSize +=  DevEnum(szDev + uSize, TEXT("USB"));
    if (uSize == 0)
    {
        // No device
        return ERROR_DEVICE_NOT_CONNECTED;
    }

#ifdef _DEBUG
    for (PSTR p = szDev; *p; p += UAStrLen(p) + 1)
    {
        UTrack(TEXT("%hs\r\n"), p);
    }
#endif

    // Lookup CAB file
    TCHAR tzPath[MAX_PATH];
    ExpandEnvironmentStrings(ptzCmd, tzPath, MAX_PATH);
    SetupIterateCabinet(tzPath, 0, DevProc, szDev);

    return S_OK;
}
回复

使用道具 举报

216#
发表于 2011-5-8 21:12:41 | 只看该作者
收藏起来,慢慢消化,感谢这些文章的作者,谢谢楼主!
回复

使用道具 举报

215#
发表于 2011-5-8 11:32:55 | 只看该作者
这个叫做制作PE啊?应该叫做修改PE教程还差不多吧
回复

使用道具 举报

214#
发表于 2011-1-7 19:50:54 | 只看该作者
还可以  不错  可以学习一下
回复

使用道具 举报

213#
发表于 2011-1-7 14:20:54 | 只看该作者
好贴,学习做PE的教程工具也有,喜欢这种贴
回复

使用道具 举报

212#
发表于 2011-1-6 14:34:52 | 只看该作者
LZ强人,现在没打算自己做PE,以后如果试着做的话,是首选的资料
回复

使用道具 举报

211#
发表于 2011-1-6 10:36:50 | 只看该作者
好啊,感谢
回复

使用道具 举报

210#
发表于 2011-1-6 06:45:40 | 只看该作者
此贴花功夫了,参考用,顶一下!
回复

使用道具 举报

209#
发表于 2011-1-5 22:44:12 | 只看该作者
这么多朋友要求整理成电子书,小弟不才正在整理中。。。。希望楼主多多指教!
回复

使用道具 举报

208#
发表于 2010-12-3 22:15:40 | 只看该作者
这贴都能再翻出来 楼上几位太牛了
回复

使用道具 举报

207#
发表于 2010-12-2 05:58:34 | 只看该作者
这个帖子是学习PE的好帖子。收藏。
回复

使用道具 举报

206#
发表于 2010-12-2 01:49:07 | 只看该作者
这得学习下
可找到了
回复

使用道具 举报

205#
发表于 2010-3-14 20:48:38 | 只看该作者
太好了,精华就是不一样
回复

使用道具 举报

204#
发表于 2010-3-14 13:35:59 | 只看该作者
资历很浅
看得眼花缭乱啊
还得好好学习
谢谢楼主分享
继续潜水了
回复

使用道具 举报

203#
发表于 2010-3-11 22:25:45 | 只看该作者
哎,都被上面的说完了,
1,楼主太辛苦了,写的太棒了
2,原理,教程,工具,都有了
3,都想要求做电子书
4,scsi,sata 还觉得不够明白

再次感谢
回复

使用道具 举报

202#
发表于 2009-11-17 12:21:28 | 只看该作者
好教材,記下作備份參考。
回复

使用道具 举报

201#
发表于 2009-11-12 21:00:21 | 只看该作者
收藏~~~~楼主太强了
回复

使用道具 举报

200#
发表于 2009-9-23 10:21:17 | 只看该作者
知识的源泉,下载了,谢谢.
回复

使用道具 举报

199#
发表于 2009-9-20 21:08:33 | 只看该作者
未什么现在才看到这么珍贵的学习资源????
回复

使用道具 举报

198#
发表于 2009-9-20 20:00:42 | 只看该作者
学到不少东西,谢谢了!
回复

使用道具 举报

197#
发表于 2009-9-20 19:24:18 | 只看该作者
超好的材料,要补一下。
回复

使用道具 举报

196#
发表于 2009-9-20 17:14:05 | 只看该作者
好强,好东西啊,等待资料更新
回复

使用道具 举报

195#
发表于 2009-5-7 10:13:52 | 只看该作者
實在一流的整理,資料詳細,功不可沒,絕對精華帖子.
早搜到這帖子,就不用潜水那麼久了.
回复

使用道具 举报

194#
发表于 2009-5-6 11:06:51 | 只看该作者
资料很详细已经珍藏,好教程,正需要,非常感谢!
回复

使用道具 举报

193#
发表于 2009-5-5 04:29:40 | 只看该作者
呵呵  终于找到原创了
回复

使用道具 举报

192#
发表于 2009-5-5 04:29:30 | 只看该作者
呵呵  终于找到原创了
回复

使用道具 举报

191#
发表于 2009-4-24 23:56:37 | 只看该作者
建议做成电子书,并把对应附件或软件打包进去
回复

使用道具 举报

190#
发表于 2009-2-22 10:43:11 | 只看该作者
又来看看。。。。。。。
回复

使用道具 举报

189#
发表于 2008-12-22 23:54:13 | 只看该作者
很详细哟~~谢谢分享
回复

使用道具 举报

188#
发表于 2008-12-20 16:51:37 | 只看该作者
多谢楼主 精心收集! 收藏了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-1 17:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表