1A Faire :
2	finir FsdDirectoryControl.
3	tester les �critures.
4	FsdCreate doit cr�er le fichier s'il n'existe pas et que le r�pertoire parent existe,
5         et que les options d'appel lee demandent.
6
7
8fichiers sources :
9
10iface.c
11dir.c
12blockdev.c
13vfat.h
14
15
16
17fonctions visibles de l'ext�rieur (appel�es par IoCallDriver):
18  DriverEntry : iface.c
19    initialisation du driver
20    rend visibles les fonctions suivantes :
21  FsdFileSystemControl
22    r�pond aux demandes IRP_MJ_FILE_SYSTEM_CONTROL
23    monte les filesystems qu'il reconnait
24    appelle FsdHasFileSystem pour voir si le driver reconnait le filesystem.
25    puis appelle FsdMount.
26 NTSTATUS FsdCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
27    r�pond aux demandes IRP_MJ_CREATE :
28	appelle FsdOpenFile, qui remplit IoGetCurrentIrpStackLocation(Irp)->FileObject->Fcb
29	remplit Irp->IoStatus
30	appelle IoCompleteRequest
31  FsdClose
32    r�pond aux demandes IRP_MJ_CLOSE
33	appelle FsdCloseFile, qui ne fait rien actuellement.
34	remplit Irp->IoStatus
35	appelle IoCompleteRequest
36  FsdRead
37    r�pond aux demandes IRP_MJ_READ
38  FsdWrite
39    r�pond aux demandes IRP_MJ_WRITE
40  FsdQueryInformation
41    r�pond aux demandes IRP_MJ_QUERY_INFORMATION
42  FsdDirectoryControl
43    r�pond aux demandes IRP_MJ_DIRECTORY_CONTROL
44
45
46fonctions strictement internes dans iface.c :
47 ULONG Fat32GetNextCluster(PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster)
48 ULONG Fat16GetNextCluster(PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster)
49 ULONG Fat12GetNextCluster(PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster)
50 ULONG GetNextCluster(PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster)
51 ULONG FAT16FindAvailableCluster(PDEVICE_EXTENSION DeviceExt)
52 void  FAT16WriteCluster(PDEVICE_EXTENSION DeviceExt, ULONG ClusterToWrite,
53                        ULONG NewValue)
54 void  WriteCluster(PDEVICE_EXTENSION DeviceExt, ULONG ClusterToWrite,
55                   ULONG NewValue)
56 ULONG GetNextWriteCluster(PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster)
57 unsigned long ClusterToSector(PDEVICE_EXTENSION DeviceExt,
58			      unsigned long Cluster)
59 void RtlAnsiToUnicode(PWSTR Dest, PCH Source, ULONG Length)
60 void vfat_initstr(wchar_t *wstr, ULONG wsize)
61 wchar_t * vfat_wcsncat(wchar_t * dest, const wchar_t * src,size_t wstart, size_t wcount)
62 wchar_t * vfat_wcsncpy(wchar_t * dest, const wchar_t *src,size_t wcount)
63 wchar_t * vfat_movstr(wchar_t * dest, const wchar_t *src, ULONG dpos,
64                      ULONG spos, ULONG len)
65 BOOLEAN IsLastEntry(PVOID Block, ULONG Offset)
66 BOOLEAN IsDeletedEntry(PVOID Block, ULONG Offset)
67 BOOLEAN GetEntryName(PVOID Block, PULONG _Offset, PWSTR Name, PULONG _jloop,
68  PDEVICE_EXTENSION DeviceExt, PULONG _StartingSector)
69 BOOLEAN wstrcmpi(PWSTR s1, PWSTR s2)
70 BOOLEAN wstrcmpjoki(PWSTR s1, PWSTR s2)
71 NTSTATUS FindFile(PDEVICE_EXTENSION DeviceExt, PFCB Fcb,
72		  PFCB Parent, PWSTR FileToFind)
73	parcourt le r�pertoire d�crit par Parent pour trouver un fichier dans le filesystem
74	d�crit par DeviceExt.Si Parent==NULL : part de la racine du filesystem.
75	remplit Fcb si trouve elle le fichier, et renvoie STATUS_SUCCESS.
76	renvoie STATUS_UNSUCCESSFUL sinon.
77 NTSTATUS FsdCloseFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject)
78	ne fait rien, renvoie STATUS_SUCCESS.
79 NTSTATUS FsdOpenFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
80		     PWSTR FileName)
81	parcourt l'arborescence pour trouver le fichier(appelle FindFile � chaque niveau)
82	si trouv� : FileObject->FsContext = Fcb du fichier, renvoie STATUS_SUCCESS
83	sinon : renvoie STATUS_UNSUCCESSFULL
84 BOOLEAN FsdHasFileSystem(PDEVICE_OBJECT DeviceToMount)
85 NTSTATUS FsdMountDevice(PDEVICE_EXTENSION DeviceExt,
86			PDEVICE_OBJECT DeviceToMount)
87 void VFATLoadCluster(PDEVICE_EXTENSION DeviceExt, PVOID Buffer, ULONG Cluster)
88 void VFATWriteCluster(PDEVICE_EXTENSION DeviceExt, PVOID Buffer, ULONG Cluster)
89 NTSTATUS FsdReadFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
90		     PVOID Buffer, ULONG Length, ULONG ReadOffset)
91	lit Length octets d'un fichier
92 NTSTATUS FsdWriteFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
93                      PVOID Buffer, ULONG Length, ULONG WriteOffset)
94 NTSTATUS FsdMount(PDEVICE_OBJECT DeviceToMount)
95 NTSTATUS FsdGetStandardInformation(PFCB FCB, PDEVICE_OBJECT DeviceObject,
96                                   PFILE_STANDARD_INFORMATION StandardInfo);
97
98