ReactOS 0.4.17-dev-1190-g4c812f4
ntfslib.h File Reference
#include <fmifs/fmifs.h>
Include dependency graph for ntfslib.h:

Go to the source code of this file.

Functions

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)
 
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)
 

Function Documentation

◆ NtfsChkdsk()

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 
)

Definition at line 495 of file ntfslib.c.

507{
508 // STUB
509
510 if (Callback)
511 {
513
514 TextOut.Lines = 1;
515 TextOut.Output = "stub, not implemented";
516
517 Callback(OUTPUT, 0, &TextOut);
518 }
519
521 return TRUE;
522}
_In_ ULONG _In_ ULONG _In_opt_ DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK Callback
Definition: dispmprt.h:620
#define TRUE
Definition: types.h:120
#define OUTPUT(ch)
_In_ NTSTATUS ExitStatus
Definition: psfuncs.h:913
#define STATUS_SUCCESS
Definition: shellext.h:65
uint32_t ULONG
Definition: typedefs.h:59
#define TextOut
Definition: wingdi.h:4929

◆ NtfsFormat()

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 
)

Definition at line 313 of file ntfslib.c.

321{
322 HANDLE DiskHandle;
325 GET_LENGTH_INFORMATION LengthInformation;
326 DISK_GEOMETRY DiskGeometry;
329
330 DPRINT1("NtfsFormat(DriveRoot '%wZ')\n", DriveRoot);
331
332 // We always perform a quick format (metadata only); the volume body is
333 // not zeroed.
335 UNREFERENCED_PARAMETER(BackwardCompatible);
336 UNREFERENCED_PARAMETER(MediaType);
337
339
340 // Open volume
341 Status = NtOpenFile(&DiskHandle,
343 &Attributes,
344 &Iosb,
347 if (!NT_SUCCESS(Status))
348 {
349 DPRINT1("NtOpenFile() failed with status 0x%.08x\n", Status);
350 return FALSE;
351 }
352
353 // Get length info
354 Status = NtDeviceIoControlFile(DiskHandle,
355 NULL,
356 NULL,
357 NULL,
358 &Iosb,
360 NULL,
361 0,
362 &LengthInformation,
363 sizeof(GET_LENGTH_INFORMATION));
364 if (!NT_SUCCESS(Status))
365 {
366 DPRINT1("IOCTL_DISK_GET_LENGTH_INFO failed with status 0x%.08x\n", Status);
367 NtClose(DiskHandle);
368 return FALSE;
369 }
370
371 // Get disk geometry
372 Status = NtDeviceIoControlFile(DiskHandle,
373 NULL,
374 NULL,
375 NULL,
376 &Iosb,
378 NULL,
379 0,
380 &DiskGeometry,
381 sizeof(DiskGeometry));
382 if (!NT_SUCCESS(Status))
383 {
384 DPRINT1("IOCTL_DISK_GET_DRIVE_GEOMETRY failed with status 0x%.08x\n", Status);
385 NtClose(DiskHandle);
386 return FALSE;
387 }
388
389 // Initialize progress bar
390 if (Callback)
391 {
392 ULONG pc = 0;
393 Callback(PROGRESS, 0, (PVOID)&pc);
394 }
395
396 // Setup global data
397 DISK_HANDLE = DiskHandle;
398 DISK_GEO = &DiskGeometry;
399 DISK_LEN = &LengthInformation;
400 LABEL = Label;
401
402
405 NTSTATUS PartStatus =
406 NtDeviceIoControlFile(DiskHandle, NULL, NULL, NULL, &Iosb,
408 NULL, 0,
409 &PartitionInfo, sizeof(PartitionInfo));
410 if (NT_SUCCESS(PartStatus) && DiskGeometry.BytesPerSector != 0)
411 {
413 (ULONG)(PartitionInfo.StartingOffset.QuadPart / DiskGeometry.BytesPerSector);
414 }
415 else
416 {
417 DPRINT1("IOCTL_DISK_GET_PARTITION_INFO_EX failed (0x%.08x); HiddenSectors=0\n", PartStatus);
418 }
419
420 // Capture a single timestamp used for every record, so a file's timestamps
421 // match the copies stored in its parent directory's index entries.
422 {
423 LARGE_INTEGER SystemTime;
424 KeQuerySystemTime(&SystemTime);
426 }
427
428 // Compute the on-disk layout (cluster size, metadata placement, serial)
430 if (!NT_SUCCESS(Status))
431 {
432 DPRINT1("ComputeLayout() failed with status 0x%.08x\n", Status);
433 goto end;
434 }
435
436 NtFsControlFile(DiskHandle, NULL, NULL, NULL, &Iosb, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0);
438
439 // Kill any stale boot sectors FIRST: the volume reads as RAW from here on,
440 // so no partially-formatted state is ever recognizable as a filesystem.
442 if (!NT_SUCCESS(Status))
443 {
444 DPRINT1("InvalidateStaleBootSectors() failed with status 0x%.08x\n", Status);
445 goto end;
446 }
447
448 // Create metafiles
450 if (!NT_SUCCESS(Status))
451 {
452 DPRINT1("WriteMetafiles() failed with status 0x%.08x\n", Status);
453 goto end;
454 }
455
456 // Write the boot sector LAST - only now, with all metadata complete behind
457 // it, does the volume become recognizable as NTFS.
459 if (!NT_SUCCESS(Status))
460 {
461 DPRINT1("WriteBootSector() failed with status 0x%.08x\n", Status);
462 goto end;
463 }
464
465 Result = TRUE;
466 DPRINT1("NtfsFormat() completed successfully\n");
467
468end:
469
470 // Dismount and unlock volume
472 NtFsControlFile(DiskHandle, NULL, NULL, NULL, &Iosb, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0);
473
474 // Close the volume handle
475 NtClose(DiskHandle);
476
477 // Clear global data structure
479 DISK_GEO = NULL;
480 DISK_LEN = NULL;
481 LABEL = NULL;
482
483 // Update progress bar
484 if (Callback)
485 {
487 Callback(DONE, 0, (PVOID)&success);
488 }
489
490 return Result;
491}
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
BOOL QuickFormat
Definition: format.c:65
PWCHAR Label
Definition: format.c:69
DWORD ClusterSize
Definition: format.c:66
NTSTATUS WriteBootSector(VOID)
Definition: bootsect.c:112
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
Definition: cdrw_usr.h:169
_In_ ULONG Attributes
Definition: dispmprt.h:1077
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define FILE_SHARE_READ
Definition: compat.h:136
return Iosb
Definition: create.c:4403
#define KeQuerySystemTime(t)
Definition: env_spec_w32.h:570
#define IOCTL_DISK_GET_PARTITION_INFO_EX
Definition: ntddk_ex.h:206
unsigned int BOOL
Definition: ntddk_ex.h:94
@ PROGRESS
Definition: fmifs.h:83
#define FILE_SYNCHRONOUS_IO_ALERT
Definition: from_kernel.h:30
Status
Definition: gdiplustypes.h:24
GLuint GLuint end
Definition: gl.h:1545
#define LABEL
Definition: ntfslib.h:64
#define DISK_LEN
Definition: ntfslib.h:63
#define DISK_HANDLE
Definition: ntfslib.h:61
#define IOCTL_DISK_GET_LENGTH_INFO
Definition: imports.h:192
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:115
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)
Definition: file.c:3951
#define SYNCHRONIZE
Definition: nt_native.h:61
#define FSCTL_LOCK_VOLUME
Definition: nt_native.h:832
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
Definition: nt_native.h:833
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3434
#define FSCTL_DISMOUNT_VOLUME
Definition: nt_native.h:834
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
Definition: nt_native.h:653
#define FILE_GENERIC_WRITE
Definition: nt_native.h:660
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
static NTSTATUS InvalidateStaleBootSectors(VOID)
Definition: ntfslib.c:265
NTSTATUS ComputeLayout(IN ULONG ClusterSize)
Definition: ntfslib.c:99
NTFS_FORMAT_DATA NtfsFormatData
Definition: ntfslib.c:20
#define DONE
Definition: rnr20lib.h:14
NTSTATUS WriteMetafiles(VOID)
Definition: files.c:872
ULONG BytesPerSector
Definition: ntdddisk.h:404
ULONG HiddenSectors
Definition: ntfslib.h:256
ULONGLONG FormatTime
Definition: ntfslib.h:255
uint64_t ULONGLONG
Definition: typedefs.h:67
LONGLONG QuadPart
Definition: typedefs.h:114
#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
Definition: wsk.h:409
_In_ ULONG _In_ struct _SET_PARTITION_INFORMATION_EX * PartitionInfo
Definition: iofuncs.h:2105