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