Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*******************************************************************************
* * * M-Systems Confidential * * Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2001 * * All Rights Reserved * * * ******************************************************************************* * * * NOTICE OF M-SYSTEMS OEM * * SOFTWARE LICENSE AGREEMENT * * * * THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE AGREEMENT * * BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT FOR THE SPECIFIC * * TERMS AND CONDITIONS OF USE, OR CONTACT M-SYSTEMS FOR LICENSE * * ASSISTANCE: * * E-MAIL = info@m-sys.com * * * ******************************************************************************* * * * Module: FATFILT * * * * This module implements installable FAT12/16 filters. It supports up to * * SOCKETS sockets, with up to FL_MAX_DISKS_PER_SOCKET disks per socket. * * Each disk can contain up to FL_MAX_PARTS_PER_DISK partitions on it, with * * maximum depth of partition nesting in extended partitions equal to * * MAX_PARTITION_DEPTH. * * * * In order for this module to work, disks must be abs.mounted rather then * * mounted. In latter case, this module won't detect any of disk's * * partitions, and won't install FAT filters. * * * * This module uses more then 512 bytes of stack space in case if MALLOC is * * not enabled. * * * *******************************************************************************/
/*
* $Log: V:/Flite/archives/TrueFFS5/Src/FATFILT.H_V $ * * Rev 1.3 Apr 10 2001 23:54:52 oris * Removed FL_MAX_DISKS_PER_SOCKET definition. * * Rev 1.2 Apr 09 2001 15:01:00 oris * Change static allocation to dynamic allocations. * * Rev 1.1 Apr 01 2001 07:51:24 oris * New implementation of fat filter. * * Rev 1.0 19 Feb 2001 21:16:14 andreyk * Initial revision. */
#ifndef FLFF_H
#define FLFF_H
#include "dosformt.h"
#include "flreq.h"
/* number of entries in disk's partition table */
#define FL_PART_TBL_ENTRIES 4
/* max number of partitions (filesystem volumes) per disk */ #define FL_MAX_PARTS_PER_DISK (FL_PART_TBL_ENTRIES + MAX_PARTITION_DEPTH)
/*
* Generic 'initialization status' type */
typedef enum {
flStateNotInitialized = 0, flStateInitInProgress = 1, flStateInitialized = 2
} FLState;
/*
* Disk partition (filesystem volume). Multiple partitions are allowed * on the disk. */
typedef struct {
int handle; /* disk's TFFS handle */ int type; /* FAT16_PARTIT */ int flags; /* VOLUME_12BIT_FAT etc. */ FLBoolean ffEnabled; /* FAT filter is enabled on that part. */ SectorNo startSecNo; /* sectorNo where partition starts */ SectorNo sectors; /* (info) total sectors in partition */ SectorNo firstFATsecNo; /* sectorNo of 1st sector of 1st FAT */ SectorNo lastFATsecNo; /* sectorNo of last sector of 1st FAT */ SectorNo firstDataSecNo; unsigned clusterSize; /* Cluster size in sectors */
} FLffVol;
/*
* Disk with multiple partitions. Multiple disks are allowed on socket. */
typedef struct {
int handle; /* disk's TFFS handle */ FLState ffstate; /* FAT filter init. state */ int parts; /* total FAT12/16 partitions found */ FLffVol * part[FL_MAX_PARTS_PER_DISK]; SectorNo secToWatch; /* used to track disk partitioning */ char * buf; /* scratch buffer */
} FLffDisk;
/*
* Master Boot Record/Extended Boot Record of the disk */
typedef struct {
char reserved[0x1be];
struct { unsigned char activeFlag; /* 80h = bootable */ unsigned char startingHead; LEushort startingCylinderSector; char type; unsigned char endingHead; LEushort endingCylinderSector; Unaligned4 startingSectorOfPartition; Unaligned4 sectorsInPartition; } parts [FL_PART_TBL_ENTRIES];
LEushort signature; /* = PARTITION_SIGNATURE */
} flMBR;
/*
* FAT Filter API */
#if defined(ABS_READ_WRITE) && !defined(FL_READ_ONLY)
extern FLStatus ffCheckBeforeWrite (IOreq FAR2 *ioreq); extern FLStatus flffControl (int devNo, int partNo, FLState state); extern FLffDisk* flffInfo (int devNo);
#endif
#endif /* FLFF_H */
|