WDM/FILE SYSTEM2009.02.12 11:46

이름

변위(byte)

크기(byts)

설명

DIR_Name

0

11

짧은 이름

DIR_Attr

11

1

파일 속성:

ATTR_READ_ONLY      0x01

ATTR_HIDDEN          0x02

ATTR_SYSTEM          0x04

ATTR_VOLUME_ID      0x08

ATTR_DIRECTORY      0x10

ATTR_ARCHIVE         0x20

ATTR_LONG_NAME     ATTR_READ_ONLY|

                        ATTR_HIDDEN|

ATTR_SYSTEM|

ATTR_VOLUME_ID

속성 바이트의 상위 2비트는 예약되어 있어서 파일이 생성되어 수정된 적이 없을 때나 읽여질 항상 0이어야 한다.

DIR_NTRes

12

1

윈도우 NT 사용하기 위해 예약. 파일이 생성되어 수정된 적이 없을 때나 읽여질 0으로 설정된다.

DIR_CrtTimeTenth

13

1

밀리초 단위의 파일 생성 시각. 항목은 사실 10분의 1 단위로 되어 있다. DIR_CrtTime 초부분의 단위가 2초여서 항목은 10분의 1 단위이고 수는 0-199범위이다.

DIR_CrtTime

14

2

파일 생성 시간.

DIR_CrtDate

16

2

파일 생성 날짜.

DIR_LstAccDate

18

2

최근 접근 날짜. 최근 접근 날짜만 있지 최근 접근 시간은 없다는 것에 유의. 이것은 최근 읽기 쓰기 했던 날짜이다. 쓰기의 경우 DIR_WrtDate 같은 날짜로 설정되어야 한다.

DIR_FstClusHI

20

2

항목의 첫번째 클러스터의 상위 워드(FAT12FAT16에서는 항상0).

DIR_WrtTime

22

2

최근 시간. 파일 생성은 쓰기로 됨을 유의.

DIR_WrtDate

24

2

최근 날짜. 파일 생성은 쓰기로 됨을 유의.

DIR_FstClusLO

26

2

항목의 첫번째 클러스터 번호의 하위 워드.

DIR_FileSize

28

4

바이트 단위의 파일의 크기를 나타내는 32비트 DWORD


DIR_NAME[0]

FAT디렉토리 요소항목의 바이트(DIR_Name[0]) 대한 주의:

 

l 만약 DIR_Name[0] == 0xE5라면, 디렉토리 요소항목은 비어 있다(파일이나 디렉토리 이름이 요소항목에 없다).

l 만약 DIR_Name[0] == 0xE5라면, 디렉토리 요소항목은 비어 있고(0xE5 같다), 이후로 할당된 디렉토리 요소항목이 없다.(이후의 모든 요소항목의DIR_Name[0] 모든 바이트도 0이다).

 

0xE5보다 특히 0값은 FAT파일 체제 드라이버에 디렉토리의 나머지 요소항목이 모두 비었으니 검사될 필요가 없음을 알려준다.

 

l 만약 DIR_Name[0] == 0xE5라면, 바이트에 대한 실제 파일 이름 문자는 0xE5이다. 0xE5 사실 일본에서 쓰이는 문자집합에서 유효 간지 선두 바이트 값이다. 특히 0x05값이 쓰이면 일본용의 특별한 파일 이름은 적절히 처리될 있으며 FAT파일 체제 코드가 항목이 것으로 여기기 않게 한다.

 

DIR_Name항목은 사실 부분으로 나누어 진다 – 8문자의 이름 부분과 3문자의 확장자 부분. 부분은 0x20으로 남겨진 부분을 채운다.

 

DIR_Name[0] 0x20 아닐 수도 있다. DIR_Name에는 없지만 확장자 부분과 이름 부분사이에 암시적인 ‘.’문자가 있다. 소문자들은 DIR_Name에서 쓰이지 않는다( 문자들에 대해서는 나라마다 다르다).

 

DIR_Name에서 다음 문자들은 허용되지 않는다.

l 위에서 설명한 DIR_Name[0] 0x05 특별값을 제외한 0x20보다 작은 .

l 0x22, 0x2A, 0x2B, 0x2C, 0x2E, 0x2F, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x5B, 0x5C, 0x5D, 0x7C.

 

아래에 사용자가 입력한 이름과 DIR_Name 대응의 예가 있다.

 

