diff --git a/rosapps/directory.rbuild b/rosapps/directory.rbuild index 7eba8daeafe..4cf59654cde 100644 --- a/rosapps/directory.rbuild +++ b/rosapps/directory.rbuild @@ -28,11 +28,7 @@ - + diff --git a/rosapps/ext2/attr.c b/rosapps/ext2/attr.c deleted file mode 100644 index 37e011ad124..00000000000 --- a/rosapps/ext2/attr.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/attr.c - * PURPOSE: Set/Get file attributes support - * PROGRAMMER: David Welch (welch@cwcom.net) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include -#include - -//#define NDEBUG -#include - -#include "ext2fs.h" - -/* FUNCTIONS ****************************************************************/ - -NTSTATUS STDCALL -Ext2SetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - DPRINT("Ext2SetInformation(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp, - IO_NO_INCREMENT); - - return(STATUS_UNSUCCESSFUL); -} - -NTSTATUS STDCALL -Ext2QueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - NTSTATUS Status; - PIO_STACK_LOCATION Param; - PFILE_OBJECT FileObject; - PDEVICE_EXTENSION DeviceExt; - ULONG Length; - PFILE_BASIC_INFORMATION PFileBasicInformation; - PFILE_STANDARD_INFORMATION PFileStandardInformation; - PFILE_INTERNAL_INFORMATION PFileInternalInformation; - PFILE_EA_INFORMATION PFileEaInformation; - PFILE_ACCESS_INFORMATION PFileAccessInformation; - PFILE_NAME_INFORMATION PFileNameInformation; - PFILE_POSITION_INFORMATION PFilePositionInformation; - PVOID Buffer; - - DPRINT("Ext2QueryInformation(DeviceObject %x Irp %x)\n", DeviceObject, Irp); - - Param = IoGetCurrentIrpStackLocation(Irp); - FileObject = Param->FileObject; - DeviceExt = DeviceObject->DeviceExtension; - Length = Param->Parameters.QueryFile.Length; - Buffer = Irp->AssociatedIrp.SystemBuffer; - - switch (Param->Parameters.QueryFile.FileInformationClass) - { - case FileDirectoryInformation: - case FileFullDirectoryInformation: - case FileBothDirectoryInformation: - Status = STATUS_NOT_IMPLEMENTED; - break; - - case FileBasicInformation: - PFileBasicInformation = (PFILE_BASIC_INFORMATION)Buffer; - memset(PFileBasicInformation, 0, sizeof(FILE_BASIC_INFORMATION)); - Status = STATUS_SUCCESS; - break; - - case FileStandardInformation: - PFileStandardInformation = (PFILE_STANDARD_INFORMATION)Buffer; - memset(PFileStandardInformation, 0, sizeof(FILE_STANDARD_INFORMATION)); - Status = STATUS_SUCCESS; - break; - - case FileInternalInformation: - PFileInternalInformation = (PFILE_INTERNAL_INFORMATION)Buffer; - memset(PFileInternalInformation, 0, sizeof(FILE_INTERNAL_INFORMATION)); - Status = STATUS_SUCCESS; - break; - - case FileEaInformation: - PFileEaInformation = (PFILE_EA_INFORMATION)Buffer; - memset(PFileEaInformation, 0, sizeof(FILE_EA_INFORMATION)); - PFileEaInformation->EaSize = 0; - Status = STATUS_SUCCESS; - break; - - case FileAccessInformation: - PFileAccessInformation = (PFILE_ACCESS_INFORMATION)Buffer; - memset(PFileAccessInformation, 0, sizeof(FILE_ACCESS_INFORMATION)); - PFileAccessInformation->AccessFlags = 0; - Status = STATUS_SUCCESS; - break; - - case FileNameInformation: - PFileNameInformation = (PFILE_NAME_INFORMATION)Buffer; - memset(PFileNameInformation, 0, sizeof(FILE_NAME_INFORMATION)); - Status = STATUS_SUCCESS; - break; - - case FilePositionInformation: - PFilePositionInformation = (PFILE_POSITION_INFORMATION)Buffer; - memcpy(PFilePositionInformation, - &FileObject->CurrentByteOffset, - sizeof(FileObject->CurrentByteOffset)); - Status = STATUS_SUCCESS; - break; - - case FileRenameInformation: - Status = STATUS_NOT_IMPLEMENTED; - break; - - default: - Status = STATUS_NOT_SUPPORTED; - } - - - - - Irp->IoStatus.Status = Status; - if (NT_SUCCESS(Status)) - Irp->IoStatus.Information = - Param->Parameters.QueryFile.Length - Length; - else - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp, - IO_NO_INCREMENT); - - return(Status); -} diff --git a/rosapps/ext2/blockdev.c b/rosapps/ext2/blockdev.c deleted file mode 100644 index 6792b98efcd..00000000000 --- a/rosapps/ext2/blockdev.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/blockdev.c - * PURPOSE: Temporary sector reading support - * PROGRAMMER: David Welch (welch@cwcom.net) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include - -//#define NDEBUG -#include - -#include "ext2fs.h" - -/* FUNCTIONS ***************************************************************/ - -BOOLEAN -Ext2ReadSectors(IN PDEVICE_OBJECT pDeviceObject, - IN ULONG DiskSector, - IN ULONG SectorCount, - IN PVOID Buffer) -{ - LARGE_INTEGER sectorNumber; - PIRP irp; - IO_STATUS_BLOCK ioStatus; - KEVENT event; - NTSTATUS status; - ULONG sectorSize; - int j; - - DPRINT("VFATReadSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n", - pDeviceObject,DiskSector,Buffer); - - sectorNumber.u.HighPart = 0; - sectorNumber.u.LowPart = DiskSector * BLOCKSIZE; - - DPRINT("DiskSector:%ld BLKSZ:%ld sectorNumber:%ld:%ld\n", - (unsigned long) DiskSector, - (unsigned long) BLOCKSIZE, - (unsigned long) sectorNumber.u.HighPart, - (unsigned long) sectorNumber.u.LowPart); - - KeInitializeEvent(&event, NotificationEvent, FALSE); - - sectorSize = BLOCKSIZE*SectorCount; - - - DPRINT("Building synchronous FSD Request...\n"); - irp = IoBuildSynchronousFsdRequest(IRP_MJ_READ, - pDeviceObject, - Buffer, - sectorSize, - §orNumber, - &event, - &ioStatus ); - - if (!irp) - { - DbgPrint("READ failed!!!\n"); - return FALSE; - } - - DPRINT("Calling IO Driver...\n"); - status = IoCallDriver(pDeviceObject, irp); - - DPRINT("Waiting for IO Operation...\n"); - if (status == STATUS_PENDING) - { - KeWaitForSingleObject(&event, - Suspended, - KernelMode, - FALSE, - NULL); - DPRINT("Getting IO Status...\n"); - status = ioStatus.Status; - } - - if (!NT_SUCCESS(status)) - { - DbgPrint("IO failed!!! Error code: %d(%x)\n", status, status); - return FALSE; - } - - return TRUE; -} - -BOOLEAN VFATWriteSectors(IN PDEVICE_OBJECT pDeviceObject, - IN ULONG DiskSector, - IN ULONG SectorCount, - IN UCHAR* Buffer) -{ - LARGE_INTEGER sectorNumber; - PIRP irp; - IO_STATUS_BLOCK ioStatus; - KEVENT event; - NTSTATUS status; - ULONG sectorSize; - PULONG mbr; - int j; - - DPRINT("VFATWriteSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n", - pDeviceObject,DiskSector,Buffer); - - sectorNumber.u.HighPart = 0; - sectorNumber.u.LowPart = DiskSector * BLOCKSIZE; - - KeInitializeEvent(&event, NotificationEvent, FALSE); - - sectorSize = BLOCKSIZE*SectorCount; - - - DPRINT("Building synchronous FSD Request...\n"); - irp = IoBuildSynchronousFsdRequest(IRP_MJ_WRITE, - pDeviceObject, - Buffer, - sectorSize, - §orNumber, - &event, - &ioStatus ); - - if (!irp) { - DbgPrint("WRITE failed!!!\n"); - return FALSE; - } - - DPRINT("Calling IO Driver...\n"); - status = IoCallDriver(pDeviceObject, - irp); - - DPRINT("Waiting for IO Operation...\n"); - if (status == STATUS_PENDING) { - KeWaitForSingleObject(&event, - Suspended, - KernelMode, - FALSE, - NULL); - DPRINT("Getting IO Status...\n"); - status = ioStatus.Status; - } - - if (!NT_SUCCESS(status)) { - DbgPrint("IO failed!!! Error code: %d(%x)\n", status, status); - return FALSE; - } - - - ExFreePool(mbr); - DPRINT("Block request succeeded\n"); - return TRUE; -} - diff --git a/rosapps/ext2/dir.c b/rosapps/ext2/dir.c deleted file mode 100644 index 6bfb8ae23c9..00000000000 --- a/rosapps/ext2/dir.c +++ /dev/null @@ -1,338 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/dir.c - * PURPOSE: ext2 filesystem - * PROGRAMMER: David Welch (welch@cwcom.net) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include -#include - -//#define NDEBUG -#include - -#include "ext2fs.h" - -/* FUNCTIONS *****************************************************************/ - - -static VOID Ext2ConvertName(PWSTR Out, PCH In, ULONG Len) -{ - ULONG i; - - for (i=0; iinode, - &inode); - - switch (IoStack->Parameters.QueryDirectory.FileInformationClass) - { - case FileNamesInformation: - FNI = (PFILE_NAMES_INFORMATION)Buffer; - FNI->NextEntryOffset = sizeof(FileDirectoryInformation) + - dir_entry->name_len + 1; - FNI->FileNameLength = dir_entry->name_len; - Ext2ConvertName(FNI->FileName, dir_entry->name, dir_entry->name_len); - Buffer = Buffer + FNI->NextEntryOffset; - break; - - case FileDirectoryInformation: - FDI = (PFILE_DIRECTORY_INFORMATION)Buffer; - FDI->NextEntryOffset = sizeof(FileDirectoryInformation) + - dir_entry->name_len + 1; - FDI->FileIndex = FileIndex; -// FDI->CreationTime = 0; -// FDI->LastAccessTime = 0; -// FDI->LastWriteTime = 0; -// FDI->ChangeTime = 0; - FDI->AllocationSize.QuadPart = FDI->EndOfFile.QuadPart = inode.i_size; - FDI->FileAttributes = 0; - FDI->FileNameLength = dir_entry->name_len; - Ext2ConvertName(FDI->FileName, dir_entry->name, dir_entry->name_len); - Buffer = Buffer + FDI->NextEntryOffset; - break; - - case FileBothDirectoryInformation: - FBI = (PFILE_BOTH_DIRECTORY_INFORMATION)Buffer; - FBI->NextEntryOffset = sizeof(FileBothDirectoryInformation) + - dir_entry->name_len + 1; - FBI->FileIndex = FileIndex; - FBI->AllocationSize.QuadPart = FBI->EndOfFile.QuadPart = inode.i_size; - FBI->FileAttributes = 0; - FBI->FileNameLength = dir_entry->name_len; - Ext2ConvertName(FBI->FileName, dir_entry->name, dir_entry->name_len); - memset(FBI->ShortName, 0, sizeof(FBI->ShortName)); - Buffer = Buffer + FBI->NextEntryOffset; - break; - - default: - UNIMPLEMENTED; - } - return(Buffer); -} - - -NTSTATUS Ext2QueryDirectory(PDEVICE_EXTENSION DeviceExt, - PEXT2_FCB Fcb, - PIRP Irp, - PIO_STACK_LOCATION IoStack) -{ - ULONG Max; - ULONG i; - ULONG StartIndex; - PVOID Buffer = NULL; - struct ext2_dir_entry dir_entry; - - Buffer = Irp->UserBuffer; - DPRINT("Buffer %x\n",Buffer); - DPRINT("IoStack->Flags %x\n",IoStack->Flags); - - if (IoStack->Flags & SL_RETURN_SINGLE_ENTRY) - { - Max = 1; - } - else - { - UNIMPLEMENTED; - } - - DPRINT("Buffer->FileIndex %d\n", - ((PFILE_DIRECTORY_INFORMATION)Buffer)->FileIndex); - if (IoStack->Flags & SL_INDEX_SPECIFIED) - { - StartIndex = ((PFILE_DIRECTORY_INFORMATION)Buffer)->FileIndex; - } - else - { - StartIndex = 0; - } - - if (IoStack->Flags & SL_RESTART_SCAN) - { - StartIndex = 0; - } - - DPRINT("StartIndex %d\n",StartIndex); - - for (i=0; iinode,"*",&dir_entry,&StartIndex)) - { - ((PFILE_DIRECTORY_INFORMATION)Buffer)->NextEntryOffset = 0; - return(STATUS_NO_MORE_FILES); - } - Buffer = Ext2ProcessDirEntry(DeviceExt, - &dir_entry, - IoStack, - Buffer, - StartIndex); - } - return(STATUS_SUCCESS); -} - -NTSTATUS STDCALL -Ext2DirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - PFILE_OBJECT FileObject = Stack->FileObject; - PEXT2_FCB Fcb = (PVOID)FileObject->FsContext; - NTSTATUS Status; - PDEVICE_EXTENSION DeviceExt; - - DPRINT("Ext2DirectoryControl(DeviceObject %x, Irp %x)\n",DeviceObject,Irp); - - DeviceExt = DeviceObject->DeviceExtension; - - switch (Stack->MinorFunction) - { - case IRP_MN_QUERY_DIRECTORY: - Status = Ext2QueryDirectory(DeviceExt, Fcb, Irp, Stack); - break; - - default: - Status = STATUS_UNSUCCESSFUL; - } - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); -} - -BOOL Ext2ScanDir(PDEVICE_EXTENSION DeviceExt, - struct ext2_inode* dir, - PCH filename, - struct ext2_dir_entry* ret, - PULONG StartIndex) -{ - ULONG i; - char* buffer; - ULONG offset; - char name[255]; - struct ext2_dir_entry* current; - ULONG block; - BOOL b; - - DPRINT("Ext2ScanDir(dir %x, filename %s, ret %x)\n",dir,filename,ret); - - buffer = ExAllocatePool(NonPagedPool, BLOCKSIZE); - - for (i=0; i<((*StartIndex)/BLOCKSIZE); i++); - for (; (block = Ext2BlockMap(DeviceExt, dir, i)) != 0; i++) - { - DPRINT("block %d\n",block); - b = Ext2ReadSectors(DeviceExt->StorageDevice, - block, - 1, - buffer); - if (!b) - { - DbgPrint("ext2fs:%s:%d: Disk io failed\n", __FILE__, __LINE__); - return(FALSE); - } - - offset = (*StartIndex)%BLOCKSIZE; - while (offset < BLOCKSIZE) - { - current = &buffer[offset]; - - strncpy(name,current->name,current->name_len); - name[current->name_len]=0; - - DPRINT("Scanning offset %d inode %d name %s\n", - offset,current->inode,name); - - DPRINT("Comparing %s %s\n",name,filename); - if (strcmp(name,filename)==0 || strcmp(filename,"*")==0) - { - DPRINT("Match found\n"); - *StartIndex = (i*BLOCKSIZE) + offset + current->rec_len; - memcpy(ret,current,sizeof(struct ext2_dir_entry)); - ExFreePool(buffer); - return(TRUE); - } - - offset = offset + current->rec_len; - ASSERT(current->rec_len != 0); - DPRINT("offset %d\n",offset); - } - DPRINT("Onto next block\n"); - } - DPRINT("No match\n"); - ExFreePool(buffer); - return(FALSE); -} - -void unicode_to_ansi(PCH StringA, PWSTR StringW) -{ - while((*StringW)!=0) - { - *StringA = *StringW; - StringA++; - StringW++; - } - *StringA = 0; -} - -NTSTATUS Ext2OpenFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject, - PWSTR FileName) -/* - * FUNCTION: Opens a file - */ -{ - EXT2_INODE parent_inode; - struct ext2_dir_entry entry; - char name[255]; - ULONG current_inode = 2; - char* current_segment; - PEXT2_FCB Fcb; - ULONG StartIndex = 0; - - DPRINT("Ext2OpenFile(DeviceExt %x, FileObject %x, FileName %S)\n", - DeviceExt,FileObject,FileName); - - Fcb = ExAllocatePool(NonPagedPool, sizeof(EXT2_FCB)); - - unicode_to_ansi(name,FileName); - DPRINT("name %s\n",name); - DPRINT("strtok %x\n",strtok); - current_segment = strtok(name,"\\"); - DPRINT("current_segment %x\n", current_segment); - while (current_segment!=NULL) - { - Ext2LoadInode(DeviceExt, - current_inode, - &parent_inode); - if (!Ext2ScanDir(DeviceExt, - parent_inode.inode, - current_segment, - &entry, - &StartIndex)) - { - Ext2ReleaseInode(DeviceExt, - &parent_inode); - ExFreePool(Fcb); - return(STATUS_UNSUCCESSFUL); - } - current_inode = entry.inode; - current_segment = strtok(NULL,"\\"); - StartIndex = 0; - Ext2ReleaseInode(DeviceExt, - &parent_inode); - } - DPRINT("Found file\n"); - - Fcb->inode = current_inode; - CcRosInitializeFileCache(FileObject, &Fcb->Bcb, PAGE_SIZE*3); - FileObject->FsContext = Fcb; - - return(STATUS_SUCCESS); -} - -NTSTATUS STDCALL -Ext2Create(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - PFILE_OBJECT FileObject = Stack->FileObject; - NTSTATUS Status; - PDEVICE_EXTENSION DeviceExt; - - DPRINT("Ext2Create(DeviceObject %x, Irp %x)\n",DeviceObject,Irp); - - DeviceExt = DeviceObject->DeviceExtension; - Status = Ext2OpenFile(DeviceExt,FileObject,FileObject->FileName.Buffer); - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); -} diff --git a/rosapps/ext2/ext2fs.h b/rosapps/ext2/ext2fs.h deleted file mode 100644 index 1dfd8fd0b54..00000000000 --- a/rosapps/ext2/ext2fs.h +++ /dev/null @@ -1,289 +0,0 @@ -#include -#include - -BOOLEAN Ext2ReadSectors(IN PDEVICE_OBJECT pDeviceObject, - IN ULONG DiskSector, - IN ULONG SectorCount, - IN PVOID Buffer); - -#define BLOCKSIZE (1024) - -struct ext2_super_block { - ULONG s_inodes_count; /* Inodes count */ - ULONG s_blocks_count; /* Blocks count */ - ULONG s_r_blocks_count; /* Reserved blocks count */ - ULONG s_free_blocks_count; /* Free blocks count */ - ULONG s_free_inodes_count; /* Free inodes count */ - ULONG s_first_data_block; /* First Data Block */ - ULONG s_log_block_size; /* Block size */ - LONG s_log_frag_size; /* Fragment size */ - ULONG s_blocks_per_group; /* # Blocks per group */ - ULONG s_frags_per_group; /* # Fragments per group */ - ULONG s_inodes_per_group; /* # Inodes per group */ - ULONG s_mtime; /* Mount time */ - ULONG s_wtime; /* Write time */ - USHORT s_mnt_count; /* Mount count */ - SHORT s_max_mnt_count; /* Maximal mount count */ - USHORT s_magic; /* Magic signature */ - USHORT s_state; /* File system state */ - USHORT s_errors; /* Behaviour when detecting errors */ - USHORT s_minor_rev_level; /* minor revision level */ - ULONG s_lastcheck; /* time of last check */ - ULONG s_checkinterval; /* max. time between checks */ - ULONG s_creator_os; /* OS */ - ULONG s_rev_level; /* Revision level */ - USHORT s_def_resuid; /* Default uid for reserved blocks */ - USHORT s_def_resgid; /* Default gid for reserved blocks */ - /* - * These fields are for EXT2_DYNAMIC_REV superblocks only. - * - * Note: the difference between the compatible feature set and - * the incompatible feature set is that if there is a bit set - * in the incompatible feature set that the kernel doesn't - * know about, it should refuse to mount the filesystem. - * - * e2fsck's requirements are more strict; if it doesn't know - * about a feature in either the compatible or incompatible - * feature set, it must abort and not try to meddle with - * things it doesn't understand... - */ - ULONG s_first_ino; /* First non-reserved inode */ - USHORT s_inode_size; /* size of inode structure */ - USHORT s_block_group_nr; /* block group # of this superblock */ - ULONG s_feature_compat; /* compatible feature set */ - ULONG s_feature_incompat; /* incompatible feature set */ - ULONG s_feature_ro_compat; /* readonly-compatible feature set */ - ULONG s_reserved[230]; /* Padding to the end of the block */ -}; - -/* - * Codes for operating systems - */ -#define EXT2_OS_LINUX 0 -#define EXT2_OS_HURD 1 -#define EXT2_OS_MASIX 2 -#define EXT2_OS_FREEBSD 3 -#define EXT2_OS_LITES 4 - -/* - * Revision levels - */ -#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */ -#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */ - -#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV -#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV - -/* - * The second extended file system magic number - */ -#define EXT2_SUPER_MAGIC 0xEF53 - -/* - * Constants relative to the data blocks - */ -#define EXT2_NDIR_BLOCKS 12 -#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS -#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1) -#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) -#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1) - - -/* - * Structure of an inode on the disk - */ -struct ext2_inode { - USHORT i_mode; /* File mode */ - USHORT i_uid; /* Owner Uid */ - ULONG i_size; /* Size in bytes */ - ULONG i_atime; /* Access time */ - ULONG i_ctime; /* Creation time */ - ULONG i_mtime; /* Modification time */ - ULONG i_dtime; /* Deletion Time */ - USHORT i_gid; /* Group Id */ - USHORT i_links_count; /* Links count */ - ULONG i_blocks; /* Blocks count */ - ULONG i_flags; /* File flags */ - union { - struct { - ULONG l_i_reserved1; - } linux1; - struct { - ULONG h_i_translator; - } hurd1; - struct { - ULONG m_i_reserved1; - } masix1; - } osd1; /* OS dependent 1 */ - ULONG i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ - ULONG i_version; /* File version (for NFS) */ - ULONG i_file_acl; /* File ACL */ - ULONG i_dir_acl; /* Directory ACL */ - ULONG i_faddr; /* Fragment address */ - union { - struct { - UCHAR l_i_frag; /* Fragment number */ - UCHAR l_i_fsize; /* Fragment size */ - USHORT i_pad1; - ULONG l_i_reserved2[2]; - } linux2; - struct { - UCHAR h_i_frag; /* Fragment number */ - UCHAR h_i_fsize; /* Fragment size */ - USHORT h_i_mode_high; - USHORT h_i_uid_high; - USHORT h_i_gid_high; - ULONG h_i_author; - } hurd2; - struct { - UCHAR m_i_frag; /* Fragment number */ - UCHAR m_i_fsize; /* Fragment size */ - USHORT m_pad1; - ULONG m_i_reserved2[2]; - } masix2; - } osd2; /* OS dependent 2 */ -}; - -#if defined(__KERNEL__) || defined(__linux__) -#define i_reserved1 osd1.linux1.l_i_reserved1 -#define i_frag osd2.linux2.l_i_frag -#define i_fsize osd2.linux2.l_i_fsize -#define i_reserved2 osd2.linux2.l_i_reserved2 -#endif - -#ifdef __hurd__ -#define i_translator osd1.hurd1.h_i_translator -#define i_frag osd2.hurd2.h_i_frag; -#define i_fsize osd2.hurd2.h_i_fsize; -#define i_uid_high osd2.hurd2.h_i_uid_high -#define i_gid_high osd2.hurd2.h_i_gid_high -#define i_author osd2.hurd2.h_i_author -#endif - -#ifdef __masix__ -#define i_reserved1 osd1.masix1.m_i_reserved1 -#define i_frag osd2.masix2.m_i_frag -#define i_fsize osd2.masix2.m_i_fsize -#define i_reserved2 osd2.masix2.m_i_reserved2 -#endif - -/* - * Constants relative to the data blocks - */ -#define EXT2_NDIR_BLOCKS 12 -#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS -#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1) -#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) -#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1) - -/* - * Inode flags - */ -#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */ -#define EXT2_UNRM_FL 0x00000002 /* Undelete */ -#define EXT2_COMPR_FL 0x00000004 /* Compress file */ -#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */ -#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */ -#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */ -#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */ -#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ - - -/* - * Structure of a blocks group descriptor - */ -struct ext2_group_desc -{ - ULONG bg_block_bitmap; /* Blocks bitmap block */ - ULONG bg_inode_bitmap; /* Inodes bitmap block */ - ULONG bg_inode_table; /* Inodes table block */ - USHORT bg_free_blocks_count; /* Free blocks count */ - USHORT bg_free_inodes_count; /* Free inodes count */ - USHORT bg_used_dirs_count; /* Directories count */ - USHORT bg_pad; - ULONG bg_reserved[3]; -}; - -#define EXT2_NAME_LEN 255 - -struct ext2_dir_entry { - ULONG inode; /* Inode number */ - USHORT rec_len; /* Directory entry length */ - USHORT name_len; /* Name length */ - char name[EXT2_NAME_LEN]; /* File name */ -}; - -typedef struct -{ - PDEVICE_OBJECT StorageDevice; - struct ext2_super_block* superblock; - PFILE_OBJECT FileObject; - PBCB Bcb; -} DEVICE_EXTENSION, *PDEVICE_EXTENSION; - -typedef struct _EXT2_GROUP_DESC -{ - ERESOURCE Lock; - struct ext2_group_desc* desc; - PCACHE_SEGMENT CacheSeg; - PVOID BaseAddress; -} EXT2_GROUP_DESC, *PEXT2_GROUP_DESC; - -PEXT2_GROUP_DESC Ext2LoadGroup(PDEVICE_EXTENSION DeviceExt, - ULONG BlockGrp); -VOID Ext2ReleaseGroup(PDEVICE_EXTENSION DeviceExt, - PEXT2_GROUP_DESC GrpDesc); - -VOID Ext2ReadInode(PDEVICE_EXTENSION DeviceExt, - ULONG ino, - struct ext2_inode* inode); -struct ext2_group_desc* Ext2LoadGroupDesc(PDEVICE_EXTENSION DeviceExt, - ULONG block_group); - -typedef struct _EXT2_INODE -{ - struct ext2_inode* inode; - PVOID BaseAddress; - PCACHE_SEGMENT CacheSeg; -} EXT2_INODE, *PEXT2_INODE; - -typedef struct _EXT2_FCB -{ - ULONG inode; - EXT2_INODE i; - PBCB Bcb; -} EXT2_FCB, *PEXT2_FCB; - -ULONG Ext2BlockMap(PDEVICE_EXTENSION DeviceExt, - struct ext2_inode* inode, - ULONG offset); -NTSTATUS Ext2OpenFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject, - PWSTR FileName); -NTSTATUS Ext2ReadFile(PDEVICE_EXTENSION DeviceExt, - PFILE_OBJECT FileObject, - PVOID Buffer, - ULONG Length, - LARGE_INTEGER Offset); -NTSTATUS STDCALL Ext2Create(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2DirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2QueryQuota(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2SetQuota(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2SetSecurity(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2QuerySecurity(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2SetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2QueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2Read(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2Write(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2Cleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2FlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL Ext2Shutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS Ext2ReadPage(PDEVICE_EXTENSION DeviceExt, - PEXT2_FCB Fcb, - PVOID Buffer, - ULONG Offset); -VOID Ext2LoadInode(PDEVICE_EXTENSION DeviceExt, - ULONG ino, - PEXT2_INODE Inode); -VOID Ext2ReleaseInode(PDEVICE_EXTENSION DeviceExt, - PEXT2_INODE Inode); - diff --git a/rosapps/ext2/ext2fs.rc b/rosapps/ext2/ext2fs.rc deleted file mode 100644 index a2e25039fd4..00000000000 --- a/rosapps/ext2/ext2fs.rc +++ /dev/null @@ -1,7 +0,0 @@ -/* $Id$ */ - -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Linux ext2 IFS Driver\0" -#define REACTOS_STR_INTERNAL_NAME "ext2fs\0" -#define REACTOS_STR_ORIGINAL_FILENAME "ext2fs.sys\0" -#include diff --git a/rosapps/ext2/file.c b/rosapps/ext2/file.c deleted file mode 100644 index a627974254f..00000000000 --- a/rosapps/ext2/file.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/super.c - * PURPOSE: ext2 filesystem - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include - -#define NDEBUG -#include - -#include "ext2fs.h" - -/* FUNCTIONS ****************************************************************/ - -#define addr_per_block (BLOCKSIZE / sizeof(ULONG)) - -ULONG Ext2BlockMap(PDEVICE_EXTENSION DeviceExt, - struct ext2_inode* inode, - ULONG offset) -{ - ULONG block; - PULONG TempBuffer; - BOOL b; - - DPRINT("Ext2BlockMap(DeviceExt %x, inode %x, offset %d)\n", - DeviceExt,inode,offset); - if (offset < EXT2_NDIR_BLOCKS) - { - block = inode->i_block[offset]; - DPRINT("block %d\n",block); - return(block); - } - offset = offset - EXT2_NDIR_BLOCKS; - if (offset < addr_per_block) - { - block = inode->i_block[EXT2_IND_BLOCK]; - TempBuffer = ExAllocatePool(NonPagedPool, BLOCKSIZE); - b = Ext2ReadSectors(DeviceExt->StorageDevice, - block, - 1, - TempBuffer); - if (!b) - { - DbgPrint("ext2fs:%s:%d: Disk io failed\n", __FILE__, __LINE__); - return(0); - } - block = TempBuffer[offset]; - ExFreePool(TempBuffer); - return(block); - } - offset = offset - addr_per_block; - DbgPrint("Failed at %s:%d\n",__FILE__,__LINE__); - for(;;); -} - diff --git a/rosapps/ext2/inode.c b/rosapps/ext2/inode.c deleted file mode 100644 index c05ff5176c5..00000000000 --- a/rosapps/ext2/inode.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/inode.c - * PURPOSE: Manipulating inodes - * PROGRAMMER: David Welch (welch@cwcom.net) - * UPDATE HISTORY: - * 26/12/98: Created - */ - -/* INCLUDES ****************************************************************/ - -#include - -//#define NDEBUG -#include - -#include "ext2fs.h" - -/* FUNCTIONS ***************************************************************/ - -struct ext2_group_desc* Ext2LoadGroupDesc(PDEVICE_EXTENSION DeviceExt, - ULONG block_group) -{ - struct ext2_group_desc* buffer; - ULONG block; - struct ext2_group_desc* gdp; - - buffer = ExAllocatePool(NonPagedPool, BLOCKSIZE); - - block = block_group / (BLOCKSIZE / sizeof(struct ext2_group_desc)); - - Ext2ReadSectors(DeviceExt->StorageDevice, - 2 + block, - 1, - buffer); - - gdp = &buffer[block_group % (BLOCKSIZE / sizeof(struct ext2_group_desc))]; - - DPRINT("gdp->bg_free_blocks_count %d\n",gdp->bg_free_blocks_count); - DPRINT("gdp->bg_inode_table %d\n",gdp->bg_inode_table); - - return(gdp); - -} - -#define INODES_PER_PAGE (PAGE_SIZE / sizeof(struct ext2_inode)) -#define INODES_PER_BLOCK (BLOCKSIZE / sizeof(struct ext2_inode)) - -VOID Ext2LoadInode(PDEVICE_EXTENSION DeviceExt, - ULONG ino, - PEXT2_INODE Inode) -{ - ULONG block_group; - struct ext2_group_desc* gdp; - ULONG offset; - ULONG dsec; - BOOLEAN Uptodate; - struct ext2_inode* ibuffer; - - DPRINT("Ext2LoadInode(DeviceExt %x, ino %d, Inode %x)\n", - DeviceExt, ino, Inode); - - block_group = (ino - 1) / DeviceExt->superblock->s_inodes_per_group; - - DPRINT("block_group %d\n",block_group); - - gdp = Ext2LoadGroupDesc(DeviceExt, block_group); - - offset = (ino - 1) % DeviceExt->superblock->s_inodes_per_group; - - DPRINT("offset %d\n", offset); - - dsec = (gdp->bg_inode_table + (offset / INODES_PER_BLOCK)) * BLOCKSIZE; - - DPRINT("dsec %d (dsec/BLOCKSIZE) %d PAGE_ROUND_DOWN(dsec) %d\n", - dsec, (dsec/BLOCKSIZE), PAGE_ROUND_DOWN(dsec)); - - CcRequestCachePage(DeviceExt->Bcb, - PAGE_ROUND_DOWN(dsec), - &Inode->BaseAddress, - &Uptodate, - &Inode->CacheSeg); - DPRINT("PAGE_ROUND_DOWN(dsec)/BLOCKSIZE %d\n", - PAGE_ROUND_DOWN(dsec)/BLOCKSIZE); - if (!Uptodate) - { - Ext2ReadSectors(DeviceExt->StorageDevice, - PAGE_ROUND_DOWN(dsec) / BLOCKSIZE, - 4, - Inode->BaseAddress); - } - ibuffer = ((struct ext2_inode *)Inode->BaseAddress) + - (dsec - PAGE_ROUND_DOWN(dsec)); - DPRINT("Inode->BaseAddress 0x%x ibuffer 0x%x\n", - Inode->BaseAddress, ibuffer); - Inode->inode = &ibuffer[offset % INODES_PER_PAGE]; - - DPRINT("inode->i_uid %d\n",Inode->inode->i_uid); - DPRINT("inode->i_links_count %d\n",Inode->inode->i_links_count); - DPRINT("inode->i_blocks %d\n",Inode->inode->i_blocks); - - DPRINT("Ext2LoadInode() finished\n"); -} - -VOID Ext2ReleaseInode(PDEVICE_EXTENSION DeviceExt, - PEXT2_INODE Inode) -{ - CcReleaseCachePage(DeviceExt->Bcb, - Inode->CacheSeg, - TRUE); - Inode->CacheSeg = NULL; - Inode->BaseAddress = NULL; - Inode->inode = NULL; -} - -VOID Ext2ReadInode(PDEVICE_EXTENSION DeviceExt, - ULONG ino, - struct ext2_inode* inode) -{ - ULONG block_group; - struct ext2_group_desc* gdp; - ULONG offset; - struct ext2_inode* buffer; - - DPRINT("Ext2ReadInode(DeviceExt %x, ino %d, inode %x)\n", - DeviceExt,ino,inode); - - block_group = (ino - 1) / DeviceExt->superblock->s_inodes_per_group; - - gdp = Ext2LoadGroupDesc(DeviceExt, block_group); - - - - offset = (ino - 1) % DeviceExt->superblock->s_inodes_per_group; - - buffer = ExAllocatePool(NonPagedPool, BLOCKSIZE); - Ext2ReadSectors(DeviceExt->StorageDevice, - gdp->bg_inode_table + (offset / INODES_PER_BLOCK), - 1, - buffer); - memcpy(inode,&buffer[offset % INODES_PER_BLOCK],sizeof(struct ext2_inode)); - - DPRINT("inode->i_uid %d\n",inode->i_uid); - DPRINT("inode->i_links_count %d\n",inode->i_links_count); - DPRINT("inode->i_blocks %d\n",inode->i_blocks); - -} diff --git a/rosapps/ext2/quota.c b/rosapps/ext2/quota.c deleted file mode 100644 index 2db7af0fed6..00000000000 --- a/rosapps/ext2/quota.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/quota.c - * PURPOSE: Quota support - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include -#include - -//#define NDEBUG -#include - -#include "ext2fs.h" - -/* FUNCTIONS ****************************************************************/ - -NTSTATUS STDCALL -Ext2QueryQuota(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - NTSTATUS Status; - - Status = STATUS_NOT_IMPLEMENTED; - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); -} - -NTSTATUS STDCALL -Ext2SetQuota(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - NTSTATUS Status; - - Status = STATUS_NOT_IMPLEMENTED; - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); -} diff --git a/rosapps/ext2/rw.c b/rosapps/ext2/rw.c deleted file mode 100644 index 1788408eded..00000000000 --- a/rosapps/ext2/rw.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/super.c - * PURPOSE: ext2 filesystem - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include - -#define NDEBUG -#include - -#include "ext2fs.h" - -/* FUNCTIONS *****************************************************************/ - -NTSTATUS Ext2ReadPage(PDEVICE_EXTENSION DeviceExt, - PEXT2_FCB Fcb, - PVOID Buffer, - ULONG Offset) -{ - ULONG block, i; - - for (i=0; i<4; i++) - { - block = Ext2BlockMap(DeviceExt, - Fcb->i.inode, - Offset + i); - Ext2ReadSectors(DeviceExt->StorageDevice, - block, - 1, - Buffer + (i*BLOCKSIZE)); - } - return(STATUS_SUCCESS); -} - -NTSTATUS Ext2ReadFile(PDEVICE_EXTENSION DeviceExt, - PFILE_OBJECT FileObject, - PVOID Buffer, - ULONG Length, - LARGE_INTEGER OffsetL) -{ - PVOID BaseAddress; - BOOLEAN Uptodate = FALSE; - PCACHE_SEGMENT CacheSeg; - ULONG Offset = (ULONG)OffsetL.u.LowPart; - PEXT2_FCB Fcb; - ULONG block, i, Delta; - DPRINT("Ext2ReadFile(DeviceExt %x, FileObject %x, Buffer %x, Length %d, \n" - "OffsetL %d)\n",DeviceExt,FileObject,Buffer,Length,(ULONG)OffsetL); - - Fcb = (PEXT2_FCB)FileObject->FsContext; - - Ext2LoadInode(DeviceExt, - Fcb->inode, - &Fcb->i); - - if (Offset >= Fcb->i.inode->i_size) - { - DPRINT("Returning end of file\n"); - return(STATUS_END_OF_FILE); - } - if ((Offset + Length) > Fcb->i.inode->i_size) - { - Length = Fcb->i.inode->i_size - Offset; - } - - Ext2ReleaseInode(DeviceExt, - &Fcb->i); - - if ((Offset % PAGE_SIZE) != 0) - { - Delta = min(PAGE_SIZE - (Offset % PAGE_SIZE),Length); - CcRequestCachePage(Fcb->Bcb, - Offset, - &BaseAddress, - &Uptodate, - &CacheSeg); - if (Uptodate == FALSE) - { - Ext2ReadPage(DeviceExt, - Fcb, - BaseAddress, - Offset / BLOCKSIZE); - } - memcpy(Buffer, BaseAddress + (Offset % PAGE_SIZE), Delta); - CcReleaseCachePage(Fcb->Bcb, - CacheSeg, - TRUE); - Length = Length - Delta; - Offset = Offset + Delta; - Buffer = Buffer + Delta; - } - CHECKPOINT; - for (i=0; i<(Length/PAGE_SIZE); i++) - { - CcRequestCachePage(Fcb->Bcb, - Offset, - &BaseAddress, - &Uptodate, - &CacheSeg); - if (Uptodate == FALSE) - { - Ext2ReadPage(DeviceExt, - Fcb, - BaseAddress, - (Offset / BLOCKSIZE)); - } - memcpy(Buffer, BaseAddress, PAGE_SIZE); - CcReleaseCachePage(Fcb->Bcb, - CacheSeg, - TRUE); - Length = Length - PAGE_SIZE; - Offset = Offset + PAGE_SIZE; - Buffer = Buffer + PAGE_SIZE; - } - CHECKPOINT; - if ((Length % PAGE_SIZE) != 0) - { - CcRequestCachePage(Fcb->Bcb, - Offset, - &BaseAddress, - &Uptodate, - &CacheSeg); - if (Uptodate == FALSE) - { - Ext2ReadPage(DeviceExt, - Fcb, - BaseAddress, - (Offset / BLOCKSIZE)); - } - DPRINT("Copying %x to %x Length %d\n",BaseAddress,Buffer,Length); - memcpy(Buffer,BaseAddress,Length); - CcReleaseCachePage(Fcb->Bcb, - CacheSeg, - TRUE); - } - CHECKPOINT; - - return(STATUS_SUCCESS); -} - - -NTSTATUS STDCALL -Ext2Write(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - DPRINT("Ext2Write(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; - Irp->IoStatus.Information = 0; - return(STATUS_UNSUCCESSFUL); -} - -NTSTATUS STDCALL -Ext2FlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - DPRINT("Ext2FlushBuffers(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED; - Irp->IoStatus.Information = 0; - return(STATUS_UNSUCCESSFUL); -} - -NTSTATUS STDCALL -Ext2Shutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - DPRINT("Ext2Shutdown(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED; - Irp->IoStatus.Information = 0; - return(STATUS_UNSUCCESSFUL); -} - -NTSTATUS STDCALL -Ext2Cleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - DbgPrint("Ext2Cleanup(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED; - Irp->IoStatus.Information = 0; - - DbgPrint("Ext2Cleanup() finished\n"); - - return(STATUS_UNSUCCESSFUL); -} - -NTSTATUS STDCALL -Ext2Read(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - ULONG Length; - PVOID Buffer; - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - PFILE_OBJECT FileObject = Stack->FileObject; - PDEVICE_EXTENSION DeviceExt = DeviceObject->DeviceExtension; - NTSTATUS Status; - - DPRINT("Ext2Read(DeviceObject %x, FileObject %x, Irp %x)\n", - DeviceObject, FileObject, Irp); - - Length = Stack->Parameters.Read.Length; - CHECKPOINT; - Buffer = MmGetSystemAddressForMdl(Irp->MdlAddress); - CHECKPOINT; - CHECKPOINT; - - Status = Ext2ReadFile(DeviceExt,FileObject,Buffer,Length, - Stack->Parameters.Read.ByteOffset); - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = Length; - IoCompleteRequest(Irp,IO_NO_INCREMENT); - - return(Status); -} diff --git a/rosapps/ext2/security.c b/rosapps/ext2/security.c deleted file mode 100644 index 3862816a48d..00000000000 --- a/rosapps/ext2/security.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/security.c - * PURPOSE: Security support - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include -#include - -//#define NDEBUG -#include - -#include "ext2fs.h" - -/* FUNCTIONS ****************************************************************/ - -NTSTATUS STDCALL -Ext2QuerySecurity(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - DPRINT("Ext2QuerySecurity(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED; - Irp->IoStatus.Information = 0; - return(STATUS_UNSUCCESSFUL); -} - -NTSTATUS STDCALL -Ext2SetSecurity(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - DPRINT("Ext2SetSecurity(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED; - Irp->IoStatus.Information = 0; - return(STATUS_UNSUCCESSFUL); -} diff --git a/rosapps/ext2/super.c b/rosapps/ext2/super.c deleted file mode 100644 index 43f921d0341..00000000000 --- a/rosapps/ext2/super.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/ext2/super.c - * PURPOSE: ext2 filesystem - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include - -//#define NDEBUG -#include - -#include "ext2fs.h" - -/* GLOBALS *****************************************************************/ - -static PDRIVER_OBJECT DriverObject; - -/* FUNCTIONS ****************************************************************/ - -NTSTATUS STDCALL -Ext2Close(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - PIO_STACK_LOCATION Stack; - PFILE_OBJECT FileObject; - PDEVICE_EXTENSION DeviceExtension; - NTSTATUS Status; - PEXT2_FCB Fcb; - - DbgPrint("Ext2Close(DeviceObject %x, Irp %x)\n",DeviceObject,Irp); - - Stack = IoGetCurrentIrpStackLocation(Irp); - FileObject = Stack->FileObject; - DeviceExtension = DeviceObject->DeviceExtension; - - if (FileObject == DeviceExtension->FileObject) - { - Status = STATUS_SUCCESS; - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); - } - - Fcb = (PEXT2_FCB)FileObject->FsContext; - if (Fcb != NULL) - { - if (Fcb->Bcb != NULL) - { - CcRosReleaseFileCache(FileObject, Fcb->Bcb); - } - ExFreePool(Fcb); - FileObject->FsContext = NULL; - } - - Status = STATUS_SUCCESS; - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); -} - -NTSTATUS Ext2Mount(PDEVICE_OBJECT DeviceToMount) -{ - PDEVICE_OBJECT DeviceObject; - PDEVICE_EXTENSION DeviceExt; - PVOID BlockBuffer; - struct ext2_super_block* superblock; - - DPRINT("Ext2Mount(DeviceToMount %x)\n",DeviceToMount); - - BlockBuffer = ExAllocatePool(NonPagedPool,BLOCKSIZE); - Ext2ReadSectors(DeviceToMount, - 1, - 1, - BlockBuffer); - superblock = BlockBuffer; - - if (superblock->s_magic != EXT2_SUPER_MAGIC) - { - ExFreePool(BlockBuffer); - return(STATUS_UNRECOGNIZED_VOLUME); - } - DPRINT("Volume recognized\n"); - DPRINT("s_inodes_count %d\n",superblock->s_inodes_count); - DPRINT("s_blocks_count %d\n",superblock->s_blocks_count); - - IoCreateDevice(DriverObject, - sizeof(DEVICE_EXTENSION), - NULL, - FILE_DEVICE_FILE_SYSTEM, - 0, - FALSE, - &DeviceObject); - DPRINT("DeviceObject %x\n",DeviceObject); - DeviceObject->Flags = DeviceObject->Flags | DO_DIRECT_IO; - DeviceExt = (PVOID)DeviceObject->DeviceExtension; - DPRINT("DeviceExt %x\n",DeviceExt); - - DeviceExt->StorageDevice = DeviceToMount; - DeviceExt->StorageDevice->Vpb->DeviceObject = DeviceObject; - DeviceExt->StorageDevice->Vpb->RealDevice = DeviceExt->StorageDevice; - DeviceExt->StorageDevice->Vpb->Flags |= VPB_MOUNTED; - DeviceObject->StackSize = DeviceExt->StorageDevice->StackSize + 1; - DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; - - DPRINT("DeviceExt->StorageDevice %x\n", DeviceExt->StorageDevice); - DeviceExt->FileObject = IoCreateStreamFileObject(NULL, DeviceObject); - DeviceExt->superblock = superblock; - CcRosInitializeFileCache(DeviceExt->FileObject, - &DeviceExt->Bcb, - PAGE_SIZE * 3); - - DPRINT("Ext2Mount() = STATUS_SUCCESS\n"); - - return(STATUS_SUCCESS); -} - -NTSTATUS STDCALL -Ext2FileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - PVPB vpb = Stack->Parameters.Mount.Vpb; - PDEVICE_OBJECT DeviceToMount = Stack->Parameters.Mount.DeviceObject; - NTSTATUS Status; - - Status = Ext2Mount(DeviceToMount); - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); -} - -NTSTATUS STDCALL -DriverEntry(PDRIVER_OBJECT _DriverObject, - PUNICODE_STRING RegistryPath) -/* - * FUNCTION: Called by the system to initalize the driver - * ARGUMENTS: - * DriverObject = object describing this driver - * RegistryPath = path to our configuration entries - * RETURNS: Success or failure - */ -{ - PDEVICE_OBJECT DeviceObject; - NTSTATUS ret; - UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\Ext2Fsd"); - - DbgPrint("Ext2 FSD 0.0.1\n"); - - DriverObject = _DriverObject; - - ret = IoCreateDevice(DriverObject, - 0, - &DeviceName, - FILE_DEVICE_FILE_SYSTEM, - 0, - FALSE, - &DeviceObject); - if (ret!=STATUS_SUCCESS) - { - return(ret); - } - - DeviceObject->Flags=0; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = Ext2Close; - DriverObject->MajorFunction[IRP_MJ_CREATE] = Ext2Create; - DriverObject->MajorFunction[IRP_MJ_READ] = Ext2Read; - DriverObject->MajorFunction[IRP_MJ_WRITE] = Ext2Write; - DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = - Ext2FileSystemControl; - DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = - Ext2DirectoryControl; - DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = - Ext2QueryInformation; - DriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = Ext2SetInformation; - DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = Ext2FlushBuffers; - DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = Ext2Shutdown; - DriverObject->MajorFunction[IRP_MJ_CLEANUP] = Ext2Cleanup; - DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] = Ext2QuerySecurity; - DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = Ext2SetSecurity; - DriverObject->MajorFunction[IRP_MJ_QUERY_QUOTA] = Ext2QueryQuota; - DriverObject->MajorFunction[IRP_MJ_SET_QUOTA] = Ext2SetQuota; - - DriverObject->DriverUnload = NULL; - - IoRegisterFileSystem(DeviceObject); - - return(STATUS_SUCCESS); -} -