打造NDIS5PNP的利器PNPENV.EXE

首先介绍一下PNPENV的功能,此工具可以在DOS下获得网卡的相关参数,我们可以利用此参数正确的生成网卡的注册表。PNPENV执行完后返回如下的变量
SET PNPV=10EC
SET PNPD=8139
SET PNPS=813910EC
SET PNPB=01
SET PNPE=05
SET PNPF=00
SET PNPK=28
SET PNPR=10
SET PNPZ=16
SET PNPI=0B
SET PNPN=A
SET PNPC=02
SET PNPU=00
SET PNPP=00

如果 PNPB=01,则网卡的注册表对应如下[HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10{%PNPK%}F000]
PNPK即是对应的网卡关键注册码。
如果PNPB=00,则网卡的注册表对应如下[HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\BUS_00&DEV_{%PNPE%}&FUNC_00]
PNPE即是对应的网卡关键注册码。
一般PNPB=01对应的是INTEL系列,PNPB=00对应的是VIA和SIS系列。
而PNPV PNPD PNPS 对应网卡下面的键值,如果工作统一用8139网卡,则全是一样,不用改,分别对应如果红色部分 HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10

知道怎么回事了吧?
我现在贴两个注册表
一、PNPB=01时
REGEDIT4

[HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10]

[HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10{%PNPK%}F000]
“Capabilities”=hex:14,00,00,00
“HardwareID”=“PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10,PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC,PCI\VEN_10EC&DEV_8139&REV_10&CC_0200,PCI\VEN_10EC&DEV_8139&CC_020000,PCI\VEN_10EC&DEV_8139&CC_0200”
“CompatibleIDs”=“PCI\VEN_10EC&DEV_8139&REV_10,PCI\VEN_10EC&DEV_8139,PCI\VEN_10EC&CC_020000,PCI\VEN_10EC&CC_0200,PCI\VEN_10EC,PCI\CC_020000,PCI\CC_0200,PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10”
“DeviceDesc”=“Realtek RTL8139/810x Family Fast Ethernet NIC”
“HWRevision”=“016”
“Class”=“Net”
“ConfigFlags”=hex:10,00,00,00
“ClassGUID”=“{4d36e972-e325-11ce-bfc1-08002be10318}”
“Driver”=“Net\0000”
“Mfg”=“Realtek Semiconductor Corp.”

[HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10{%PNPK%}F000\Bindings]
“NWLINK\0000”=“”
“MSTCP\0000”=“”

二、PNPB=00时
REGEDIT4

[HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10]

[HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\BUS_00&DEV_{%PNPE%}&FUNC_00]
“Capabilities”=hex:14,00,00,00
“HardwareID”=“PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10,PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC,PCI\VEN_10EC&DEV_8139&REV_10&CC_0200,PCI\VEN_10EC&DEV_8139&CC_020000,PCI\VEN_10EC&DEV_8139&CC_0200”
“CompatibleIDs”=“PCI\VEN_10EC&DEV_8139&REV_10,PCI\VEN_10EC&DEV_8139,PCI\VEN_10EC&CC_020000,PCI\VEN_10EC&CC_0200,PCI\VEN_10EC,PCI\CC_020000,PCI\CC_0200,PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10”
“DeviceDesc”=“Realtek RTL8139/810x Family Fast Ethernet NIC”
“HWRevision”=“016”
“Class”=“Net”
“ConfigFlags”=hex:10,00,00,00
“ClassGUID”=“{4d36e972-e325-11ce-bfc1-08002be10318}”
“Driver”=“Net\0000”
“Mfg”=“Realtek Semiconductor Corp.”

[HKEY_LOCAL_MACHINE\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\BUS_00&DEV_{%PNPE%}&FUNC_00\Bindings]
“NWLINK\0000”=“”
“MSTCP\0000”=“”

再通过LITENET的QPATCH工具来替换注册表里的变量,我们就可以获得正确的网卡的注册表。导入,按道理网卡就可以驱动了,
现在的问题是,假如上传的是VIA芯片组,那么只能在工作站是PNPB=00时,通过正常,而PNPB=01是通不过,WIN。COM过后脱网,表明网卡没有正确驱动,不知是怎么回事。
假如我先用NDIS3PNP驱动,进入一次98,此时NDIS5的注册表也一并导入,注意只需进一次,然后我删除NIDIS3的驱动,重启,NDIS5的驱动就可以正常工作,为什么非要进一次桌面NDIS5才能工作呢?想不通
我看了创世纪注册表,先也是用NDIS3,进入后,再用程序自动删除NDIS3(猜测,我不是创世纪的),而用NDIS5启动,让人感觉好像是真正的NDIS5PNP,其实他也要借用NDIS3PNP来进一次桌面,来激活NDIS5吧。

由于该程序是在某个FTP上下的,还是网卡给的,记不清了。在这里我想请问程序开发者,其它的一些参数起什么作用?能出来介绍一下是最好,盼望中。。。。

我在把批处理的内容处理一下
pnpenv>s:\ABC.bat
call s:\ABC.bat
IF “%PNPB%”==“01” GOTO intel
goto via

:intel
qpatch D:\WINBOOT\intel.reg S:\PATCH.REG
goto end

:via
qpatch D:\WINBOOT\via.reg S:\PATCH.REG
goto end

:end
regedit S:\PATCH.REG

怎么没有下载的地方?

虽然看不懂,但是第一个顶

转一个帖子:

lllyyyhhh - 05-23-2003 03:50 PM
文章主题:

大家好,这是我第一次发贴!
我觉得李哲兄的想法很好,但方法太死了,受限于不同的主板.
请大家参考以下我的方法:
1、工作站第一次启动时用NDIS3启动,让系统自动安装网卡到\enum\pci
下(如:8139的用netrts5.inf),进入windows后编程将\root\net\00??
删除,下一次启动就是NDIS5了.

2、工作站启动时直接对硬件编程取得网卡的pci插槽位置,与上次保存的比较,
相同用NDIS5启动,否则用NDIS3启动(像第一次启动),然后取得网卡的pci插槽位置保存到某一位置,供下次启动比较。

3、要求有较高的dos编程技术。

本人也是无盘、编程爱好者,已成功启动csj、mz、spl无盘系统(不需要任何注册码和注册机,启动后和原来功能速度一样),当然我也设计出了自己的无盘系统(pnp,教学系统),已在多个学校使用,很好。
大家愿意交流的话:QQ:41343837
MAIL:LLLYYYHHH@21CN.COM

终于说到最实质的问题了。我也憋不住想说几句:

网卡的真正PNP应该是NDIS5的,实现这个,实质上是通过导注册表实现的,但导入的内容如何得到,有两个途径:
1。DOS下编程实现,通过DOS下的程序得到网卡的位置等参数,象上面的帖子都是的;
2。通过BOOTP服务实现。有高手实际上已经做得很成功了,基于一些特殊原因,没征得他同意我不能说出他的名字。原理是通过BOOTP服务把工作站的网卡信息回传到服务器上,形成一段供导入的注册表。

希望大家,特别是精通DOS下编程的,多探讨。

既然已经做好啦,为何不拿出来,让我们学习一下呢。! :mrgreen:

DOS下编程相当痛苦。我为了做一个网卡类型检测程序,做了一个月。结果还是失败了。主要问题是主板不同,加载地址不同。

请大家登录后,下载PNPENV。EXE
请大家下载后,改名为PNPENV。EXE
Pnpenv.RAR (56.3 KB)

UP!谢了胡兄!

IF %PNPNDIS%==0 SET NPCIKEY=%PNPK%F000
IF %PNPNDIS%==1 SET NPCIKEY=BUS_%PNPB%&DEV_%PNPE%&FUNC_%PNPF%

ECHO [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ASD\Prob{CF2524C0-29AE-11CF-97EA-00AA0034319D}] >>%PNPFILE%
ECHO “PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%\%NPCIKEY%”=hex:00 >>%PNPFILE%

ECHO [HKEY_LOCAL_MACHINE\Enum\PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%] >>%PNPFILE%

