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