147 lines
4.5 KiB
C++
147 lines
4.5 KiB
C++
|
#include "ulib.hxx"
|
||
|
#include "nbedit.hxx"
|
||
|
#include "untfs.hxx"
|
||
|
|
||
|
extern "C" {
|
||
|
#include <stdio.h>
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
NTFS_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
|
||
|
NTFS_BOOT_EDIT::Paint(
|
||
|
IN HDC DeviceContext,
|
||
|
IN RECT InvalidRect,
|
||
|
IN HWND WindowHandle
|
||
|
)
|
||
|
{
|
||
|
PPACKED_BOOT_SECTOR p;
|
||
|
BIOS_PARAMETER_BLOCK bpb;
|
||
|
TEXTMETRIC textmetric;
|
||
|
INT ch, current;
|
||
|
TCHAR buf[1024];
|
||
|
|
||
|
SetScrollRange(WindowHandle, SB_VERT, 0, 0, FALSE);
|
||
|
|
||
|
if (!_buffer || _size < 128) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
p = (PPACKED_BOOT_SECTOR) _buffer;
|
||
|
UnpackBios(&bpb, &(p->PackedBpb));
|
||
|
|
||
|
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"),
|
||
|
p->Oem[0],
|
||
|
p->Oem[1],
|
||
|
p->Oem[2],
|
||
|
p->Oem[3],
|
||
|
p->Oem[4],
|
||
|
p->Oem[5],
|
||
|
p->Oem[6],
|
||
|
p->Oem[7]);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Bytes per sector: %x"), bpb.BytesPerSector);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Sectors per cluster: %x"), bpb.SectorsPerCluster);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Reserved Sectors: %x"), bpb.ReservedSectors);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Number of fats: %x"), bpb.Fats);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Root entries: %x"), bpb.RootEntries);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Small sector count: %x"), bpb.Sectors);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Media byte: %x"), bpb.Media);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Sectors per fat: %x"), bpb.SectorsPerFat);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Sectors per track: %x"), bpb.SectorsPerTrack);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Number of heads: %x"), bpb.Heads);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Number of hidden sectors: %x"), bpb.HiddenSectors);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Large number of sectors: %x"), bpb.LargeSectors);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Physical drive: %x"), p->PhysicalDrive);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("NTFS number of sectors: %x"), p->NumberSectors.LowPart);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("MFT starting cluster: %x"), p->MftStartLcn.GetLowPart());
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("MFT mirror starting cluster: %x"),
|
||
|
p->Mft2StartLcn.GetLowPart());
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Clusters per file record: %x"),
|
||
|
p->ClustersPerFileRecordSegment);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Clusters per index block: %x"),
|
||
|
p->DefaultClustersPerIndexAllocationBuffer);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("SerialNumber: %08x%08x"), p->SerialNumber.HighPart,
|
||
|
p->SerialNumber.LowPart);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
|
||
|
swprintf(buf, TEXT("Checksum: %x"), p->Checksum);
|
||
|
TextOut(DeviceContext, 0, current, buf, wcslen(buf));
|
||
|
current += ch;
|
||
|
}
|