mirror of https://github.com/tongzx/nt5src
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
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;
|
|
}
|