Change Device boot order in Windows

Change Device boot order in Windows

Post by Darre » Sun, 05 Sep 2004 20:02:09


I need to change the device boot order of a number of machines within a
Windows environment, specifically XPe and WinPE. The BIOS installed on the
machines (Controlled environment) is PhoenixBIOS 4.60, I believe it supports
a set of BIOS functions to change the device boot order.



These functions are described in the specification at:

http://www.yqcomputer.com/



The end goal of what I am trying to achieve is to tell the machine to
"reboot from network" or "reboot from hard drive" etc.



The main function I want to execute hooks up-to a BIOS interrupt INT 66h -
Set Boot First. The documentation states "All functions are available in
Real Mode and 16:16 Protected Mode."



My questions are:

1.. Is it possible to call this function from within a device driver?
2.. Is there another way to do this?
3.. Where do I start?
Thanks in Advance
Darren
 
 
 

Change Device boot order in Windows

Post by Tim Robert » Mon, 06 Sep 2004 15:09:43


Ick. It is possible to get from 32-bit protect mode to 16-bit protect
mode, but it ain't easy.


With difficulty. You could look for ways to call the undocumented function
Ke386CallBios. It will do it, but it's a pain.


At its root, this INT66 call must be setting bytes somewhere in the BIOS
CMOS. That's the only place where these kinds of settings can survive.
One possible alternative is to disassemble the INT66 call in the BIOS,
figure out which bytes you need to touch, and touch them yourself. CMOS
can be changed using I/O port calls, which can be done from a driver
without any trouble at all.
--
- Tim Roberts, XXXX@XXXXX.COM
Providenza & Boekelheide, Inc

 
 
 

Change Device boot order in Windows

Post by Darre » Tue, 07 Sep 2004 16:02:25

his is a multi-part message in MIME format.


Tim, thanks for this,

I've actually discovered that the call is actually a Plug & Play function call, not an interrupt. I beleive I need to scan the BIOS segment to locate the '$PnP' header signature and then use the segment/offest contained within the header to perform a 16:16 protected-mode function call.

I Think I can get the header by scanning \Device\PhysicalMemory F9000 for the header, and extract the call. However, I would still need to make the function call!!

It feels as though I am going down the wrong road.

I Will take a look into disassemble the function and make the call myself, as you suggested.

Thanks again, and any other suggestions on how to make a PnP function call would be very welcome.

Darren


"Tim Roberts" < XXXX@XXXXX.COM > wrote in message news: XXXX@XXXXX.COM ...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2180" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=Arial size=2>Tim, thanks for this, </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I've actually discovered that the call is actually
a Plug & Play function call, not an interrupt.  I beleive I need to
scan the BIOS segment to locate the '$PnP' header signature and then use the
segment/offest contained within the header to perform a 16:16 protected-mode
function call.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I Think I can get the header by scanning
\Device\PhysicalMemory F9000 for the header, and extract the call. However, I
would still need to make the function call!!</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>It feels as though I am going down the wrong
road.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I Will take a look into disassemble the function
and make the call myself, as you suggested.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Thanks again, and any other suggestions on how to
make a PnP function call would be very welcome.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Darren</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>"Tim Roberts" <</FONT><A
href="mailto: XXXX@XXXXX.COM "><FONT face=Arial
size=2> XXXX@XXXXX.COM </FONT></A><FONT face=Arial size=2>> wrote in message
</FONT><A href="news: XXXX@XXXXX.COM "><FONT
face=Arial
size=2>news: XXXX@XXXXX.COM </FONT></A><FONT
face=Arial size=2>...</FONT></DIV><FONT face=Arial size=2>> "Darren"
<</FONT><A href="mailto: XXXX@X