File System Driver Creation

File System Driver Creation A file system driver (FSD) is a dynamic-link library (DLL) that exports file system entry points that map to standard Microsoft® Windows® CE file system functions, such as CreateFile and CreateDirectory. When an application calls a file system function, and the function references a file on a volume registered by the FSD, the FSD Manager maps the call to the FSD. The FSD Manager manages all system interactions with installable FSDs. The operating system (OS) provides a template for functions that you need to develop for a file system. Typically, an FSD exports a full range of functions, but you can also choose to not export an entry point for a particular file system function if you do not want that function to be available. For example, to prevent applications from creating or destroying directories inside volumes belonging to your FSD, do not include CreateDirectory and RemoveDirectory in your FSD. The FSD Manager automatically supplies stub functions for any functions that you choose not to supply for your file system. These stub functions return ERROR_NOT_SUPPORTED. As a result, if an application tries to create or remove a directory on a volume that belongs to your FSD, the call fails. In addition to exporting entry points for the file system functions, an FSD must export entry points for the FSD_MountDisk and FSD_UnmountDisk functions. The Device Manager calls FSD_MountDisk when a target device for which that FSD has been registered is inserted or removed. The FSD_MountDisk and FSD_UnmountDisk entry points are each passed a DWORD that uniquely identifies the disk being mounted. These DWORD types are passed back to the FSD Manager services that query, read, and write to that disk. To create an FSD for a hypothetical file system named MyFSD, you must create a DLL named MyFSD.dll. This DLL contains the data type definitions, header files, and functions for MyFSD. You can define the PVOLUME, PFILE, and PSEARCH data types in MyFSD.dll. Use these types to declare variables and function parameters that hold information about the mounted volume, the file, and the search handle, respectively. These data types are used throughout the FSD functions and by default, are all DWORD types. You can redefine these data types to contain any information that you need. For example, you can redefine them as pointers to customized structures. You must redefine these types before including Fsdmgr.h or the default definitions will be used. The code that compiles into MyFSD.dll must include Fsdmgr.h. This header file generates the prototypes for all of the functions that you write for your file system. If you want to define the PVOLUME, PFILE, and PSEARCH data types, do so before including Fsdmgr.h. You must also define a constant, FSDAPI, which is the name of your file system. The following code example shows how to include the header file Fsdmgr.h in MyFSD.dll. Copy // This defines a type that is a pointer to a structure containing // two DWORDs. typedef struct { DWORD first_field; DWORD second_field; } TWODWORDS, *PTWODWORDS; // In this example, only PSEARCH is redefined. // PFILE and PVOLUME will default to being defined as DWORDs. // You can define these types to be different types or the // same type, based on your FSD needs. #define PSEARCH PTWODWORDS // Now define the name of the file system. #define FSDAPI MyFSD #include <fsdmgr.h> The file system name, the prefix for all functions, and the name of the resulting DLL are all defined by the name that you specify for FSDAPI. MyFSD.dll must generate prototypes for all FSD Manager services that your FSD needs. MyFSD.dll must export entry points for all file system functions that you want to export. For each of these file system functions, the function name must be preceded by the name of your FSD, which is MyFSD_ in this example. You must also implement the MyFSD_MountDisk and MyFSD_UnmountDisk functions in MyFSD.dll. These functions are exported using the generic names FSD_MountDisk and FSD_UnmountDisk. FSD Manager uses these functions to identify MyFSD.dll as a legitimate FSD. The following code example shows how to export functions for MyFSD.dll in a module definition (.def) file. Copy LIBRARY MyFSD DESCRIPTION 'My File System for Windows CE' EXPORTS MyFSD_MountDisk MyFSD_UnmountDisk FSD_MountDisk=MyFSD_MountDisk FSD_UnmountDisk=MyFSD_UnmountDisk MyFSD_CreateDirectoryW MyFSD_RemoveDirectoryW MyFSD_GetFileAttributesW MyFSD_SetFileAttributesW MyFSD_DeleteFileW MyFSD_MoveFileW MyFSD_DeleteAndRenameFileW MyFSD_GetDiskFreeSpaceW MyFSD_Notify MyFSD_RegisterFileSystemFunction MyFSD_FindFirstFileW MyFSD_FindNextFileW MyFSD_FindClose MyFSD_CreateFileW MyFSD_ReadFile MyFSD_ReadFileWithSeek MyFSD_WriteFile MyFSD_WriteFileWithSeek MyFSD_SetFilePointer MyFSD_GetFileSize MyFSD_GetFileInformationByHandle MyFSD_FlushFileBuffers MyFSD_GetFileTime MyFSD_SetFileTime MyFSD_SetEndOfFile MyFSD_DeviceIOControl MyFSD_CloseFile MyFSD_CloseVolume The MyFSD hypothetical file system implements the full set of functions for working with a file system. You must supply the functions necessary for your file system. However, as previously mentioned, you can choose to not provide a function in your FSD. For any missing functions, FSD Manager automatically provides stub functions that return ERROR_NOT_SUPPORTED. </fsdmgr.h>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值