“foo.bar”                           -> “FOO     BAR”

“FOO.BAR”                    -> “FOO     BAR”

“Foo.Bar”                        -> “FOO     BAR”

“foo”                                -> “FOO       

“foo.”                               -> “FOO       

“PICKLE.A”                                     -> “PICKLE  A 

“prettybg.big”                                   -> “PRETTYBGBIG”

“.big”                                -> illegal, DIR_Name[0] cannot be 0x20

 

FAT디렉토리에서 모든 이름은 유일한 것이다. 위의 처음 3 예제를 보라. 이름이 서로 다르지만 같은 파일을 참조하는 것이고 어떤 디렉토리에든 DIR_Name “FOO     BAR” 설정된 파일만이 하나 있을 있을 뿐이다.

 

DIR_Attr 파일의 속성을 설정한다.

 

         ATTR_READ_ONLY              파일 쓰기가 않된다.

         ATTR_HIDDEN                       표준 디렉토리 리스트시 파일은 보이지 않는다.

         ATTR_SYSTEM                       파일은 운영체제 파일이다.

ATTR_VOLUME_ID                  속성이 설정된 파일은 볼륨내에 단지 하나만 있어야 하며, 반드시 루트 디렉토리에 있어야 한다. 파일의 이름은 사실은 볼륨 라벨이다. DIR_FstClusHI DIR_FSTClusLO 항상 0이어야 한다( 볼륨 라벨 파일에는 데이터 클러스터가 할당되지 않는다).

         ATTR_DIRECTORY               파일은 사실 다른 파일을 담는 용기이다.

ATTR_ARCHIVE                                    속성은 백업 유틸리티를 지원한다. 비트는 파일이 생성되고 재명되고 쓰여질 FAT파일 체제 드라이버가 설정한다. 백업 유틸리티는 속성을 이용하여 볼륨상의 어떤 파일이 최종적으로 백업이 수행된 이래 수정되었는지를 나타낸다.

 

ATTR_LONG_NAME속성 비트 조합은 파일 실제로 다른 파일의 이름 요소 항목의 일부라는 것을 나타낸다. 속성의 조합에 대한 많은 정보에 대해서는 FAT 이름 사양 문서를 보라.

 

디렉토리가 생성될 , DIR_Attr항목에서 ATTR_DIRECTORY비트가 설정된 파일이 생성될 DIR_FileSize 0으로 되어야 한다. ATTR_DIRECTORY 0 파일에서 DIR_FileSize 쓰이지 않으며 항상 0이다(디렉토리는 단지 EOC표식된 클러스터로 끝나는 클러스터 연결을 추적하는 것으로 크기가 결정된다). 클러스터가 디렉토리에 할당되며(FAT12/FAT16에서의 루트 디렉토리가 아니라면), DIR_FstClusLO DIRFstClusHI 할당된 클러스터 번호로 설정하고 FAT상의 클러스터 요소항목에 EOC표식을 한다. 다음으로 클러스터의 모든 바이트를 0으로 초기화한다. 루트 디렉토리라면 그럴 필요가 없다(루트 디렉토리에는 . ..요소항목이 없다). 루트 디렉토리가 아니라면, 32비트 디렉토리 요소항목에 2 개의 특별한 요소항목을 생성할 필요가 있다( 할당된 클러스터의 데이터 영역의 32비트 요소항목).

 

첫번째 디렉토리 요소항목은 DIR_Name

“.           

 

두번째 디렉토리 요소항목은 DIR_Name

“..          

 

으로 설정된다.

 

이것들은 점과 점점 요소항목이라 불린다. 요소항목중의 DIR_FileSize항목은 0으로 설정되고 생성 시간과 날짜 항목은 생성된 디렉토리와 같이 설정된다. 이제 점요소항목(첫번째 ) 대한 DIR_FstClusLO DIR_FstClusHI 디렉토리 요소항목의 디렉토리에 대한 요소항목과 같은 값으로 설정한다(점과 점점 요소항목을 갖고 있는 클러스터의 번호)

 

마지막으로 점점 요소항목에 대한 DIR_FstClusLO DIR_FstClusHI 생성된 디렉토리를 갖는 디렉토리의 클러스터 번호로 설정한다(FAT32볼륨상에서 이것이 루트 디렉토리라면 값은 0이다).

 

아래는 점과 점점 요소항목에 대한 요약이다.

