Jump to content
Strawberry Orange Banana Lime Leaf Slate Sky Blueberry Grape Watermelon Chocolate Marble
Strawberry Orange Banana Lime Leaf Slate Sky Blueberry Grape Watermelon Chocolate Marble

MSFN is made available via donations, subscriptions and advertising revenue. The use of ad-blocking software hurts the site. Please disable ad-blocking software or set an exception for MSFN. Alternatively, register and become a site sponsor/subscriber and ads will be disabled automatically. 

Sign in to follow this  
idle.newbie

Snippet for OemPnPDriversPath, setDevicePath clone

Recommended Posts

idle.newbie    0

OemPnPDriversPath.cmd

@ECHO OFF
IF "%1"=="" GOTO EOF
IF NOT EXIST %1 GOTO EOF
IF "%2"=="" GOTO EOF
IF NOT EXIST %2 GOTO EOF

SETLOCAL ENABLEDELAYEDEXPANSION
SET OemPnPDriversPath=$
SET STDOUT=WINNT.SIF
TYPE>%STDOUT% 2>NUL

::traverse drivers path
CALL :TRAVERSAL %1
ECHO %OemPnPDriversPath:~2%
::recreate winnt.sif
CALL :RECREATE %2 %STDOUT% Unattended OemPnPDriversPath "%OemPnPDriversPath:~2%"

GOTO EOF

:TRAVERSAL
PUSHD %1
IF EXIST *.INF SET OemPnPDriversPath=!OemPnPDriversPath!;%CD:~3%
FOR /F %%I IN ('DIR /AD /OGN /B') DO (
 CALL :TRAVERSAL %CD%\%%I
)
POPD
GOTO EOF

:RECREATE
::%1=Source, %2=Destination, %3=Section, %4=Key, %5=Value
SET SECTION=NO
SET KEY=NO
FOR /F "usebackq tokens=1,2*" %%I IN ("%1") DO (
 IF "%%J"=="=" (
   IF /I "%%I"=="%4" (
     ECHO   %4 = %5>>%2
     SET UPDATED=YES
   ) ELSE (
     ECHO   %%I %%J %%K>>%2
   )
 ) ELSE (
   IF /I "%%I"=="[%3]" (
     SET SECTION=YES
   ) ELSE (
     IF NOT "%SECTION%"=="NO" (
       IF "%KEY%"=="NO" (
         ECHO   %4 = %5>>%2
         SET KEY=YES
       )
       SET KEY=NO
     )
   )
   ECHO.>>%2
   ECHO %%I>>%2
 )
)
GOTO EOF

:EOF

It's a Pyron's SetDevicePath.exe clone in .cmd batch scripting, a modified version of my Detached.cmd. It scans every directories under where you specified, looking for *.inf, and write corresponding OemPnPDriverPath entry into WINNT.SIF.

It needs two arguments, #1 full-path to your drivers' directory, #2 your WINNT.SIF.

1.copy/extract every drivers to where it should be. eg:

XCOPY "C:\UWCD root\$OEM$\$1\Drivers" C:\Drivers
or
7za x Drivers_MassStorage.7z -y -oC:\

2.run the script.

OemPnPDriversPath.cmd C:\Drivers "C:\UWCD root\i386\WINNT.SIF"

note:

1.pretty your WINNT.SIF, make sure every "=" between key/value pair has space before/after it. eg:

OemPreinstall = Yes

You can do this with RegExp capable text editor like EmEditor, replace all "^(\s*;?\s*\w+)\s*=\s*" with "\1 = ".

2.do not run this .cmd inside i386, or your WINNT.SIF will be empty, 'cause output WINNT.SIF is on current directory.

Share this post


Link to post
Share on other sites

great ! nice ! wonderfull !

i like cmd scripts.

i will keep this one and try it.

:thumbup

Works perfect but the name you choose for WINNT.SIF in your example is a bit confusing. :wacko:

OemPnPDriversPath.cmd C:\Drivers "C:\UWCD root\i386\WINNT.SIF"

Use 8.3 naming convention for your path and it's more easy.

OemPnPDriversPath.cmd C:\Drivers C:\XPCREATE\CDROOT\i386\WINNT.SIF

Edited by Bilou_Gateux

Share this post


Link to post
Share on other sites

I can't get this script to work...

