63 {
"journal", 0, 4096, 8192 },
64 {
"news", 0, 4096, 4096 },
65 {
"largefile", 0, 4096, 1024 * 1024 },
66 {
"largefile4", 0, 4096, 4096 * 1024 },
78 megs = (super->s_blocks_count * (
EXT2_BLOCK_SIZE(super) / 1024) / 1024);
101 super->s_log_frag_size = super->s_log_block_size =
126 static unsigned char *
buf;
140#define STRIDE_LENGTH 8
145 buf = (
unsigned char *)
149 DPRINT1(
"Mke2fs: while allocating zeroizing buffer");
192 buf = (
unsigned char *)
196 DPRINT1(
"Mke2fs: Out of memory erasing sectors %d-%d\n",
197 sect, sect + nsect - 1);
201#define BSD_DISKMAGIC (0x82564557UL)
202#define BSD_MAGICDISK (0x57455682UL)
203#define BSD_LABEL_OFFSET 64
290 memset(&parent_inode, 0,
sizeof(parent_inode));
301 inode.i_links_count = 2;
373 DPRINT1(
"Mke2fs: while creating root dir");
384 DPRINT1(
"Mke2fs: while setting root inode ownership");
396 char *
name =
"lost+found";
419 Ext2Sys->
umask = 077;
424 DPRINT1(
"Mke2fs: while creating /lost+found.\n");
435 if (lpf_size >= 16*1024)
442 DPRINT1(
"Mke2fs: create_lost_and_found: error alloc block.\n");
449 DPRINT1(
"Mke2fs: errors when expanding /lost+found.\n");
531 unsigned long fs_state;
539 fs_state =
fs->ext2_sb->s_state;
542 fs->ext2_sb->s_block_group_nr = 0;
544 super_shadow =
fs->ext2_sb;
545 group_shadow =
fs->group_desc;
560 if (
fs->ext2_sb->s_feature_incompat &
572 fs->ext2_sb->s_state &= ~EXT2_VALID_FS;
578 group_block =
fs->ext2_sb->s_first_data_block;
579 maxgroup =
fs->group_desc_count;
581 for (
i = 0;
i < maxgroup;
i++)
587 if (sgrp > ((1 << 16) - 1))
588 sgrp = (1 << 16) - 1;
590 fs->ext2_sb->s_block_group_nr = (
USHORT) sgrp;
605 group_ptr = (
char *) group_shadow;
607 for (
j=0;
j <
fs->desc_blocks;
j++)
613 fs->blocksize, (
PUCHAR) group_ptr));
620 group_ptr +=
fs->blocksize;
628 fs->ext2_sb->s_block_group_nr = 0;
648 fs->ext2_sb->s_state = (
USHORT) fs_state;
663 DPRINT1(
"Mke2fs: ext2_create_journal_dev: while initializing journal superblock.\n");
667 DPRINT(
"Mke2fs: Zeroing journal device: \n");
676 DPRINT1(
"Mke2fs: create_journal_dev: while zeroing journal device (block %lu, count %lu).\n",
684 fs->blocksize, (
unsigned char *)
buf));
688 DPRINT1(
"Mke2fs: create_journal_dev: while writing journal superblock.\n");
695#define BLOCK_BITS (Ext2Sys->ext2_sb->s_log_block_size + 10)
701 ULONG dwMeta[4] = {0, 0, 0, 0};
702 ULONG DataBlocks = 0;
712 for (
i = 0;
i < 4;
i++)
722 for(
i=1; (
i < 4) && (TotalBlocks > 0);
i++)
724 if (TotalBlocks >= (
dwData[
i] + dwMeta[
i]))
726 TotalBlocks -= (
dwData[
i] + dwMeta[
i]);
734 for (
j=
i; (
j > 0) && (TotalBlocks > 0);
j--)
736 dwDivide = (TotalBlocks - 1) / (
dwData[
j-1] + dwMeta[
j-1]);
737 dwRemain = (TotalBlocks - 1) % (
dwData[
j-1] + dwMeta[
j-1]);
739 DataBlocks += (dwDivide *
dwData[
j-1]);
740 TotalBlocks = dwRemain;
753 ULONG dwMeta[4] = {0, 0, 0, 0};
754 ULONG TotalBlocks = 0;
764 for (
i = 0;
i < 4;
i++)
774 for(
i=1; (
i < 4) && (DataBlocks > 0);
i++)
779 TotalBlocks += (
dwData[
i] + dwMeta[
i]);
786 for (
j=
i; (
j > 0) && (DataBlocks > 0);
j--)
788 dwDivide = (DataBlocks) / (
dwData[
j-1]);
789 dwRemain = (DataBlocks) % (
dwData[
j-1]);
791 TotalBlocks += (dwDivide * (
dwData[
j-1] + dwMeta[
j-1]) + 1);
792 DataBlocks = dwRemain;
841 DPRINT1(
"Mke2fs: Volume %wZ does not exist, ...\n", DriveRoot);
848 DPRINT1(
"Mke2fs: Can't get media information\n");
861 Ext2Sb.s_inodes_count =
867 Ext2Sb.s_r_blocks_count = (Ext2Sb.s_blocks_count * 5) / 100;
905 for (
i = 0,
val = 0 ;
i <
sizeof(Ext2Sb.s_uuid);
i++)
906 val += Ext2Sb.s_uuid[
i];
919 ansi_label.
Buffer = Ext2Sb.s_volume_name;
933 blocks = Ext2Sb.s_blocks_count;
936 DPRINT1(
"Mke2fs: zeroing volume boot record\n");
956 DPRINT1(
"Mke2fs: zeroing block %lu at end of filesystem", ret_blk);
969 DPRINT(
"Mke2fs: Writing superblocks and filesystem accounting information ... \n");
973 DPRINT1(
"Mke2fs: Slow format not supported yet\n");
978 DPRINT1(
"Mke2fs: Warning, had trouble writing out superblocks.\n");
982 DPRINT(
"Mke2fs: Writing superblocks and filesystem accounting information done!\n");
bool create_bad_block_inode(PEXT2_FILESYS Ext2Sys, PEXT2_BADBLK_LIST bb_list)
bool ext2_write_bitmaps(PEXT2_FILESYS fs)
void ext2_free_inode_bitmap(PEXT2_FILESYS Ext2Sys)
void ext2_free_block_bitmap(PEXT2_FILESYS Ext2Sys)
NTSTATUS Ext2GetMediaInfo(PEXT2_FILESYS Ext2Sys)
NTSTATUS Ext2OpenDevice(PEXT2_FILESYS Ext2Sys, PUNICODE_STRING DeviceName)
NTSTATUS Ext2DisMountVolume(PEXT2_FILESYS Ext2Sys)
NTSTATUS Ext2WriteDisk(PEXT2_FILESYS Ext2Sys, ULONGLONG Offset, ULONG Length, PVOID Buffer)
NTSTATUS Ext2UnLockVolume(PEXT2_FILESYS Ext2Sys)
NTSTATUS Ext2CloseDevice(PEXT2_FILESYS Ext2Sys)
void ext2_free_group_desc(PEXT2_FILESYS Ext2Sys)
bool ext2_bg_has_super(PEXT2_SUPER_BLOCK pExt2Sb, int group_block)
bool ext2_add_entry(PEXT2_FILESYS Ext2Sys, ULONG parent, ULONG inode, int filetype, char *name)
bool ext2_expand_inode(PEXT2_FILESYS Ext2Sys, PEXT2_INODE Inode, ULONG newBlk)
bool ext2_reserve_inodes(PEXT2_FILESYS fs)
bool ext2_load_inode(PEXT2_FILESYS Ext2Sys, ULONG no, PEXT2_INODE pInode)
bool ext2_new_inode(PEXT2_FILESYS fs, ULONG dir, int mode, PEXT2_INODE_BITMAP map, ULONG *ret)
bool ext2_save_inode(PEXT2_FILESYS Ext2Sys, ULONG no, PEXT2_INODE pInode)
void ext2_inode_alloc_stats2(PEXT2_FILESYS fs, ULONG ino, int inuse, int isdir)
void ext2_block_alloc_stats(PEXT2_FILESYS fs, ULONG blk, int inuse)
bool ext2_new_block(PEXT2_FILESYS fs, ULONG goal, PEXT2_BLOCK_BITMAP map, ULONG *ret)
bool ext2_write_block(PEXT2_FILESYS fs, ULONG block, void *inbuf)
bool ext2_new_dir_block(PEXT2_FILESYS fs, ULONG dir_ino, ULONG parent_ino, char **block)
bool ext2_alloc_block(PEXT2_FILESYS fs, ULONG goal, ULONG *ret)
bool ext2_allocate_tables(PEXT2_FILESYS Ext2Sys)
bool write_inode_tables(PEXT2_FILESYS fs)
bool create_journal_dev(PEXT2_FILESYS fs)
bool write_primary_superblock(PEXT2_FILESYS Ext2Sys, PEXT2_SUPER_BLOCK super)
bool zero_blocks(PEXT2_FILESYS fs, ULONG blk, ULONG num, ULONG *ret_blk, ULONG *ret_count)
void ext2_update_dynamic_rev(PEXT2_FILESYS fs)
bool create_root_dir(PEXT2_FILESYS fs)
static char default_str[]
BOOLEAN NTAPI Ext2Chkdsk(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)
bool ext2_mkdir(PEXT2_FILESYS fs, ULONG parent, ULONG inum, char *name, ULONG *no, PEXT2_INODE pid)
bool ext2_flush(PEXT2_FILESYS fs)
struct mke2fs_defaults settings[]
bool create_lost_and_found(PEXT2_FILESYS Ext2Sys)
int int_log10(unsigned int arg)
void set_fs_defaults(const char *fs_type, PEXT2_SUPER_BLOCK super, int blocksize, int *inode_ratio)
ULONG Ext2TotalBlocks(PEXT2_FILESYS Ext2Sys, ULONG DataBlocks)
bool zap_sector(PEXT2_FILESYS Ext2Sys, int sect, int nsect)
ULONG Ext2DataBlocks(PEXT2_FILESYS Ext2Sys, ULONG TotalBlocks)
BOOLEAN NTAPI Ext2Format(IN PUNICODE_STRING DriveRoot, IN PFMIFSCALLBACK Callback, IN BOOLEAN QuickFormat, IN BOOLEAN BackwardCompatible, IN MEDIA_TYPE MediaType, IN PUNICODE_STRING Label, IN ULONG ClusterSize)
void ext2_print_super(PEXT2_SUPER_BLOCK pExt2Sb)
void uuid_generate(__u8 *uuid)
bool ext2_initialize_sb(PEXT2_FILESYS pExt2Sys)
#define SUPERBLOCK_OFFSET
int strcmp(const char *String1, const char *String2)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define NT_SUCCESS(StatCode)
static WCHAR no[MAX_STRING_RESOURCE_LEN]
static void cleanup(void)
#define EXT2_GOOD_OLD_FIRST_INO
#define EXT2_BLOCKS_PER_GROUP(s)
#define EXT2_FEATURE_INCOMPAT_FILETYPE
#define EXT2_DFL_MAX_MNT_COUNT
#define EXT2_GOOD_OLD_REV
#define EXT2_MIN_BLOCK_LOG_SIZE
#define EXT2_BLOCK_SIZE(sb)
#define EXT2_GOOD_OLD_INODE_SIZE
struct ext2_dirent * PEXT2_DIR_ENTRY
NTSTATUS Ext2ReadDisk(IN PEXT2_VCB Vcb, IN ULONGLONG Offset, IN ULONG Size, IN PVOID Buffer, IN BOOLEAN bVerify)
NTSTATUS Ext2LockVolume(IN PEXT2_IRP_CONTEXT IrpContext)
#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV
BOOLEAN(NTAPI * PFMIFSCALLBACK)(IN CALLBACKCOMMAND Command, IN ULONG SubAction, IN PVOID ActionInfo)
GLuint GLuint GLsizei count
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
BOOLEAN NTAPI RtlTimeToSecondsSince1970(PLARGE_INTEGER Time, PULONG ElapsedSeconds)
#define memcpy(s1, s2, n)
static HANDLE ULONG_PTR dwData
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
#define UNREFERENCED_PARAMETER(P)
enum _MEDIA_TYPE MEDIA_TYPE
NTSTATUS NTAPI NtQuerySystemTime(OUT PLARGE_INTEGER SystemTime)
PEXT2_SUPER_BLOCK ext2_sb
PARTITION_INFORMATION PartInfo
#define RtlZeroMemory(Destination, Length)
#define STATUS_UNSUCCESSFUL
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
static unsigned int block