l 요소항목은 자기자신을 가리키는 디렉토리이다.

l 점점 요소항목은 자신의 부모 디렉토리의 클러스터를 가리킨다(부모 디렉토리가  루트 디렉토리라면 값은 0).

 

날짜와 시간 형식

많은 FAT 파일 체제는 DIR_WrtTime DIR_WrtDate외의 날짜/시간을 지원하지 않는다. 이런 이유로 DIR_CrtTimeMil, DIR_CrtTime, DIR_CrtDate DIR_LstAccDate 실제로 선택적 항목들이다. 하지만 DIR_WrtTime DIR_ErtDate 반드시 있어야 한다. 다름 날짜 시간 항목이 지원되지 않는다면 파일 생성시 0으로 설정되어야 하고 파일 조작시 무시되어야 한다.

 

날짜 형식. FAT디렉토리 요소항목중 날짜는 16비트 항목으로 기본적으로 MS-DOS시대의 01/01/1980 관련되는 날짜이다. 아래는 형식이다(비트 0 16비트 워드중 최하위비트이며 비트 15 최상위비트이다):

 

                  비트 0-4: 월일, 1-31까지의 유효범위.

                  비트 5-8: , 1 = 1, 1-12까지의 유효범위.

                  비트 9-15: 1980부터의 년수. 0-127까지의 유효범위(1980-2107).

 

시간 형식. FAT디렉토리 요소항목중 시간은 16비트 항목으로 2 단위이다. 아래는 형식이다(비트 0 16비트 워드중 최하위비트이며 비트 15 최상위비트이다).

 

                  비트 0-4: 2 단위 개수, 0-29까지의 유효범위(0-58).

                  비트 5-10: , 0-59까지의 유효범위.

                  비트 1-15: , 0-23까지의 유효범위.

 

유효 시간 범위는 자정 00:00:00에서 23:59:58이다.

 

FAT 디렉토리 관련 기타 사항들.

l 이름 디렉토리 요소 항목은 모든 형태의 FAT에서 동일핟. FAT 파일 이름 사양을 보라.

l DIR_FileSize 32비트 항목이다. FAT32볼륨의 경우 FAT파일체제 드라이버는 0x100000000바이트보다 클러스터 연결을 생성해서는 않되며 클러스터 연결의 마지막 클러스터의 마지막 바이트는 파일에 할당되어서는 않된다. 그렇게 해서 어떤 파일도 크기가 0xFFFFFFFF바이트를 넘지 않는다. 이것은 모든FAT파일 체제의 기초적인 제한이다. FAT볼륨상에서의 파일의 최대 허용 크기는0xFFFFFFFF(4,294,967,295)바이트이다.

l 비슷하게, FAT파일체제 드라이버는 디렉토리(사실 다른 파일을 담은 용기인 파일) 65536*32(2,097,152)바이트보다 커지는 것을 허용해서는 않된다.

 

 

유의: 제한은 디렉토리내의 파일수에 적용되지 않는다. 제한은 디렉토리 자체의 크기에 달려있지 디렉토리의 내용과는 아무 관련이 없다. 제한에 대한 2가지 이유가 있다.

 

1.       FAT디렉토리는 저장되거나 색인되지 않기 때문에, 거대한 디렉토리를 생성하는 것은 좋지 않은 생각이다; 그렇지 않으면 요소항목을 생성하는 것과 같은 조작은 매우 느릴 것이다(디렉토리내에 이름이 존재하지 않은지 확인하기 위해 모든 요소항목을 검사해야 한다).

2.       16비트 WORD 변수로 디렉토리내의 요소항목을 세는 FAT파일체제와 디스크 유틸리티들이 마이크로소프트를 포함해 매우 많다. 이런 이유로 디렉토리는 16비트 이상의 요소항목을 가질 없다.

 

사양 호응

사양의 적용은 FAT참조 운영체제상의 테스트에 의해 정의되었다. FAT 참조 운영제체는 마이크로소프트 윈도우 98 마이크로소프트 윈도우 2000(NT기술에 기반한)이다.

 

만일 참조 운영체제가 볼륨을 탑재하고 제공된 디스크 도구(윈도우 2000Chkdsk.exe 윈도우 98 Sandisk.exe) 에러를 검사하여 에러를 찾을 없다면 당신의 FAT 볼륨은 사양에 호응한다. 기본 절차는 시스템이나 도구를 이용하여 FAT볼륨을 만든 디스크나 혹은 도식 드라이브용 디스크 매체를 옭겨 참조 운영체제를 실행하고 있는 컴퓨터에서 테스트해보는 것이다.