It DOES give output: I find a new WINNT.SIF file in the current directory, with everything in it except the comments. But unfortunately also without OemPnPDriversPath...

How did it work for you Bilou_Gateaux?

Share this post


Link to post
Share on other sites

My %systemdrive% is as described below:

$OEM$ dir

oemdir.jpg

PnPDrvrs dir

PnPDrvrs.jpg

UNATTEND.TXT code

Open command prompt in C:\PnPDrvrs:

OEMPnPDriversPath C:\PnPDrvrs C:\$OEM$\UNATTEND.TXT

C:\PnPDrvrs\WINNT.SIF content:

OemPnPDriversPath = "PnPDrvrs\Display\Intel;PnPDrvrs\Display\NVidia;PnPDrvrs\Hdc\Intel;PnPDrvrs\Media\Fujitsu;
***//cut for easy reading//***
PnPDrvrs\Net\BRCM;PnPDrvrs\Net\Intel;PnPDrvrs\System\Intel;PnPDrvrs\Usb\Intel"

Share this post


Link to post
Share on other sites

For me it is like this:

K:\OemPnPDriversPath.cmd

K:\$OEM$\$1\DP

K:\I386\winnt.sif

And OemPnPDriversPath.cmd has to search for devicepaths in K:\$OEM$\$1\DP, adding them to K:\I386\winnt.sif.

EDIT: but as I said, it doesn't work...

Share this post


Link to post
Share on other sites

The batch file doesn't direct edit your source WINNT.SIF but recreate a new one wich is saved to the dir where you have saved the batch file.

Try first to move the batch file to your DP dir ie K:\$OEM$\$1\DP and then, the resulting new SIF file should be in K:\$OEM$\$1\DP\WINNT.SIF

Share this post


Link to post
Share on other sites
The batch file doesn't direct edit your source WINNT.SIF but recreate a new one wich is saved to the dir where you have saved the batch file.

I know that... but the one that I find in the current directory doesn't contain the OemPnPDriversPath...

Share this post


Link to post
Share on other sites

OK i have created the same dir tree as you on my D: partition

D:\$OEM$\$1\PnPDrvrs contains all drivers subdirs and OEMPnPDriversPath.cmd

D:\I386 contains the original WINNT.SIF

Open command prompt:

cmd /k cd /d D:\$OEM$\$1\PnPDrvrs

run:

OEMPnPDriversPath D:\$OEM$\$1\PnPDrvrs D:\I386\WINNT.SIF

and check the result (new WINNT.SIF) in D:\$OEM$\$1\PnPDrvrs

OemPnPDriversPath = "$OEM$\$1\PnPDrvrs\Display\Intel;$OEM$\$1\PnPDrvrs\Display\NVidia;$OEM$\$1\PnPDrvrs\Hdc\Intel;$OEM$\$1\PnPDrvrs\Media\Fujitsu;$OEM$\$1\PnPDrvrs\Net\BRCM;$OEM$\$1\PnPDrvrs\Net\Intel;$OEM$\$1\PnPDrvrs\System\Intel;$OEM$\$1\PnPDrvrs\Usb\Intel"

But the solution is not clean as having the PnP Drivers dir on root of harddrive to build the OemPnPDriversPath =

Compare the result with my previous post.

I suggest to first build the winnt.sif with your DP dir in root of hard drive and then move to the subdir you want ie $OEM$\$1

Share this post


Link to post
Share on other sites
Afterdawn    0

Hmm too bad... I thougt your script changed it at runtime! I'm still working on a script that automatically updates the path in the t-39 stage. Thus as a attached program! Actually exactly the same as Pyron's SetDevicePath.exe, but I want it as an cmd-script!

Share this post


Link to post
Share on other sites
Afterdawn    0
Actually exactly the same as Pyron's SetDevicePath.exe, but I want it as an cmd-script!

Why do you want a cmd file so badly, if the executable has been confirmed working by so many?

Well, maybe hard to explain, but I'll try:

I just like to have something that I know HOW it works. Just out of curiosity, and to be assured that it does what I think it does. Also, I might want to add/modify some things, every now and then.

Share this post


Link to post
Share on other sites
Well, maybe hard to explain, but I'll try:

I just like to have something that I know HOW it works. Just out of curiosity, and to be assured that it does what I think it does.

I understand you, I'm the same. But if I see that something has been working for hundreds of people, then I'll gladly use it...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×