ECHO [HKEY_LOCAL_MACHINE\Enum\PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%%NPCIKEY%] >>%PNPFILE%
ECHO “Capabilities”=hex:14,00,00,00 >>%PNPFILE%
ECHO “HardwareID”=“PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%,PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%,PCI\VEN_%PNPV%&DEV_%PNPD%&REV_%PNPR%&CC_0200,PCI\VEN_%PNPV%&DEV_%PNPD%&CC_020000,PCI\VEN_%PNPV%&DEV_%PNPD%&CC_0200” >>%PNPFILE%
ECHO “CompatibleIDs”=“PCI\VEN_%PNPV%&DEV_%PNPD%&REV_%PNPR%,PCI\VEN_%PNPV%&DEV_%PNPD%,PCI\VEN_%PNPV%&CC_020000,PCI\VEN_%PNPV%&CC_0200,PCI\VEN_%PNPV%,PCI\CC_020000,PCI\CC_0200,PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%” >>%PNPFILE%
ECHO “DeviceDesc”=“Realtek RTL8139(A/B/C/8130) PCI Fast Ethernet NIC” >>%PNPFILE%
ECHO “HWRevision”=“%PNPZ%” >>%PNPFILE%
ECHO “ClassGUID”=“{4d36e972-e325-11ce-bfc1-08002be10318}” >>%PNPFILE%
ECHO “Class”=“Net” >>%PNPFILE%
ECHO “Driver”=“Net\0000” >>%PNPFILE%
ECHO “Mfg”=“Realtek” >>%PNPFILE%
ECHO “ConfigFlags”=hex:10,00,00,00 >>%PNPFILE%

找出对应关系就是了!

netpc.ods.org/pn/modules.php?op= … c&start=15

大家认真看,就全部都明白了!

真是又一精典好文。厉害

这段很有参考价值!

RTL8029.BAT

@ECHO OFF

SET PNPFILE=%HJREG%

REM ----------------------------------------------------------------------------
REM 设置PCI设备在不同插槽选项,W98有两种可能,选其中一种
REM ----------------------------------------------------------------------------

IF %PNPNDIS%==0 SET NPCIKEY=%PNPK%F000
IF %PNPNDIS%==1 SET NPCIKEY=BUS_%PNPB%&DEV_%PNPE%&FUNC_%PNPF%

REM ----------------------------------------------------------------------------
REM 有问题的设备列表,WINDOWS PNP使用
REM ----------------------------------------------------------------------------

ECHO [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ASD\Prob{CF2524C0-29AE-11CF-97EA-00AA0034319D}] >>%PNPFILE%
ECHO “PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%\%NPCIKEY%”=hex:00 >>%PNPFILE%

ECHO [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ASD\Prob{9B4E7760-3196-11CF-97EA-00AA0034319D}] >>%PNPFILE%
ECHO “PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%\%NPCIKEY%”=hex:00 >>%PNPFILE%

REM ----------------------------------------------------------------------------
REM xxF000 子键和 BUS_xx&DEV_xx&FUNC_xx 子键由NPCIKEY环境变量定义
REM ----------------------------------------------------------------------------

IF %PNPNDIS%==2 GOTO NDIS3

:NDIS5

ECHO [HKEY_LOCAL_MACHINE\Enum\PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%] >>%PNPFILE%

ECHO [HKEY_LOCAL_MACHINE\Enum\PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%%NPCIKEY%] >>%PNPFILE%
ECHO “Capabilities”=hex:14,00,00,00 >>%PNPFILE%
ECHO “HardwareID”=“PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%,PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%,PCI\VEN_%PNPV%&DEV_%PNPD%&REV_%PNPR%,PCI\VEN_%PNPV%&DEV_%PNPD%,PCI\VEN_%PNPV%&DEV_%PNPD%&REV_%PNPR%&CC_0200,PCI\VEN_%PNPV%&DEV_%PNPD%&CC_020000,PCI\VEN_%PNPV%&DEV_%PNPD%&CC_0200” >>%PNPFILE%
ECHO “CompatibleIDs”=“PCI\VEN_%PNPV%&CC_020000,PCI\VEN_%PNPV%&CC_0200,PCI\VEN_%PNPV%,PCI\CC_020000,PCI\CC_0200,PCI\VEN_%PNPV%&DEV_%PNPD%” >>%PNPFILE%
ECHO “DeviceDesc”=“Realtek RTL8029 Ethernet Adapter and Compatibles” >>%PNPFILE%
ECHO “HWRevision”=“%PNPZ%” >>%PNPFILE%
ECHO “Class”=“Net” >>%PNPFILE%
ECHO “Driver”=“Net\0000” >>%PNPFILE%
ECHO “Mfg”=“Realtek” >>%PNPFILE%
ECHO “ClassGUID”=“{4d36e972-e325-11ce-bfc1-08002be10318}” >>%PNPFILE%
ECHO “ConfigFlags”=hex:10,00,00,00 >>%PNPFILE%
ECHO. >>%PNPFILE%

