The title pretty much says it all, but is it possible to access the BIOS ID string from under Windows? Unfortunently this string is not stored under the registry. For those of you that don't know, a BIOS ID string looks like this: (it usually comes up on bootup on Award BIOS) 06/09/98-i44bx-w977tf-2a69kc39c-00 I don't need to generate any interrupts to get this as it is stored in memory. Anyone even know if it is possible? Since the BIOS string for me resides at F000:EC71 - EC96 i guess a better question would be if I could read the memory at that location without any problems under Windows 98,ME, and 2000. Thanks in advance, Devin.
on win32 application, i'm reading bios memory contents of 40:00 as follow and it seems to work: mov bx,40h mov gs,bx mov si,00h mov ax,word ptr gs: contents in ax angelo
what is this gs register?
, since 386 was added new extra segment registers GS and FS. angelo
Does that selector change work on any Windows ? i mean Win2k, Win NT, Win 98SE and Win Me ? That is the question :)
It's very unwise to use a selector without knowing whether you have at least read access to it (VERR/VERW). However, even using selectors should not be truly necessary. Since all Windows apps are stored in the 4 MB - 2 GB area, and all DOS apps in the 0-1MB area (well, okay...a little over 1 MB), you should be able to read and WRITE to the area 'above' the start of your program. Ie: ... .data szBIOSDate db "BIOS Date",0 ... .code invoke MessageBox,NULL,0FFFF5h,addr szBIOSDate,MB_OK ... And this works (at least on Windows 98) because I just tested it. :) Notice the address of 0FFFF5h. Normally, any data in a Windows application will have an address greater than 400000h (the 4 MB marker). However, due to the way selectors work, only memory above the limit is protected... Since all 32 bit application selectors start at 0h and go to 400000h+, the area for DOS apps (0 - 1 MB+) is still accessible. :)
hmm that's interesting. but how do you know at which adress which bios information is located? I have never done anything with bios informations before, so any help is much apriciated. sign CyBerian
There are some constant addresses in memory for certain things. A few I remember are FFFF:0005 (BIOS date string, 0FFFF5h in linear mapping), FFFF:0000 (the first instruction), and FFFF:000E (the computer type, practically defunct now, with CPUID). I'm sure you can find a list somewhere online of BIOS constants and variables. If not, lemme know and I'll send you a copy of my list (if I can find it). :)
Under Windows NT there is an easy way to get the BIOS Information you read the registry under the following key: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System look at the values under this key, you will find the following: The value names should be the same on your machine but the actual data in them will most likely be different Identifier - AT/AT COMPATIBLE SystemBiosDate - 04/08/98 SystemBiosVersion - Phoenix BIOS 4.0 Release 6.0 VideoBiosDate - 10/12/97 VideoBiosVersion - STB Velocity 128 (RIVA 128) Ver. 1.81 Under the following key you can get the CPU Speed HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0 there is a ~Mhz item that contains the value of the approximate CPU Speed. Under Windows 9x to get the BIOS Versions you need to access memory at specific locations. Abs Location Whats there? ------------------------------------------------------------ FE061 BIOS Name (Zero terminated String) FFFF5 BIOS Date (MM/DD/YY) FE091 BIOS Copyright (Zero Terminated String) FEC71 BIOS Serial Number (Zero Terminated String) You can use these locations under Windows NT but you need to be able to access these physical locations.