Posted by 쫑경
TAG FAT32
WDM/FILE SYSTEM2009.02.05 13:13

이름

변위(byte)

크기(byts)

설명

BPB_FATSz32

36

4

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. 이것은 FAT 갖는 FAT32 32비트 섹터수이다. BPB_FATSz16 0이어야 한다.

BPB_ExtFlags

40

2

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다.

비트 0-3  활동 FAT 번호(0부터 시작). 반영(mirroing) 잠길때만 유효.

비트 4-6  예약

비트  7   – 0  FAT 런타임시 모든 FAT 반영됨을 의미

         -- 1 단지 FAT 활동성임을 의미; 비트 0-3에서 가리키는 .

비트  15 – 예약

BPB_FSVer

42

2

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. 상위 바이트는 주개정 번호. 하위 바이트는 부개정 번호. 이것은 FAT32 볼륨의 번호이다. 이것을 통해 볼륨을 탑재하는 오래된FAT32드라이버에 대해 걱정하지 않고서도 미래의 FAT32매체 형태를 확장하는 것이 가능하다. 문서는 번호를 0:0으로 정의한다. 만약 항목이 0 아니라면 하위판 윈도우는 볼륨을 탑재하지 않을 것이다.

유의: 디스크 유틸리티는 번호에 유의해서 자신이 지원하는 판번호보다 높은 볼륨에 대해서는 어떤 동작도 해서는 않된다. FAT32 파일 체제 드라이버는 항목을 반드시 검사하여 자신이 작성된 시기의 판번호가 아니라면 볼륨을 탑재하지 말아야 한다.

BPB_RootClus

44

4

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. 항목은 루트 디렉토리의 첫번째 클러스터의 클러스터 번호로 설정된다. 보통 2이지만 요구사항은 아니다.

유의: 루트 디렉토리의 위치를 바꾸는 디스크 유틸리티는 최선을 다해 루트 디렉토리의 첫번째 클러스터를 드라이브상의 정상 클러스터에 위치시켜야 한다( 클러스터 2, 손상되지 않았다면). 그래서 만약 항목이 사고로 0 된다면 디스크 유틸리티가 쉽게 루트 디렉토리를 찾을 있다.

BPB_FSInfo

48

2

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. FAT32 볼륨에서 예약 영역의FSINFO구조의 섹터 번호. 보통 1.

유의: 백업 부트에 FSINFO구조의 사본이 있지만, 항목에서 가리티는 사본만이 최신의 것이다.( 부트와 백업 부트 같은 FSINFO섹터를 가리킨다).

BPB_BkBootSec

50

2

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. 0 아니면 부트 레코드의 사본의 볼륨의 예약 영역에 있는 섹터 번호를 나타낸다. 보통 6이며 다른 값은 추천되지 않는다.

BPB_Reserved

52

12

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. 미래의 확장을 위해 예약됨. FAT32 볼륨을 포멧하는 코드는 항목의 바이트를 모두 0으로 채워야 한다.

BS_DrvNum

64

1

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. FAT32매체의 유일한 차이점은 항목이 부트 섹터에서 여러 변위에 있다는 것이다.

BS_Reserved1

65

1

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. FAT32매체의 유일한 차이점은 항목이 부트 섹터에서 여러 변위에 있다는 것이다.

BS_BootSig

66

1

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. FAT32매체의 유일한 차이점은 항목이 부트 섹터에서 여러 변위에 있다는 것이다.

BS_VolID

67

4

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. FAT32매체의 유일한 차이점은 항목이 부트 섹터에서 여러 변위에 있다는 것이다.

BS_VolLab

71

11

항목은 FAT32매체에서만 정의되어 있고 FAT12 FAT16매체에서는 없다. FAT32매체의 유일한 차이점은 항목이 부트 섹터에서 여러 변위에 있다는 것이다.

BS_FilSysType

82

8

항상 “FAT32     설정된다. 표의 FAT12/FAT16에서의 항목에 대한 설명을 보라. 항목은 FAT 형태 결정에 아무일도 하지 않는다.


Posted by 쫑경
TAG FAT32