mirror of
https://github.com/reactos/reactos.git
synced 2024-08-13 06:37:06 +00:00
Fix ext2lib compilation
svn path=/trunk/; revision=32285
This commit is contained in:
parent
a3445ec1e4
commit
3b8ed580d8
|
@ -1,6 +1,9 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
|
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
|
||||||
<group xmlns:xi="http://www.w3.org/2001/XInclude">
|
<group xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||||
|
<directory name="ext2lib">
|
||||||
|
<xi:include href="ext2lib/ext2lib.rbuild" />
|
||||||
|
</directory>
|
||||||
<directory name="vfatlib">
|
<directory name="vfatlib">
|
||||||
<xi:include href="vfatlib/vfatlib.rbuild" />
|
<xi:include href="vfatlib/vfatlib.rbuild" />
|
||||||
</directory>
|
</directory>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
/* INCLUDES **************************************************************/
|
/* INCLUDES **************************************************************/
|
||||||
|
|
||||||
#include "Mke2fs.h"
|
#include "Mke2fs.h"
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
/* DEFINITIONS ***********************************************************/
|
/* DEFINITIONS ***********************************************************/
|
||||||
|
|
||||||
|
@ -102,11 +103,11 @@ bool ext2_allocate_block_bitmap(PEXT2_FILESYS Ext2Sys)
|
||||||
|
|
||||||
PEXT2_SUPER_BLOCK pExt2Sb = Ext2Sys->ext2_sb;
|
PEXT2_SUPER_BLOCK pExt2Sb = Ext2Sys->ext2_sb;
|
||||||
Ext2Sys->block_map = (PEXT2_BLOCK_BITMAP)
|
Ext2Sys->block_map = (PEXT2_BLOCK_BITMAP)
|
||||||
RtlAllocateHeap(GetProcessHeap(), 0, sizeof(EXT2_BLOCK_BITMAP));
|
RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(EXT2_BLOCK_BITMAP));
|
||||||
|
|
||||||
if (!Ext2Sys->block_map)
|
if (!Ext2Sys->block_map)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: error allocating block bitmap...\n"));
|
DPRINT1("Mke2fs: error allocating block bitmap...\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,13 +121,13 @@ bool ext2_allocate_block_bitmap(PEXT2_FILESYS Ext2Sys)
|
||||||
size = (((Ext2Sys->block_map->real_end - Ext2Sys->block_map->start) / 8) + 1);
|
size = (((Ext2Sys->block_map->real_end - Ext2Sys->block_map->start) / 8) + 1);
|
||||||
|
|
||||||
Ext2Sys->block_map->bitmap =
|
Ext2Sys->block_map->bitmap =
|
||||||
(char *)RtlAllocateHeap(GetProcessHeap(), 0, size);
|
(char *)RtlAllocateHeap(RtlGetProcessHeap(), 0, size);
|
||||||
|
|
||||||
if (!Ext2Sys->block_map->bitmap)
|
if (!Ext2Sys->block_map->bitmap)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, Ext2Sys->block_map);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, Ext2Sys->block_map);
|
||||||
Ext2Sys->block_map = NULL;
|
Ext2Sys->block_map = NULL;
|
||||||
KdPrint(("Mke2fs: error allocating block bitmap...\n"));
|
DPRINT1("Mke2fs: error allocating block bitmap...\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,11 +144,11 @@ bool ext2_allocate_inode_bitmap(PEXT2_FILESYS Ext2Sys)
|
||||||
PEXT2_SUPER_BLOCK pExt2Sb = Ext2Sys->ext2_sb;
|
PEXT2_SUPER_BLOCK pExt2Sb = Ext2Sys->ext2_sb;
|
||||||
|
|
||||||
Ext2Sys->inode_map = (PEXT2_INODE_BITMAP)
|
Ext2Sys->inode_map = (PEXT2_INODE_BITMAP)
|
||||||
RtlAllocateHeap(GetProcessHeap(), 0, sizeof(EXT2_INODE_BITMAP));
|
RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(EXT2_INODE_BITMAP));
|
||||||
|
|
||||||
if (!Ext2Sys->inode_map)
|
if (!Ext2Sys->inode_map)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: error allocating inode bitmap...\n"));
|
DPRINT1("Mke2fs: error allocating inode bitmap...\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,13 +162,13 @@ bool ext2_allocate_inode_bitmap(PEXT2_FILESYS Ext2Sys)
|
||||||
size = (((Ext2Sys->inode_map->real_end - Ext2Sys->inode_map->start) / 8) + 1);
|
size = (((Ext2Sys->inode_map->real_end - Ext2Sys->inode_map->start) / 8) + 1);
|
||||||
|
|
||||||
Ext2Sys->inode_map->bitmap =
|
Ext2Sys->inode_map->bitmap =
|
||||||
(char *)RtlAllocateHeap(GetProcessHeap(), 0, size);
|
(char *)RtlAllocateHeap(RtlGetProcessHeap(), 0, size);
|
||||||
|
|
||||||
if (!Ext2Sys->inode_map->bitmap)
|
if (!Ext2Sys->inode_map->bitmap)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, Ext2Sys->inode_map);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, Ext2Sys->inode_map);
|
||||||
Ext2Sys->inode_map = NULL;
|
Ext2Sys->inode_map = NULL;
|
||||||
KdPrint(("Mke2fs: error allocating block bitmap...\n"));
|
DPRINT1("Mke2fs: error allocating block bitmap...\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,11 +184,11 @@ void ext2_free_generic_bitmap(PEXT2_GENERIC_BITMAP bitmap)
|
||||||
|
|
||||||
if (bitmap->bitmap)
|
if (bitmap->bitmap)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, bitmap->bitmap);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, bitmap->bitmap);
|
||||||
bitmap->bitmap = 0;
|
bitmap->bitmap = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, bitmap);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ext2_free_inode_bitmap(PEXT2_FILESYS Ext2Sys)
|
void ext2_free_inode_bitmap(PEXT2_FILESYS Ext2Sys)
|
||||||
|
@ -226,7 +227,7 @@ bool ext2_write_inode_bitmap(PEXT2_FILESYS fs)
|
||||||
|
|
||||||
nbytes = (size_t) ((EXT2_INODES_PER_GROUP(fs->ext2_sb)+7) / 8);
|
nbytes = (size_t) ((EXT2_INODES_PER_GROUP(fs->ext2_sb)+7) / 8);
|
||||||
|
|
||||||
bitmap_block = (char *)RtlAllocateHeap(GetProcessHeap(), 0, fs->blocksize);
|
bitmap_block = (char *)RtlAllocateHeap(RtlGetProcessHeap(), 0, fs->blocksize);
|
||||||
if (!bitmap_block) return false;
|
if (!bitmap_block) return false;
|
||||||
|
|
||||||
memset(bitmap_block, 0xff, fs->blocksize);
|
memset(bitmap_block, 0xff, fs->blocksize);
|
||||||
|
@ -253,7 +254,7 @@ bool ext2_write_inode_bitmap(PEXT2_FILESYS fs)
|
||||||
|
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, bitmap_block);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, bitmap_block);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -261,7 +262,7 @@ bool ext2_write_inode_bitmap(PEXT2_FILESYS fs)
|
||||||
inode_bitmap += nbytes;
|
inode_bitmap += nbytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, bitmap_block);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, bitmap_block);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -282,7 +283,7 @@ bool ext2_write_block_bitmap (PEXT2_FILESYS fs)
|
||||||
|
|
||||||
nbytes = EXT2_BLOCKS_PER_GROUP(fs->ext2_sb) / 8;
|
nbytes = EXT2_BLOCKS_PER_GROUP(fs->ext2_sb) / 8;
|
||||||
|
|
||||||
bitmap_block = (char *)RtlAllocateHeap(GetProcessHeap(), 0, fs->blocksize);
|
bitmap_block = (char *)RtlAllocateHeap(RtlGetProcessHeap(), 0, fs->blocksize);
|
||||||
if (!bitmap_block)
|
if (!bitmap_block)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -325,7 +326,7 @@ bool ext2_write_block_bitmap (PEXT2_FILESYS fs)
|
||||||
|
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, bitmap_block);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, bitmap_block);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -333,7 +334,7 @@ bool ext2_write_block_bitmap (PEXT2_FILESYS fs)
|
||||||
block_bitmap += nbytes;
|
block_bitmap += nbytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, bitmap_block);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, bitmap_block);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -465,13 +466,13 @@ cleanup:
|
||||||
|
|
||||||
if (do_block)
|
if (do_block)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, fs->block_map);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, fs->block_map);
|
||||||
fs->block_map = NULL;
|
fs->block_map = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (do_inode)
|
if (do_inode)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, fs->inode_map);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, fs->inode_map);
|
||||||
fs->inode_map = 0;
|
fs->inode_map = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
/* INCLUDES **************************************************************/
|
/* INCLUDES **************************************************************/
|
||||||
|
|
||||||
#include "Mke2fs.h"
|
#include "Mke2fs.h"
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
/* DEFINITIONS ***********************************************************/
|
/* DEFINITIONS ***********************************************************/
|
||||||
|
|
||||||
|
@ -15,7 +16,7 @@
|
||||||
|
|
||||||
/* FUNCTIONS *************************************************************/
|
/* FUNCTIONS *************************************************************/
|
||||||
|
|
||||||
PUCHAR
|
PCCHAR
|
||||||
Ext2StatusToString ( IN NTSTATUS Status )
|
Ext2StatusToString ( IN NTSTATUS Status )
|
||||||
{
|
{
|
||||||
switch (Status)
|
switch (Status)
|
||||||
|
@ -1001,7 +1002,7 @@ Ext2ReadDisk( PEXT2_FILESYS Ext2Sys,
|
||||||
AlignedLength += ((ULONG)(Offset - Address.QuadPart) + SECTOR_SIZE - 1)
|
AlignedLength += ((ULONG)(Offset - Address.QuadPart) + SECTOR_SIZE - 1)
|
||||||
& (~(SECTOR_SIZE - 1));
|
& (~(SECTOR_SIZE - 1));
|
||||||
|
|
||||||
NonPagedBuffer = RtlAllocateHeap(GetProcessHeap(), 0, AlignedLength);
|
NonPagedBuffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, AlignedLength);
|
||||||
if (!NonPagedBuffer)
|
if (!NonPagedBuffer)
|
||||||
{
|
{
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
@ -1031,7 +1032,7 @@ Ext2ReadDisk( PEXT2_FILESYS Ext2Sys,
|
||||||
errorout:
|
errorout:
|
||||||
|
|
||||||
if (NonPagedBuffer)
|
if (NonPagedBuffer)
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, NonPagedBuffer);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, NonPagedBuffer);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
@ -1096,7 +1097,7 @@ Ext2WriteDisk( PEXT2_FILESYS Ext2Sys,
|
||||||
AlignedLength += ((ULONG)(Offset - Address.QuadPart) + SECTOR_SIZE - 1)
|
AlignedLength += ((ULONG)(Offset - Address.QuadPart) + SECTOR_SIZE - 1)
|
||||||
& (~(SECTOR_SIZE - 1));
|
& (~(SECTOR_SIZE - 1));
|
||||||
|
|
||||||
NonPagedBuffer = RtlAllocateHeap(GetProcessHeap(), 0, AlignedLength);
|
NonPagedBuffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, AlignedLength);
|
||||||
if (!NonPagedBuffer)
|
if (!NonPagedBuffer)
|
||||||
{
|
{
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
@ -1138,7 +1139,7 @@ Ext2WriteDisk( PEXT2_FILESYS Ext2Sys,
|
||||||
errorout:
|
errorout:
|
||||||
|
|
||||||
if (NonPagedBuffer)
|
if (NonPagedBuffer)
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, NonPagedBuffer);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, NonPagedBuffer);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
@ -1221,8 +1222,8 @@ Ext2LockVolume( PEXT2_FILESYS Ext2Sys )
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Error when locking volume: Status = %lxh %s...\n",
|
DPRINT1("Mke2fs: Error when locking volume: Status = %lxh %s...\n",
|
||||||
Status, Ext2StatusToString(Status)));
|
Status, Ext2StatusToString(Status));
|
||||||
|
|
||||||
goto errorout;
|
goto errorout;
|
||||||
}
|
}
|
||||||
|
@ -1246,7 +1247,7 @@ Ext2UnLockVolume( PEXT2_FILESYS Ext2Sys )
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Error when unlocking volume ...\n"));
|
DPRINT1("Mke2fs: Error when unlocking volume ...\n");
|
||||||
goto errorout;
|
goto errorout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1269,7 +1270,7 @@ Ext2DisMountVolume( PEXT2_FILESYS Ext2Sys )
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Error when dismounting volume ...\n"));
|
DPRINT1("Mke2fs: Error when dismounting volume ...\n");
|
||||||
goto errorout;
|
goto errorout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1318,7 +1319,7 @@ Ext2OpenDevice( PEXT2_FILESYS Ext2Sys,
|
||||||
//
|
//
|
||||||
if( !NT_SUCCESS(Status) )
|
if( !NT_SUCCESS(Status) )
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Create system service failed status = 0x%lx\n", Status));
|
DPRINT1("Mke2fs: Create system service failed status = 0x%lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1328,7 +1329,7 @@ Ext2OpenDevice( PEXT2_FILESYS Ext2Sys,
|
||||||
//
|
//
|
||||||
if(!NT_SUCCESS(Iosb.Status) )
|
if(!NT_SUCCESS(Iosb.Status) )
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Create failed with status = 0x%lx\n",Iosb.Status));
|
DPRINT1("Mke2fs: Create failed with status = 0x%lx\n",Iosb.Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ bool ext2_allocate_group_desc(PEXT2_FILESYS Ext2Sys)
|
||||||
size = Ext2Sys->desc_blocks * Ext2Sys->blocksize;
|
size = Ext2Sys->desc_blocks * Ext2Sys->blocksize;
|
||||||
|
|
||||||
Ext2Sys->group_desc =
|
Ext2Sys->group_desc =
|
||||||
(PEXT2_GROUP_DESC)RtlAllocateHeap(GetProcessHeap(), 0, size);
|
(PEXT2_GROUP_DESC)RtlAllocateHeap(RtlGetProcessHeap(), 0, size);
|
||||||
|
|
||||||
if (Ext2Sys->group_desc)
|
if (Ext2Sys->group_desc)
|
||||||
{
|
{
|
||||||
|
@ -62,7 +62,7 @@ void ext2_free_group_desc(PEXT2_FILESYS Ext2Sys)
|
||||||
{
|
{
|
||||||
if (Ext2Sys->group_desc)
|
if (Ext2Sys->group_desc)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, Ext2Sys->group_desc);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, Ext2Sys->group_desc);
|
||||||
Ext2Sys->group_desc = NULL;
|
Ext2Sys->group_desc = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
/* INCLUDES **************************************************************/
|
/* INCLUDES **************************************************************/
|
||||||
|
|
||||||
#include "Mke2fs.h"
|
#include "Mke2fs.h"
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
/* DEFINITIONS ***********************************************************/
|
/* DEFINITIONS ***********************************************************/
|
||||||
|
|
||||||
|
@ -23,8 +24,8 @@ bool ext2_get_inode_lba(PEXT2_FILESYS Ext2Sys, ULONG no, LONGLONG *offset)
|
||||||
|
|
||||||
if (no < 1 || no > pExt2Sb->s_inodes_count)
|
if (no < 1 || no > pExt2Sb->s_inodes_count)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Inode value %lu was out of range in load_inode.(1-%ld)\n",
|
DPRINT1("Mke2fs: Inode value %lu was out of range in load_inode.(1-%ld)\n",
|
||||||
no, pExt2Sb->s_inodes_count));
|
no, pExt2Sb->s_inodes_count);
|
||||||
*offset = 0;
|
*offset = 0;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -138,7 +139,7 @@ bool ext2_expand_block( PEXT2_FILESYS Ext2Sys, PEXT2_INODE Inode,
|
||||||
|
|
||||||
PEXT2_SUPER_BLOCK pExt2Sb = Ext2Sys->ext2_sb;
|
PEXT2_SUPER_BLOCK pExt2Sb = Ext2Sys->ext2_sb;
|
||||||
|
|
||||||
pData = (ULONG *)RtlAllocateHeap(GetProcessHeap(), 0, Ext2Sys->blocksize);
|
pData = (ULONG *)RtlAllocateHeap(RtlGetProcessHeap(), 0, Ext2Sys->blocksize);
|
||||||
|
|
||||||
if (!pData)
|
if (!pData)
|
||||||
{
|
{
|
||||||
|
@ -186,7 +187,7 @@ bool ext2_expand_block( PEXT2_FILESYS Ext2Sys, PEXT2_INODE Inode,
|
||||||
if (!ext2_expand_block(Ext2Sys, Inode, dwBlk, j, layer - 1, bDirty, &dwNewBlk, &Offset))
|
if (!ext2_expand_block(Ext2Sys, Inode, dwBlk, j, layer - 1, bDirty, &dwNewBlk, &Offset))
|
||||||
{
|
{
|
||||||
bRet = false;
|
bRet = false;
|
||||||
KdPrint(("Mke2fs: ext2_expand_block: ... error recuise...\n"));
|
DPRINT1("Mke2fs: ext2_expand_block: ... error recuise...\n");
|
||||||
goto errorout;
|
goto errorout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -200,7 +201,7 @@ bool ext2_expand_block( PEXT2_FILESYS Ext2Sys, PEXT2_INODE Inode,
|
||||||
errorout:
|
errorout:
|
||||||
|
|
||||||
if (pData)
|
if (pData)
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, pData);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, pData);
|
||||||
|
|
||||||
if (bRet && dwRet)
|
if (bRet && dwRet)
|
||||||
*dwRet = dwNewBlk;
|
*dwRet = dwNewBlk;
|
||||||
|
@ -233,7 +234,7 @@ bool ext2_expand_inode( PEXT2_FILESYS Ext2Sys,
|
||||||
|
|
||||||
if (Index >= dwTotal)
|
if (Index >= dwTotal)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: ext2_expand_inode: beyond the maxinum size of an inode.\n"));
|
DPRINT1("Mke2fs: ext2_expand_inode: beyond the maxinum size of an inode.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +301,7 @@ bool ext2_get_block(PEXT2_FILESYS Ext2Sys, ULONG dwContent, ULONG Index, int lay
|
||||||
Offset = (LONGLONG) dwContent;
|
Offset = (LONGLONG) dwContent;
|
||||||
Offset = Offset * Ext2Sys->blocksize;
|
Offset = Offset * Ext2Sys->blocksize;
|
||||||
|
|
||||||
pData = (ULONG *)RtlAllocateHeap(GetProcessHeap(), 0, Ext2Sys->blocksize);
|
pData = (ULONG *)RtlAllocateHeap(RtlGetProcessHeap(), 0, Ext2Sys->blocksize);
|
||||||
|
|
||||||
if (!pData)
|
if (!pData)
|
||||||
{
|
{
|
||||||
|
@ -329,7 +330,7 @@ bool ext2_get_block(PEXT2_FILESYS Ext2Sys, ULONG dwContent, ULONG Index, int lay
|
||||||
if (!ext2_get_block(Ext2Sys, pData[i], j, layer - 1, &dwBlk))
|
if (!ext2_get_block(Ext2Sys, pData[i], j, layer - 1, &dwBlk))
|
||||||
{
|
{
|
||||||
bRet = false;
|
bRet = false;
|
||||||
KdPrint(("Mke2fs: ext2_get_block: ... error recuise...\n"));
|
DPRINT1("Mke2fs: ext2_get_block: ... error recuise...\n");
|
||||||
goto errorout;
|
goto errorout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -337,7 +338,7 @@ bool ext2_get_block(PEXT2_FILESYS Ext2Sys, ULONG dwContent, ULONG Index, int lay
|
||||||
errorout:
|
errorout:
|
||||||
|
|
||||||
if (pData)
|
if (pData)
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, pData);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, pData);
|
||||||
|
|
||||||
if (bRet && dwRet)
|
if (bRet && dwRet)
|
||||||
*dwRet = dwBlk;
|
*dwRet = dwBlk;
|
||||||
|
@ -363,7 +364,7 @@ bool ext2_block_map(PEXT2_FILESYS Ext2Sys, PEXT2_INODE inode, ULONG block, ULONG
|
||||||
|
|
||||||
if (Index >= inode->i_blocks / (Ext2Sys->blocksize / SECTOR_SIZE))
|
if (Index >= inode->i_blocks / (Ext2Sys->blocksize / SECTOR_SIZE))
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: ext2_block_map: beyond the size of the inode.\n"));
|
DPRINT1("Mke2fs: ext2_block_map: beyond the size of the inode.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -409,7 +410,7 @@ ULONG ext2_build_bdl(PEXT2_FILESYS Ext2Sys,
|
||||||
|
|
||||||
if (offset >= ext2_inode->i_size)
|
if (offset >= ext2_inode->i_size)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: ext2_build_bdl: beyond the file range.\n"));
|
DPRINT1("Mke2fs: ext2_build_bdl: beyond the file range.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -428,7 +429,7 @@ ULONG ext2_build_bdl(PEXT2_FILESYS Ext2Sys,
|
||||||
if (nBlocks > 0)
|
if (nBlocks > 0)
|
||||||
{
|
{
|
||||||
ext2bdl = (PEXT2_BDL)
|
ext2bdl = (PEXT2_BDL)
|
||||||
RtlAllocateHeap(GetProcessHeap(), 0, sizeof(EXT2_BDL) * nBlocks);
|
RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(EXT2_BDL) * nBlocks);
|
||||||
|
|
||||||
if (ext2bdl)
|
if (ext2bdl)
|
||||||
{
|
{
|
||||||
|
@ -486,7 +487,7 @@ ULONG ext2_build_bdl(PEXT2_FILESYS Ext2Sys,
|
||||||
fail:
|
fail:
|
||||||
|
|
||||||
if (ext2bdl)
|
if (ext2bdl)
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, ext2bdl);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, ext2bdl);
|
||||||
|
|
||||||
// Error
|
// Error
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -534,7 +535,7 @@ bool ext2_read_inode(PEXT2_FILESYS Ext2Sys,
|
||||||
*dwReturn = dwTotal;
|
*dwReturn = dwTotal;
|
||||||
|
|
||||||
if (ext2_bdl)
|
if (ext2_bdl)
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, ext2_bdl);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, ext2_bdl);
|
||||||
|
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
@ -612,7 +613,7 @@ bool ext2_write_inode (PEXT2_FILESYS Ext2Sys,
|
||||||
errorout:
|
errorout:
|
||||||
|
|
||||||
if (ext2_bdl)
|
if (ext2_bdl)
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, ext2_bdl);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, ext2_bdl);
|
||||||
|
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
@ -636,7 +637,7 @@ ext2_add_entry( PEXT2_FILESYS Ext2Sys,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf = (char *)RtlAllocateHeap(GetProcessHeap(), 0, parent_inode.i_size);
|
buf = (char *)RtlAllocateHeap(RtlGetProcessHeap(), 0, parent_inode.i_size);
|
||||||
|
|
||||||
if (!ext2_read_inode(Ext2Sys, parent, 0, buf, parent_inode.i_size, &dwRet))
|
if (!ext2_read_inode(Ext2Sys, parent, 0, buf, parent_inode.i_size, &dwRet))
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
/* INCLUDES **************************************************************/
|
/* INCLUDES **************************************************************/
|
||||||
|
|
||||||
#include "Mke2fs.h"
|
#include "Mke2fs.h"
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
/* DEFINITIONS ***********************************************************/
|
/* DEFINITIONS ***********************************************************/
|
||||||
|
|
||||||
|
@ -232,9 +233,9 @@ bool write_inode_tables(PEXT2_FILESYS fs)
|
||||||
retval = zero_blocks(fs, blk, num, &blk, &num);
|
retval = zero_blocks(fs, blk, num, &blk, &num);
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
KdPrint(("\nMke2fs: Could not write %lu blocks "
|
DPRINT1("\nMke2fs: Could not write %lu blocks "
|
||||||
"in inode table starting at %lu.\n",
|
"in inode table starting at %lu.\n",
|
||||||
num, blk));
|
num, blk);
|
||||||
|
|
||||||
zero_blocks(0, 0, 0, 0, 0);
|
zero_blocks(0, 0, 0, 0, 0);
|
||||||
return false;
|
return false;
|
||||||
|
@ -296,7 +297,7 @@ bool ext2_alloc_block(PEXT2_FILESYS fs, ULONG goal, ULONG *ret)
|
||||||
ULONG block;
|
ULONG block;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
|
|
||||||
buf = (char *)RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, fs->blocksize);
|
buf = (char *)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, fs->blocksize);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -327,7 +328,7 @@ bool ext2_alloc_block(PEXT2_FILESYS fs, ULONG goal, ULONG *ret)
|
||||||
|
|
||||||
if (buf)
|
if (buf)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, buf);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -336,7 +337,7 @@ fail:
|
||||||
|
|
||||||
if (buf)
|
if (buf)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, buf);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -354,7 +355,7 @@ bool ext2_new_dir_block(PEXT2_FILESYS fs, ULONG dir_ino,
|
||||||
int rec_len;
|
int rec_len;
|
||||||
int filetype = 0;
|
int filetype = 0;
|
||||||
|
|
||||||
buf = (char *)RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, fs->blocksize);
|
buf = (char *)RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, fs->blocksize);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
/* INCLUDES **************************************************************/
|
/* INCLUDES **************************************************************/
|
||||||
|
|
||||||
#include "Mke2fs.h"
|
#include "Mke2fs.h"
|
||||||
#include <fmifs.h>
|
#include <debug.h>
|
||||||
|
|
||||||
/* GLOBALS ***************************************************************/
|
/* GLOBALS ***************************************************************/
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ bool zero_blocks(PEXT2_FILESYS fs, ULONG blk, ULONG num,
|
||||||
{
|
{
|
||||||
if (buf)
|
if (buf)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, buf);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, buf);
|
||||||
buf = 0;
|
buf = 0;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -138,10 +138,10 @@ bool zero_blocks(PEXT2_FILESYS fs, ULONG blk, ULONG num,
|
||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
buf = (unsigned char *)
|
buf = (unsigned char *)
|
||||||
RtlAllocateHeap(GetProcessHeap(), 0, fs->blocksize * STRIDE_LENGTH);
|
RtlAllocateHeap(RtlGetProcessHeap(), 0, fs->blocksize * STRIDE_LENGTH);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: while allocating zeroizing buffer"));
|
DPRINT1("Mke2fs: while allocating zeroizing buffer");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
memset(buf, 0, fs->blocksize * STRIDE_LENGTH);
|
memset(buf, 0, fs->blocksize * STRIDE_LENGTH);
|
||||||
|
@ -188,11 +188,11 @@ bool zap_sector(PEXT2_FILESYS Ext2Sys, int sect, int nsect)
|
||||||
ULONG *magic;
|
ULONG *magic;
|
||||||
|
|
||||||
buf = (unsigned char *)
|
buf = (unsigned char *)
|
||||||
RtlAllocateHeap(GetProcessHeap(), 0, SECTOR_SIZE*nsect);
|
RtlAllocateHeap(RtlGetProcessHeap(), 0, SECTOR_SIZE*nsect);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Out of memory erasing sectors %d-%d\n",
|
DPRINT1("Mke2fs: Out of memory erasing sectors %d-%d\n",
|
||||||
sect, sect + nsect - 1));
|
sect, sect + nsect - 1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ bool zap_sector(PEXT2_FILESYS Ext2Sys, int sect, int nsect)
|
||||||
|
|
||||||
clean_up:
|
clean_up:
|
||||||
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, buf);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, buf);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -352,7 +352,7 @@ cleanup:
|
||||||
|
|
||||||
if (block)
|
if (block)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, block);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, block);
|
||||||
block = NULL;
|
block = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ bool create_root_dir(PEXT2_FILESYS fs)
|
||||||
|
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: while creating root dir"));
|
DPRINT1("Mke2fs: while creating root dir");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,7 +379,7 @@ bool create_root_dir(PEXT2_FILESYS fs)
|
||||||
retval = ext2_save_inode(fs, EXT2_ROOT_INO, &inode);
|
retval = ext2_save_inode(fs, EXT2_ROOT_INO, &inode);
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: while setting root inode ownership"));
|
DPRINT1("Mke2fs: while setting root inode ownership");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -401,7 +401,7 @@ bool create_lost_and_found(PEXT2_FILESYS Ext2Sys)
|
||||||
|
|
||||||
char * buf;
|
char * buf;
|
||||||
|
|
||||||
buf = (char *)RtlAllocateHeap(GetProcessHeap(), 0, Ext2Sys->blocksize);
|
buf = (char *)RtlAllocateHeap(RtlGetProcessHeap(), 0, Ext2Sys->blocksize);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
bExt = FALSE;
|
bExt = FALSE;
|
||||||
|
@ -419,7 +419,7 @@ bool create_lost_and_found(PEXT2_FILESYS Ext2Sys)
|
||||||
|
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: while creating /lost+found.\n"));
|
DPRINT1("Mke2fs: while creating /lost+found.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,14 +437,14 @@ bool create_lost_and_found(PEXT2_FILESYS Ext2Sys)
|
||||||
|
|
||||||
if (! retval)
|
if (! retval)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: create_lost_and_found: error alloc block.\n"));
|
DPRINT1("Mke2fs: create_lost_and_found: error alloc block.\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = ext2_expand_inode(Ext2Sys, &inode, dwBlk);
|
retval = ext2_expand_inode(Ext2Sys, &inode, dwBlk);
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: errors when expanding /lost+found.\n"));
|
DPRINT1("Mke2fs: errors when expanding /lost+found.\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,7 +471,7 @@ errorout:
|
||||||
|
|
||||||
if (buf)
|
if (buf)
|
||||||
{
|
{
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, buf);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -658,11 +658,11 @@ bool create_journal_dev(PEXT2_FILESYS fs)
|
||||||
|
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: ext2_create_journal_dev: while initializing journal superblock.\n"));
|
DPRINT1("Mke2fs: ext2_create_journal_dev: while initializing journal superblock.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
KdPrint(("Mke2fs: Zeroing journal device: \n"));
|
DPRINT("Mke2fs: Zeroing journal device: \n");
|
||||||
|
|
||||||
retval = zero_blocks(fs, 0, fs->ext2_sb->s_blocks_count,
|
retval = zero_blocks(fs, 0, fs->ext2_sb->s_blocks_count,
|
||||||
&blk, &count);
|
&blk, &count);
|
||||||
|
@ -671,8 +671,8 @@ bool create_journal_dev(PEXT2_FILESYS fs)
|
||||||
|
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: create_journal_dev: while zeroing journal device (block %lu, count %lu).\n",
|
DPRINT1("Mke2fs: create_journal_dev: while zeroing journal device (block %lu, count %lu).\n",
|
||||||
blk, count));
|
blk, count);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -683,7 +683,7 @@ bool create_journal_dev(PEXT2_FILESYS fs)
|
||||||
|
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: create_journal_dev: while writing journal superblock.\n"));
|
DPRINT1("Mke2fs: create_journal_dev: while writing journal superblock.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -812,29 +812,29 @@ Ext2Format(PUNICODE_STRING DriveRoot,
|
||||||
EXT2_FILESYS FileSys;
|
EXT2_FILESYS FileSys;
|
||||||
ULONG Percent;
|
ULONG Percent;
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
Callback(PROGRESS, 0, (PVOID)&Percent);
|
Callback(PROGRESS, 0, (PVOID)&Percent);
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
RtlZeroMemory(&Ext2Sb, sizeof(EXT2_SUPER_BLOCK));
|
RtlZeroMemory(&Ext2Sb, sizeof(EXT2_SUPER_BLOCK));
|
||||||
RtlZeroMemory(&FileSys, sizeof(EXT2_FILESYS));
|
RtlZeroMemory(&FileSys, sizeof(EXT2_FILESYS));
|
||||||
FileSys.ext2_sb = &Ext2Sb;
|
FileSys.ext2_sb = &Ext2Sb;
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
if (!NT_SUCCESS(Ext2OpenDevice(&FileSys, DriveRoot)))
|
if (!NT_SUCCESS(Ext2OpenDevice(&FileSys, DriveRoot)))
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Volume %wZ does not exist, ...\n", DriveRoot));
|
DPRINT1("Mke2fs: Volume %wZ does not exist, ...\n", DriveRoot);
|
||||||
goto clean_up;
|
goto clean_up;
|
||||||
}
|
}
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
if (!NT_SUCCESS(Ext2GetMediaInfo(&FileSys)))
|
if (!NT_SUCCESS(Ext2GetMediaInfo(&FileSys)))
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Can't get media information\n"));
|
DPRINT1("Mke2fs: Can't get media information\n");
|
||||||
goto clean_up;
|
goto clean_up;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,7 +843,7 @@ Ext2Format(PUNICODE_STRING DriveRoot,
|
||||||
Ext2Sb.s_blocks_count = FileSys.PartInfo.PartitionLength.QuadPart /
|
Ext2Sb.s_blocks_count = FileSys.PartInfo.PartitionLength.QuadPart /
|
||||||
EXT2_BLOCK_SIZE(&Ext2Sb);
|
EXT2_BLOCK_SIZE(&Ext2Sb);
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calculate number of inodes based on the inode ratio
|
* Calculate number of inodes based on the inode ratio
|
||||||
|
@ -856,7 +856,7 @@ Ext2Format(PUNICODE_STRING DriveRoot,
|
||||||
*/
|
*/
|
||||||
Ext2Sb.s_r_blocks_count = (Ext2Sb.s_blocks_count * 5) / 100;
|
Ext2Sb.s_r_blocks_count = (Ext2Sb.s_blocks_count * 5) / 100;
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
Status = Ext2LockVolume(&FileSys);
|
Status = Ext2LockVolume(&FileSys);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
|
@ -864,16 +864,16 @@ Ext2Format(PUNICODE_STRING DriveRoot,
|
||||||
bLocked = TRUE;
|
bLocked = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
// Initialize
|
// Initialize
|
||||||
if (!ext2_initialize_sb(&FileSys))
|
if (!ext2_initialize_sb(&FileSys))
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: error...\n"));
|
DPRINT1("Mke2fs: error...\n");
|
||||||
goto clean_up;
|
goto clean_up;
|
||||||
}
|
}
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
zap_sector(&FileSys, 2, 6);
|
zap_sector(&FileSys, 2, 6);
|
||||||
|
|
||||||
|
@ -946,7 +946,7 @@ Ext2Format(PUNICODE_STRING DriveRoot,
|
||||||
|
|
||||||
if (!bRet)
|
if (!bRet)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: zeroing block %lu at end of filesystem", ret_blk));
|
DPRINT1("Mke2fs: zeroing block %lu at end of filesystem", ret_blk);
|
||||||
goto clean_up;
|
goto clean_up;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -959,21 +959,21 @@ Ext2Format(PUNICODE_STRING DriveRoot,
|
||||||
|
|
||||||
create_bad_block_inode(&FileSys, NULL);
|
create_bad_block_inode(&FileSys, NULL);
|
||||||
|
|
||||||
KdPrint(("Mke2fs: Writing superblocks and filesystem accounting information ... \n"));
|
DPRINT("Mke2fs: Writing superblocks and filesystem accounting information ... \n");
|
||||||
|
|
||||||
if (!QuickFormat)
|
if (!QuickFormat)
|
||||||
{
|
{
|
||||||
KdPrint(("Mke2fs: Slow format not supported yet\n"));
|
DPRINT1("Mke2fs: Slow format not supported yet\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ext2_flush(&FileSys))
|
if (!ext2_flush(&FileSys))
|
||||||
{
|
{
|
||||||
bRet = false;
|
bRet = false;
|
||||||
KdPrint(("Mke2fs: Warning, had trouble writing out superblocks.\n"));
|
DPRINT1("Mke2fs: Warning, had trouble writing out superblocks.\n");
|
||||||
goto clean_up;
|
goto clean_up;
|
||||||
}
|
}
|
||||||
|
|
||||||
KdPrint(("Mke2fs: Writing superblocks and filesystem accounting information done!\n"));
|
DPRINT("Mke2fs: Writing superblocks and filesystem accounting information done!\n");
|
||||||
|
|
||||||
bRet = true;
|
bRet = true;
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
|
@ -998,13 +998,13 @@ clean_up:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
Ext2CloseDevice(&FileSys);
|
Ext2CloseDevice(&FileSys);
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
Callback(DONE, 0, (PVOID)&bRet);
|
Callback(DONE, 0, (PVOID)&bRet);
|
||||||
KdPrint(("%s:%d\n", __FILE__, __LINE__));
|
CHECKPOINT;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,16 +12,12 @@
|
||||||
/* INCLUDES **************************************************************/
|
/* INCLUDES **************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#define WIN32_NO_STATUS
|
||||||
#include <stdio.h>
|
#include <windows.h>
|
||||||
#include <ntddk.h>
|
#define NTOS_MODE_USER
|
||||||
#include <ntdddisk.h>
|
#include <ndk/ntndk.h>
|
||||||
|
#include <fmifs/fmifs.h>
|
||||||
|
|
||||||
#include <napi/teb.h>
|
|
||||||
|
|
||||||
#include "time.h"
|
|
||||||
#include "stdio.h"
|
|
||||||
#include "stdlib.h"
|
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "ctype.h"
|
#include "ctype.h"
|
||||||
|
|
||||||
|
@ -30,8 +26,6 @@
|
||||||
|
|
||||||
#include "getopt.h"
|
#include "getopt.h"
|
||||||
|
|
||||||
#define NTSYSAPI
|
|
||||||
|
|
||||||
/* DEFINITIONS ***********************************************************/
|
/* DEFINITIONS ***********************************************************/
|
||||||
|
|
||||||
#define SECTOR_SIZE (Ext2Sys->DiskGeometry.BytesPerSector)
|
#define SECTOR_SIZE (Ext2Sys->DiskGeometry.BytesPerSector)
|
||||||
|
@ -224,466 +218,6 @@ typedef struct _EXT2_BDL {
|
||||||
bool create_bad_block_inode(PEXT2_FILESYS fs, PEXT2_BADBLK_LIST bb_list);
|
bool create_bad_block_inode(PEXT2_FILESYS fs, PEXT2_BADBLK_LIST bb_list);
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Definitions
|
|
||||||
//
|
|
||||||
|
|
||||||
#define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
// decommissioned fsctl value 9
|
|
||||||
#define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) // PATHNAME_BUFFER,
|
|
||||||
#define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
// decommissioned fsctl value 13
|
|
||||||
#define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
|
|
||||||
// decommissioned fsctl value 17
|
|
||||||
// decommissioned fsctl value 18
|
|
||||||
#define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS) // , FSCTL_QUERY_FAT_BPB_BUFFER
|
|
||||||
#define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
||||||
#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) // , FILESYSTEM_STATISTICS
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Disk I/O Routines
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
NtReadFile(HANDLE FileHandle,
|
|
||||||
HANDLE Event OPTIONAL,
|
|
||||||
PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
|
||||||
PVOID ApcContext OPTIONAL,
|
|
||||||
PIO_STATUS_BLOCK IoStatusBlock,
|
|
||||||
PVOID Buffer,
|
|
||||||
ULONG Length,
|
|
||||||
PLARGE_INTEGER ByteOffset OPTIONAL,
|
|
||||||
PULONG Key OPTIONAL);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
NtWriteFile(HANDLE FileHandle,
|
|
||||||
HANDLE Event OPTIONAL,
|
|
||||||
PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
|
||||||
PVOID ApcContext OPTIONAL,
|
|
||||||
PIO_STATUS_BLOCK IoStatusBlock,
|
|
||||||
PVOID Buffer,
|
|
||||||
ULONG Length,
|
|
||||||
PLARGE_INTEGER ByteOffset OPTIONAL,
|
|
||||||
PULONG Key OPTIONAL);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
NtClose(HANDLE Handle);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
NtCreateFile(PHANDLE FileHandle,
|
|
||||||
ACCESS_MASK DesiredAccess,
|
|
||||||
POBJECT_ATTRIBUTES ObjectAttributes,
|
|
||||||
PIO_STATUS_BLOCK IoStatusBlock,
|
|
||||||
PLARGE_INTEGER AllocationSize OPTIONAL,
|
|
||||||
ULONG FileAttributes,
|
|
||||||
ULONG ShareAccess,
|
|
||||||
ULONG CreateDisposition,
|
|
||||||
ULONG CreateOptions,
|
|
||||||
PVOID EaBuffer OPTIONAL,
|
|
||||||
ULONG EaLength);
|
|
||||||
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
NtDeviceIoControlFile(
|
|
||||||
IN HANDLE FileHandle,
|
|
||||||
IN HANDLE Event,
|
|
||||||
IN PIO_APC_ROUTINE ApcRoutine,
|
|
||||||
IN PVOID ApcContext,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
||||||
IN ULONG IoControlCode,
|
|
||||||
IN PVOID InputBuffer,
|
|
||||||
IN ULONG InputBufferLength,
|
|
||||||
OUT PVOID OutputBuffer,
|
|
||||||
OUT ULONG OutputBufferLength
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
NtFsControlFile(
|
|
||||||
IN HANDLE FileHandle,
|
|
||||||
IN HANDLE Event OPTIONAL,
|
|
||||||
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
|
||||||
IN PVOID ApcContext OPTIONAL,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
||||||
IN ULONG FsControlCode,
|
|
||||||
IN PVOID InputBuffer OPTIONAL,
|
|
||||||
IN ULONG InputBufferLength,
|
|
||||||
OUT PVOID OutputBuffer OPTIONAL,
|
|
||||||
IN ULONG OutputBufferLength
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
NtQueryInformationFile(
|
|
||||||
IN HANDLE FileHandle,
|
|
||||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
||||||
OUT PVOID FileInformation,
|
|
||||||
IN ULONG Length,
|
|
||||||
IN FILE_INFORMATION_CLASS FileInformationClass
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bitmap Routines
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// BitMap routines. The following structure, routines, and macros are
|
|
||||||
// for manipulating bitmaps. The user is responsible for allocating a bitmap
|
|
||||||
// structure (which is really a header) and a buffer (which must be longword
|
|
||||||
// aligned and multiple longwords in size).
|
|
||||||
//
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following routine initializes a new bitmap. It does not alter the
|
|
||||||
// data currently in the bitmap. This routine must be called before
|
|
||||||
// any other bitmap routine/macro.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
RtlInitializeBitMap (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
PULONG BitMapBuffer,
|
|
||||||
ULONG SizeOfBitMap
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following two routines either clear or set all of the bits
|
|
||||||
// in a bitmap.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
RtlClearAllBits (
|
|
||||||
PRTL_BITMAP BitMapHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
RtlSetAllBits (
|
|
||||||
PRTL_BITMAP BitMapHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following two routines locate a contiguous region of either
|
|
||||||
// clear or set bits within the bitmap. The region will be at least
|
|
||||||
// as large as the number specified, and the search of the bitmap will
|
|
||||||
// begin at the specified hint index (which is a bit index within the
|
|
||||||
// bitmap, zero based). The return value is the bit index of the located
|
|
||||||
// region (zero based) or -1 (i.e., 0xffffffff) if such a region cannot
|
|
||||||
// be located
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindClearBits (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
ULONG NumberToFind,
|
|
||||||
ULONG HintIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindSetBits (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
ULONG NumberToFind,
|
|
||||||
ULONG HintIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following two routines locate a contiguous region of either
|
|
||||||
// clear or set bits within the bitmap and either set or clear the bits
|
|
||||||
// within the located region. The region will be as large as the number
|
|
||||||
// specified, and the search for the region will begin at the specified
|
|
||||||
// hint index (which is a bit index within the bitmap, zero based). The
|
|
||||||
// return value is the bit index of the located region (zero based) or
|
|
||||||
// -1 (i.e., 0xffffffff) if such a region cannot be located. If a region
|
|
||||||
// cannot be located then the setting/clearing of the bitmap is not performed.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindClearBitsAndSet (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
ULONG NumberToFind,
|
|
||||||
ULONG HintIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindSetBitsAndClear (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
ULONG NumberToFind,
|
|
||||||
ULONG HintIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following two routines clear or set bits within a specified region
|
|
||||||
// of the bitmap. The starting index is zero based.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
RtlClearBits (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
ULONG StartingIndex,
|
|
||||||
ULONG NumberToClear
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
RtlSetBits (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
ULONG StartingIndex,
|
|
||||||
ULONG NumberToSet
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following routine locates a set of contiguous regions of clear
|
|
||||||
// bits within the bitmap. The caller specifies whether to return the
|
|
||||||
// longest runs or just the first found lcoated. The following structure is
|
|
||||||
// used to denote a contiguous run of bits. The two routines return an array
|
|
||||||
// of this structure, one for each run located.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindClearRuns (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
PRTL_BITMAP_RUN RunArray,
|
|
||||||
ULONG SizeOfRunArray,
|
|
||||||
BOOLEAN LocateLongestRuns
|
|
||||||
);
|
|
||||||
//
|
|
||||||
// The following routine locates the longest contiguous region of
|
|
||||||
// clear bits within the bitmap. The returned starting index value
|
|
||||||
// denotes the first contiguous region located satisfying our requirements
|
|
||||||
// The return value is the length (in bits) of the longest region found.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindLongestRunClear (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
PULONG StartingIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following routine locates the first contiguous region of
|
|
||||||
// clear bits within the bitmap. The returned starting index value
|
|
||||||
// denotes the first contiguous region located satisfying our requirements
|
|
||||||
// The return value is the length (in bits) of the region found.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindFirstRunClear (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
PULONG StartingIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following macro returns the value of the bit stored within the
|
|
||||||
// bitmap at the specified location. If the bit is set a value of 1 is
|
|
||||||
// returned otherwise a value of 0 is returned.
|
|
||||||
//
|
|
||||||
// ULONG
|
|
||||||
// RtlCheckBit (
|
|
||||||
// PRTL_BITMAP BitMapHeader,
|
|
||||||
// ULONG BitPosition
|
|
||||||
// );
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// To implement CheckBit the macro retrieves the longword containing the
|
|
||||||
// bit in question, shifts the longword to get the bit in question into the
|
|
||||||
// low order bit position and masks out all other bits.
|
|
||||||
//
|
|
||||||
|
|
||||||
#define RtlCheckBit(BMH,BP) ((((BMH)->Buffer[(BP) / 32]) >> ((BP) % 32)) & 0x1)
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following two procedures return to the caller the total number of
|
|
||||||
// clear or set bits within the specified bitmap.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlNumberOfClearBits (
|
|
||||||
PRTL_BITMAP BitMapHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlNumberOfSetBits (
|
|
||||||
PRTL_BITMAP BitMapHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following two procedures return to the caller a boolean value
|
|
||||||
// indicating if the specified range of bits are all clear or set.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
RtlAreBitsClear (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
ULONG StartingIndex,
|
|
||||||
ULONG Length
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
RtlAreBitsSet (
|
|
||||||
PRTL_BITMAP BitMapHeader,
|
|
||||||
ULONG StartingIndex,
|
|
||||||
ULONG Length
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindNextForwardRunClear (
|
|
||||||
IN PRTL_BITMAP BitMapHeader,
|
|
||||||
IN ULONG FromIndex,
|
|
||||||
IN PULONG StartingRunIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlFindLastBackwardRunClear (
|
|
||||||
IN PRTL_BITMAP BitMapHeader,
|
|
||||||
IN ULONG FromIndex,
|
|
||||||
IN PULONG StartingRunIndex
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// The following two procedures return to the caller a value indicating
|
|
||||||
// the position within a ULONGLONG of the most or least significant non-zero
|
|
||||||
// bit. A value of zero results in a return value of -1.
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
CCHAR
|
|
||||||
NTAPI
|
|
||||||
RtlFindLeastSignificantBit (
|
|
||||||
IN ULONGLONG Set
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
CCHAR
|
|
||||||
NTAPI
|
|
||||||
RtlFindMostSignificantBit (
|
|
||||||
IN ULONGLONG Set
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Random routines ...
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
ULONG
|
|
||||||
NTAPI
|
|
||||||
RtlRandom(
|
|
||||||
IN OUT PULONG Seed
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Time routines ...
|
|
||||||
//
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
CCHAR
|
|
||||||
NTAPI
|
|
||||||
NtQuerySystemTime(
|
|
||||||
OUT PLARGE_INTEGER CurrentTime
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
BOOLEAN
|
|
||||||
NTAPI
|
|
||||||
RtlTimeToSecondsSince1970(
|
|
||||||
IN PLARGE_INTEGER Time,
|
|
||||||
OUT PULONG ElapsedSeconds
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
NTSYSAPI
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
RtlSecondsSince1970ToTime(
|
|
||||||
IN ULONG ElapsedSeconds,
|
|
||||||
OUT PLARGE_INTEGER Time
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Heap routines...
|
|
||||||
//
|
|
||||||
|
|
||||||
#define GetProcessHeap() (NtCurrentTeb()->Peb->ProcessHeap)
|
|
||||||
|
|
||||||
PVOID STDCALL
|
|
||||||
RtlAllocateHeap (
|
|
||||||
HANDLE Heap,
|
|
||||||
ULONG Flags,
|
|
||||||
ULONG Size
|
|
||||||
);
|
|
||||||
|
|
||||||
BOOLEAN
|
|
||||||
STDCALL
|
|
||||||
RtlFreeHeap (
|
|
||||||
HANDLE Heap,
|
|
||||||
ULONG Flags,
|
|
||||||
PVOID Address
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Bitmap.c
|
* Bitmap.c
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
/* INCLUDES **************************************************************/
|
/* INCLUDES **************************************************************/
|
||||||
|
|
||||||
#include "Mke2fs.h"
|
#include "Mke2fs.h"
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
/* DEFINITIONS ***********************************************************/
|
/* DEFINITIONS ***********************************************************/
|
||||||
|
|
||||||
|
@ -20,50 +21,49 @@ void ext2_print_super(PEXT2_SUPER_BLOCK pExt2Sb)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
KdPrint(("\nExt2 Super Block Details ...\n\n"));
|
DPRINT("\nExt2 Super Block Details ...\n\n");
|
||||||
KdPrint((" Inode Count: %lu\n", pExt2Sb->s_inodes_count));
|
DPRINT(" Inode Count: %lu\n", pExt2Sb->s_inodes_count);
|
||||||
KdPrint((" Block Count: %lu\n", pExt2Sb->s_blocks_count));
|
DPRINT(" Block Count: %lu\n", pExt2Sb->s_blocks_count);
|
||||||
KdPrint((" Reserved Block Count: %lu\n", pExt2Sb->s_r_blocks_count));
|
DPRINT(" Reserved Block Count: %lu\n", pExt2Sb->s_r_blocks_count);
|
||||||
KdPrint((" Free Blocks: %lu\n", pExt2Sb->s_free_blocks_count));
|
DPRINT(" Free Blocks: %lu\n", pExt2Sb->s_free_blocks_count);
|
||||||
KdPrint((" Free Inodes: %lu\n", pExt2Sb->s_free_inodes_count));
|
DPRINT(" Free Inodes: %lu\n", pExt2Sb->s_free_inodes_count);
|
||||||
KdPrint((" First Data Block: %lu\n", pExt2Sb->s_first_data_block));
|
DPRINT(" First Data Block: %lu\n", pExt2Sb->s_first_data_block);
|
||||||
KdPrint((" Log Block Size: %lu\n", pExt2Sb->s_log_block_size));
|
DPRINT(" Log Block Size: %lu\n", pExt2Sb->s_log_block_size);
|
||||||
KdPrint((" Log Frag Size: %ld\n", pExt2Sb->s_log_frag_size));
|
DPRINT(" Log Frag Size: %ld\n", pExt2Sb->s_log_frag_size);
|
||||||
KdPrint((" Blocks per Group: %lu\n", pExt2Sb->s_blocks_per_group));
|
DPRINT(" Blocks per Group: %lu\n", pExt2Sb->s_blocks_per_group);
|
||||||
KdPrint((" Fragments per Group: %lu\n", pExt2Sb->s_frags_per_group));
|
DPRINT(" Fragments per Group: %lu\n", pExt2Sb->s_frags_per_group);
|
||||||
KdPrint((" Inodes per Group: %lu\n", pExt2Sb->s_inodes_per_group));
|
DPRINT(" Inodes per Group: %lu\n", pExt2Sb->s_inodes_per_group);
|
||||||
// KdPrint((" Mount Time: %s", ctime((time_t *) & (pExt2Sb->s_mtime))));
|
// DPRINT(" Mount Time: %s", ctime((time_t *) & (pExt2Sb->s_mtime)));
|
||||||
// KdPrint((" Write Time: %s", ctime((time_t *) & (pExt2Sb->s_wtime))));
|
// DPRINT(" Write Time: %s", ctime((time_t *) & (pExt2Sb->s_wtime)));
|
||||||
KdPrint((" Mount Count: %u\n", pExt2Sb->s_mnt_count));
|
DPRINT(" Mount Count: %u\n", pExt2Sb->s_mnt_count);
|
||||||
KdPrint((" Max Mount Count: %d\n", pExt2Sb->s_max_mnt_count));
|
DPRINT(" Max Mount Count: %d\n", pExt2Sb->s_max_mnt_count);
|
||||||
KdPrint((" Magic Number: %X (%s)\n", pExt2Sb->s_magic,
|
DPRINT(" Magic Number: %X (%s)\n", pExt2Sb->s_magic,
|
||||||
pExt2Sb->s_magic == EXT2_SUPER_MAGIC ? "OK" : "BAD"));
|
pExt2Sb->s_magic == EXT2_SUPER_MAGIC ? "OK" : "BAD");
|
||||||
KdPrint((" File System State: %X\n", pExt2Sb->s_state));
|
DPRINT(" File System State: %X\n", pExt2Sb->s_state);
|
||||||
KdPrint((" Error Behaviour: %X\n", pExt2Sb->s_errors));
|
DPRINT(" Error Behaviour: %X\n", pExt2Sb->s_errors);
|
||||||
KdPrint((" Minor rev: %u\n", pExt2Sb->s_minor_rev_level));
|
DPRINT(" Minor rev: %u\n", pExt2Sb->s_minor_rev_level);
|
||||||
// KdPrint((" Last Check: %s", ctime((time_t *) & (pExt2Sb->s_lastcheck))));
|
// DPRINT(" Last Check: %s", ctime((time_t *) & (pExt2Sb->s_lastcheck)));
|
||||||
KdPrint((" Check Interval: %lu\n", pExt2Sb->s_checkinterval));
|
DPRINT(" Check Interval: %lu\n", pExt2Sb->s_checkinterval);
|
||||||
KdPrint((" Creator OS: %lu\n", pExt2Sb->s_creator_os));
|
DPRINT(" Creator OS: %lu\n", pExt2Sb->s_creator_os);
|
||||||
KdPrint((" Revision Level: %lu\n", pExt2Sb->s_rev_level));
|
DPRINT(" Revision Level: %lu\n", pExt2Sb->s_rev_level);
|
||||||
KdPrint((" Reserved Block Default UID: %u\n", pExt2Sb->s_def_resuid));
|
DPRINT(" Reserved Block Default UID: %u\n", pExt2Sb->s_def_resuid);
|
||||||
KdPrint((" Reserved Block Default GID: %u\n", pExt2Sb->s_def_resgid));
|
DPRINT(" Reserved Block Default GID: %u\n", pExt2Sb->s_def_resgid);
|
||||||
KdPrint((" uuid = "));
|
DPRINT(" uuid = ");
|
||||||
for (i=0; i < 16; i++)
|
for (i=0; i < 16; i++)
|
||||||
KdPrint(("%x ", pExt2Sb->s_uuid[i]));
|
DbgPrint("%x ", pExt2Sb->s_uuid[i]);
|
||||||
KdPrint(("\n"));
|
DbgPrint("\n");
|
||||||
|
|
||||||
KdPrint((" volume label name: "));
|
DPRINT(" volume label name: ");
|
||||||
for (i=0; i < 16; i++)
|
for (i=0; i < 16; i++)
|
||||||
{
|
{
|
||||||
if (pExt2Sb->s_volume_name[i] == 0)
|
if (pExt2Sb->s_volume_name[i] == 0)
|
||||||
break;
|
break;
|
||||||
KdPrint(("%c", pExt2Sb->s_volume_name[i]));
|
DbgPrint("%c", pExt2Sb->s_volume_name[i]);
|
||||||
}
|
}
|
||||||
KdPrint(("\n"));
|
DbgPrint("\n");
|
||||||
|
|
||||||
KdPrint(("\n\n"));
|
DPRINT("\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define set_field(field, default) if (!pExt2Sb->field) pExt2Sb->field = (default);
|
#define set_field(field, default) if (!pExt2Sb->field) pExt2Sb->field = (default);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue