37 lpFileTime->dwLowDateTime = SystemTime.
LowPart;
38 lpFileTime->dwHighDateTime = SystemTime.
HighPart;
51 if (
Size <= (512ULL * 1024 * 1024))
53 else if (
Size <= (1024ULL * 1024 * 1024))
55 else if (
Size <= (2048ULL * 1024 * 1024))
60 if (ClusterBytes < Bps)
63 return (
BYTE)(ClusterBytes / Bps);
77 if (RecordBytes >= ClusterBytes)
79 return (
CHAR)(RecordBytes / ClusterBytes);
96#define CEIL_DIV(a, b) (((a) + (b) - 1) / (b))
111 VolumeBytes =
DISK_LEN->Length.QuadPart;
112 VolumeSectors = VolumeBytes / Bps;
115 if (VolumeSectors < 2)
130 LAYOUT.SectorsPerCluster = Spc;
131 LAYOUT.BytesPerCluster = Spc * Bps;
135 LAYOUT.TotalSectors = VolumeSectors - 1;
137 if (
LAYOUT.ClusterCount == 0)
153 if (MftBytes < (4ULL * 1024 * 1024))
154 MftBytes = 4ULL * 1024 * 1024;
155 if (MftBytes > (32ULL * 1024 * 1024))
156 MftBytes = 32ULL * 1024 * 1024;
168 if (LogBytes < (256ULL * 1024))
169 LogBytes = 256ULL * 1024;
170 if (LogBytes > (64ULL * 1024 * 1024))
171 LogBytes = 64ULL * 1024 * 1024;
182 BitmapBytes = (BitmapBytes + 7) & ~7ULL;
226 LAYOUT.MftBitmapLcn = Lcn; Lcn +=
LAYOUT.MftBitmapClusters;
234 LAYOUT.DeletedIdxLcn = Lcn; Lcn +=
LAYOUT.DeletedIdxClusters;
235 LAYOUT.FirstFreeLcn = Lcn;
240 DPRINT1(
"Volume too small for NTFS: need %I64u clusters, have %I64u\n",
330 DPRINT1(
"NtfsFormat(DriveRoot '%wZ')\n", DriveRoot);
349 DPRINT1(
"NtOpenFile() failed with status 0x%.08x\n",
Status);
366 DPRINT1(
"IOCTL_DISK_GET_LENGTH_INFO failed with status 0x%.08x\n",
Status);
381 sizeof(DiskGeometry));
384 DPRINT1(
"IOCTL_DISK_GET_DRIVE_GEOMETRY failed with status 0x%.08x\n",
Status);
417 DPRINT1(
"IOCTL_DISK_GET_PARTITION_INFO_EX failed (0x%.08x); HiddenSectors=0\n", PartStatus);
432 DPRINT1(
"ComputeLayout() failed with status 0x%.08x\n",
Status);
444 DPRINT1(
"InvalidateStaleBootSectors() failed with status 0x%.08x\n",
Status);
452 DPRINT1(
"WriteMetafiles() failed with status 0x%.08x\n",
Status);
461 DPRINT1(
"WriteBootSector() failed with status 0x%.08x\n",
Status);
466 DPRINT1(
"NtfsFormat() completed successfully\n");
515 TextOut.Output =
"stub, not implemented";
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
NTSTATUS WriteBootSector(VOID)
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
_In_ PIO_STATUS_BLOCK IoStatusBlock
_In_ ULONG _In_ ULONG _In_opt_ DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK Callback
#define NT_SUCCESS(StatCode)
#define KeQuerySystemTime(t)
#define IOCTL_DISK_GET_PARTITION_INFO_EX
BOOLEAN(NTAPI * PFMIFSCALLBACK)(IN CALLBACKCOMMAND Command, IN ULONG SubAction, IN PVOID ActionInfo)
#define FILE_SYNCHRONOUS_IO_ALERT
#define INDEX_RECORD_SIZE
#define IOCTL_DISK_GET_LENGTH_INFO
#define InitializeObjectAttributes(p, n, a, r, s)
NTSYSAPI ULONG NTAPI RtlRandom(_Inout_ PULONG Seed)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
#define FSCTL_LOCK_VOLUME
NTSYSAPI NTSTATUS NTAPI NtWriteFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID WriteBuffer, IN ULONG WriteBufferLength, IN PLARGE_INTEGER FileOffset OPTIONAL, IN PULONG LockOperationKey OPTIONAL)
NTSYSAPI NTSTATUS NTAPI NtDeviceIoControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
#define FSCTL_UNLOCK_VOLUME
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define FSCTL_DISMOUNT_VOLUME
NTSYSAPI NTSTATUS NTAPI NtFsControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
#define FILE_GENERIC_READ
#define FILE_GENERIC_WRITE
#define UNREFERENCED_PARAMETER(P)
enum _MEDIA_TYPE MEDIA_TYPE
_In_ ULONG _In_ ULONG Offset
BOOLEAN NTAPI NtfsChkdsk(IN PUNICODE_STRING DriveRoot, IN PFMIFSCALLBACK Callback, IN BOOLEAN FixErrors, IN BOOLEAN Verbose, IN BOOLEAN CheckOnlyIfDirty, IN BOOLEAN ScanDrive, IN PVOID pUnknown1, IN PVOID pUnknown2, IN PVOID pUnknown3, IN PVOID pUnknown4, IN PULONG ExitStatus)
BYTE GetSectorsPerCluster(VOID)
static NTSTATUS InvalidateStaleBootSectors(VOID)
VOID NtfsGetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
static CHAR EncodeRecordSize(IN ULONG RecordBytes, IN ULONG ClusterBytes)
BOOLEAN NTAPI NtfsFormat(IN PUNICODE_STRING DriveRoot, IN PFMIFSCALLBACK Callback, IN BOOLEAN QuickFormat, IN BOOLEAN BackwardCompatible, IN MEDIA_TYPE MediaType, IN PUNICODE_STRING Label, IN ULONG ClusterSize)
NTSTATUS ComputeLayout(IN ULONG ClusterSize)
NTFS_FORMAT_DATA NtfsFormatData
BYTE Seed[SYMCRYPT_HASH_MAX_RESULT_SIZE]
NTSTATUS WriteMetafiles(VOID)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
#define success(from, fromstr, to, tostr)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_In_ ULONG _In_ struct _SET_PARTITION_INFORMATION_EX * PartitionInfo