#ifndef _DISK_20090310_H_
#define _DISK_20090310_H_

#ifdef _WINDOWS_
	#pragma pack(push, 1)
#endif

typedef struct tagFAT32
{
	BYTE  bysOperationSystemVesrion[8]; //操作系统的版本号，8个字节
	WORD  wBytesPerSector;//每个扇区的字节数，2个字节
	BYTE  bySectorsPerCu;//每族扇区数，1字节
	WORD  wSectorsReserved;//为操作系统保留的扇区数，2字节
	BYTE  byFats;//FAT表的个数，1字节
	WORD  wFlags;//标识系统采用的是否是FAT32，0表示是FAT32，2字节
	WORD  wReserved1;//值为0，为保持兼容性而保留，2字节
	BYTE  byStyle;//磁盘介质标志，硬盘为F8，1字节
	WORD  wReserved2;//未使用，值为0，2字节
	WORD  wSectorsPerCudao;//每个磁道的扇区数，2字节
	WORD  wHeaders;//磁盘的磁头个数，2字节
	DWORD dwHideSecoterBefore;//分区前隐藏扇区的个数，4字节
	DWORD dwTotalSectors;//逻辑磁盘中的扇区总数，4字节
	DWORD dwSectorsPerFat;//每个FAT表所占的扇区数，4字节
	WORD  wMirrorFlags;//FAT表镜像标志，0有两份互为备份的FAT32，1表示只有一份FAT32，2字节
	WORD  wFileSystemVerstion;//文件系统的主次版本，2字节
	DWORD dwStartCudaoForDir;//磁盘根目录的起始族号，4字节
	WORD  wSectorForFileSystemParam;//文件系统参数的扇区号，通常位于引导扇区的下一个扇区，2字节
	WORD  wSectorForBackupBoot;//备份分区引导扇区的逻辑扇区号，2字节
	BYTE  bysReserved3[12];//保留，12字节
	WORD  wDrives;//磁盘的物理驱动器号，2字节
	BYTE  byReadWriteRlags;//磁盘读写参数扩展标志，值为29H，1字节
	DWORD dwSerialNO; //磁盘卷的序列号，4字节
	BYTE  bysLabel[11];//磁盘卷的标号，11字节
	BYTE  bysFlags[8];//文件系统的标识号（FAT32），8字节

}FAT32, *LPFAT32;
#ifdef _WINDOWS_
	#pragma pack(pop, 1)
#endif

BOOL Kernel_ReadSecotrs(int nStartSector, int nDriver,
		int nHeader, int nMian, BYTE* pBuffer, int nSecotrs);

BOOL Kernel_WriteSecotrs(int nStartSector, int nDriver,
		int nHeader, int nMian, BYTE* pBuffer, int nSecotrs);

/*
BOOL Kernel_ReadSecotrs(int nStartSector, int nDriver,
		int nHeader, int nMian, BYTE* pBuffer, int nSecotrs)
{
	BOOL bResult = FALSE;
	int nEx  = ((nMian >> 8) << 5);

	_asm
	{
		//加载数据缓冲区的段地址
		mov ax, word ptr pBuffer + 2
		mov es, ax
		//加载数据缓冲区编移地址
		mov bx, WORD ptr pBuffer + 0

		mov dl, byte ptr nDriver //驱动器号
		mov ch, byte ptr nMian //10位柱面号的低8位
		mov cl, byte ptr nStartSector//B0~B5为起始扇号
		mov ax, word ptr nEx
		or  cl, al //10位柱面号的B8~B9位
		mov ah, 02H //功能号
		mov al, byte ptr nSecotrs //扇区数
		int 13h
		mov word ptr bResult, ax
	};

	return (bResult);
}

BOOL Kernel_WriteSecotrs(int nStartSector, int nDriver,
		int nHeader, int nMian,
		BYTE* pBuffer, int nSecotrs)
{
	return (TRUE);
}
//  BYTE buffer[512 * 20];
//	BOOL bResult = ::Kernel_ReadSecotrs(0, 
//		0x80 + ('H' - 'C'), 0, 0, buffer, 10);

*/

#endif