ECHO [HKEY_LOCAL_MACHINE\Enum\PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%%NPCIKEY%\LogConfig] >>%PNPFILE%
ECHO “0000”=hex:00,04,00,00,00,30,00,00,10,00,00,00,04,00,00,00,03,00,00,00,ff,ff,\ >>%PNPFILE%
ECHO 00,00,24,00,00,00,02,00,00,00,01,00,0c,00,00,d8,1f,d8,00,00,ff,00,e0,ff,20,\ >>%PNPFILE%
ECHO 00,00,00,ff,ff,00,00,ff,00,10,00,00,00,30,00,00,00,01,00,00,00,01,00,14,00,\ >>%PNPFILE%
ECHO 00,80,0c,00,ff,bf,0c,00,00,00,00,00,ff,ff,ff,ff,00,40,00,00,00,80,0c,00,ff,\ >>%PNPFILE%
ECHO bf,0c,00,00,00,00,00,ff,00,00,00,00,00,00,00 >>%PNPFILE%
ECHO. >>%PNPFILE%

ECHO [HKEY_LOCAL_MACHINE\Enum\PCI\VEN_%PNPV%&DEV_%PNPD%&SUBSYS_%PNPS%&REV_%PNPR%%NPCIKEY%\Bindings] >>%PNPFILE%
ECHO “MSTCP\0000”=“” >>%PNPFILE%
ECHO. >>%PNPFILE%

GOTO NDISEND

删除这段注册表是容易

[HKEY_LOCAL_MACHINE\Enum\Root\Net]

直接导入下面一段Net.reg 文件就行了,不用编什么程序的!大家试试!

REGEDIT4

[-HKEY_LOCAL_MACHINE\Enum\Root\Net]

非常感谢胡兄提供的NDIS5PNP的程序,我的NDIS5PNP启动包已经完成。
第一次起启是NDIS3PNP。后面启动是NDIS5PNP。
NDIS3PNP的手工注册表段在第二个启动自动删除。
测试环境:服务器:P3 677 hy128m tp8139
3com的pxe无盘工具
工作站:C433 hy64 810 tp8139
tp10m hub 启动时间30秒。
NDIS5PN感觉启动慢,
我以前用pdk做的快的12秒,慢的18秒

我想搞出,不需要NDIS3的,纯NDIS5的PNP

难道NDIS5PNP非要NDIS3过渡吗?

发表于: 20 八月 2003 09:48 pm


我想搞出,不需要NDIS3的,纯NDIS5的PNP

可能有点难,

开始我也想直接NDIS5的PNP ,用你提供NDIS5的PNP 直接进去,得不到网卡真正的资源(手工生成的资源也不行) ……网卡第一次进系统,网卡得到的注册表部份,可能不只是导入那些。

先用NDIS3进去,是为了得到网卡真正的资源(网卡得到的注册表部份),然后再用NDIS5的启动。

用NDIS3过渡NDIS5PNP那有什么关系呢?,关建是电脑第一次进系统或网卡换插槽时用NDIS3生成网卡的真正值就行了。
并不影响什么啊(觉得用NDIS3过渡NDIS5PNP还是蛮方便的)。

让“启动包”识别电脑是不是第一次进系统或网卡是不是换了插槽。这才是关键! :unamused: :unamused::roll::roll::roll::roll::roll::roll::roll::roll::roll::roll::roll: