SMBus / SMBIOS

Hi there,

I don’t have much experience writing Drivers, so I hope this is not
something like a fool’s question or a faq :wink:

I want to access (read only!) to SMBIOS structures of a PC running
Windows (primary Windows NT, but if it would work under 2k and/or 9x
it would be nice). Access is quite simple: Just search for “SM” at
the memory between 0xF0000 and 0xFFFFF and go further (there lies a
struct containing the address of the SMBIOS data).

So, because direct memory access is not possible (as a regular user in
a user mode application) I guess I should realize this as a driver. No
problem so far. My problem now is, that on older Mainboards the SMBIOS
structures have to be accessed using a Plug and Play function
(function codes 0x50 - 0x5f). How can I issue these calls? Is there a
function for this?

I know that I can scan memory in the range of 0xF0000 to 0xFFFFF for
the string “$PnP” - a struct follows that contains the entry point of
the BIOS Plug and Play interface. But the address is a 16 Bit Real
Mode Address and (a second one) is a 16 Bit Protected Mode Address.
Can I use them? And when yes: How ???

Thank you for any hints…

Bye
Michael


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Typically, directly accessing the BIOS is strictly “VERBOTEN!” in Windows NT
and above. For one thing, once NtLdr has been run and the kernel kicked off,
by the time your driver loads the BIOS has been mapped out of memory,
leaving you with the short end of a very nasty stick if you try the old
“DOS/9x” tricks. Real mode access from a driver has been beat to death in
the newsgroups with the general consensus being that only the weak brained
would even try, or think that that can be done. :slight_smile:

Realistically, you do not need direct BIOS access since in all probability
the information you need is available through legitimate access methods such
as WMI to access SMBios in 2000.

Here is a link that might help:
http://www.microsoft.com/technet/sms/getasset.asp

Gary G. Little
Staff Engineer
Broadband Storage, Inc.
xxxxx@Broadstor.com
xxxxx@inland.net

-----Original Message-----
From: Michael Knigge [mailto:xxxxx@gmx.de]
Sent: Tuesday, June 19, 2001 11:20 AM
To: NT Developers Interest List
Subject: [ntdev] SMBus / SMBIOS

Hi there,

I don’t have much experience writing Drivers, so I hope this is not
something like a fool’s question or a faq :wink:

I want to access (read only!) to SMBIOS structures of a PC running
Windows (primary Windows NT, but if it would work under 2k and/or 9x
it would be nice). Access is quite simple: Just search for “SM” at
the memory between 0xF0000 and 0xFFFFF and go further (there lies a
struct containing the address of the SMBIOS data).

So, because direct memory access is not possible (as a regular user in
a user mode application) I guess I should realize this as a driver. No
problem so far. My problem now is, that on older Mainboards the SMBIOS
structures have to be accessed using a Plug and Play function
(function codes 0x50 - 0x5f). How can I issue these calls? Is there a
function for this?

I know that I can scan memory in the range of 0xF0000 to 0xFFFFF for
the string “$PnP” - a struct follows that contains the entry point of
the BIOS Plug and Play interface. But the address is a 16 Bit Real
Mode Address and (a second one) is a 16 Bit Protected Mode Address.
Can I use them? And when yes: How ???

Thank you for any hints…

Bye
Michael


You are currently subscribed to ntdev as: xxxxx@broadstor.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Hi all:

By simply running debug.exe and pointing to the classic ffff:0, I get the
bios date and the initial
jump as expected. Then I dump from f000:0 and get to read all the old
fashioned bios, just
like I could in 1981. I am writing this from a machine running NT4
workstation SP6a. So
there are ways to do that even from the application side. I am running as
an admin, not
sure if that matters.

I suspect that by creating a 16 bit virtual device driver for the virtual
dos machine you
might get something going. Check out VDD’s in MSDN and at
http://www.osr.com/ddk/vdd_9dno.htm.

Regards,

George

At 12:13 PM 6/19/01 -0700, you wrote:

Typically, directly accessing the BIOS is strictly “VERBOTEN!” in Windows
NT and above. For one thing, once NtLdr has been run and the kernel kicked
off, by the time your driver loads the BIOS has been mapped out of memory,
leaving you with the short end of a very nasty stick if you try the old
“DOS/9x” tricks. Real mode access from a driver has been beat to death in
the newsgroups with the general consensus being that only the weak brained
would even try, or think that that can be done. :slight_smile:

Realistically, you do not need direct BIOS access since in all probability
the information you need is available through legitimate access methods
such as WMI to access SMBios in 2000.

Here is a link that might help:
http:http://www.microsoft.com/technet/sms/getasset.asp
>
>
>Gary G. Little
>Staff Engineer
>Broadband Storage, Inc.
>xxxxx@Broadstor.com
>xxxxx@inland.net
>
>-----Original Message-----
>From: Michael Knigge [mailto:xxxxxmailto:xxxxx@gmx.de]
>Sent: Tuesday, June 19, 2001 11:20 AM
>To: NT Developers Interest List
>Subject: [ntdev] SMBus / SMBIOS
>
>Hi there,
>
>I don’t have much experience writing Drivers, so I hope this is not
>something like a fool’s question or a faq :wink:
>
>I want to access (read only!) to SMBIOS structures of a PC running
>Windows (primary Windows NT, but if it would work under 2k and/or 9x
>it would be nice). Access is quite simple: Just search for “SM” at
>the memory between 0xF0000 and 0xFFFFF and go further (there lies a
>struct containing the address of the SMBIOS data).
>
>So, because direct memory access is not possible (as a regular user in
>a user mode application) I guess I should realize this as a driver. No
>problem so far. My problem now is, that on older Mainboards the SMBIOS
>structures have to be accessed using a Plug and Play function
>(function codes 0x50 - 0x5f). How can I issue these calls? Is there a
>function for this?
>
>I know that I can scan memory in the range of 0xF0000 to 0xFFFFF for
>the string “$PnP” - a struct follows that contains the entry point of
>the BIOS Plug and Play interface. But the address is a 16 Bit Real
>Mode Address and (a second one) is a 16 Bit Protected Mode Address.
>Can I use them? And when yes: How ???
>
>Thank you for any hints…
>
>Bye
> Michael
>
>
>
>
>—
>You are currently subscribed to ntdev as: xxxxx@broadstor.com
>To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
>—
>You are currently subscribed to ntdev as: xxxxx@ntrealtime.com
>To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com</mailto:xxxxx></http:>