Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

192 lines
6.2 KiB

#include "ulib.hxx"
#include "bootedit.hxx"
#include "bpb.hxx"
extern "C" {
#include <stdio.h>
}
VOID
DOS_BOOT_EDIT::SetBuf(
IN HWND WindowHandle,
IN OUT PVOID Buffer,
IN ULONG Size
)
{
_buffer = Buffer;
_size = Size;
SetScrollRange(WindowHandle, SB_VERT, 0, 0, FALSE);
InvalidateRect(WindowHandle, NULL, TRUE);
}
VOID
DOS_BOOT_EDIT::Paint(
IN HDC DeviceContext,
IN RECT InvalidRect,
IN HWND WindowHandle
)
{
EXTENDED_BIOS_PARAMETER_BLOCK bios;
TEXTMETRIC textmetric;
INT ch, current;
TCHAR buf[1024];
SetScrollRange(WindowHandle, SB_VERT, 0, 0, FALSE);
if (!_buffer || _size < 128) {
return;
}
memset(&bios, 0, sizeof(EXTENDED_BIOS_PARAMETER_BLOCK));
// Unpack the bios
UnpackExtendedBios(&bios, (PPACKED_EXTENDED_BIOS_PARAMETER_BLOCK)_buffer);
SelectObject(DeviceContext, GetStockObject(ANSI_FIXED_FONT));
GetTextMetrics(DeviceContext, &textmetric);
ch = textmetric.tmExternalLeading + textmetric.tmHeight;
current = 0;
swprintf(buf, TEXT("OEM String: %c%c%c%c%c%c%c%c"),
bios.OemData[0],
bios.OemData[1],
bios.OemData[2],
bios.OemData[3],
bios.OemData[4],
bios.OemData[5],
bios.OemData[6],
bios.OemData[7]);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Bytes per sector: %x"), bios.Bpb.BytesPerSector);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Sectors per cluster: %x"), bios.Bpb.SectorsPerCluster);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Reserved Sectors: %x"), bios.Bpb.ReservedSectors);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Number of fats: %x"), bios.Bpb.Fats);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Root entries: %x"), bios.Bpb.RootEntries);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Small sector count: %x"), bios.Bpb.Sectors);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Media byte: %x"), bios.Bpb.Media);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Sectors per fat: %x"), bios.Bpb.SectorsPerFat);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
if(!bios.Bpb.SectorsPerFat){
swprintf(buf, TEXT("Large sectors per fat: %x"), bios.Bpb.BigSectorsPerFat);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
}
swprintf(buf, TEXT("Sectors per track: %x"),
bios.Bpb.SectorsPerTrack);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Number of heads: %x"),
bios.Bpb.Heads);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Number of hidden sectors: %x"),
bios.Bpb.HiddenSectors);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Large number of sectors: %x"),
bios.Bpb.LargeSectors);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
if(!bios.Bpb.SectorsPerFat){
swprintf(buf, TEXT("Extended flags: %x"),
bios.Bpb.ExtFlags);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("File system version: %x"),
bios.Bpb.FS_Version);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Root directory start cluster: %x"), bios.Bpb.RootDirStrtClus);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("File system info sector number: %x"), bios.Bpb.FSInfoSec);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Backup boot sector: %x"), bios.Bpb.BkUpBootSec);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
}
swprintf(buf, TEXT("Physical drive: %x"), bios.PhysicalDrive);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Current head: %x"), bios.CurrentHead);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Extended boot signature: %x"), bios.Signature);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Serial number: %x"), bios.SerialNumber);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("Label: %c%c%c%c%c%c%c%c%c%c%c"),
bios.Label[0],
bios.Label[1],
bios.Label[2],
bios.Label[3],
bios.Label[4],
bios.Label[5],
bios.Label[6],
bios.Label[7],
bios.Label[8],
bios.Label[9],
bios.Label[10]);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
swprintf(buf, TEXT("System id: %c%c%c%c%c%c%c%c"),
bios.SystemIdText[0],
bios.SystemIdText[1],
bios.SystemIdText[2],
bios.SystemIdText[3],
bios.SystemIdText[4],
bios.SystemIdText[5],
bios.SystemIdText[6],
bios.SystemIdText[7]);
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
current += ch;
}