Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Installable File System
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{short description|Filesystem API}} The '''Installable File System''' ('''IFS''') is a [[filesystem API]] in [[MS-DOS]]/[[PC DOS]] 4.x, [[IBM]] [[OS/2]] and [[Microsoft Windows]] that enables the [[operating system]] to recognize and load [[software driver|driver]]s for [[file system]]s. == History == When [[IBM]] and [[Microsoft]] were co-developing OS/2, they realized that the [[FAT file system]] did not offer some of the features modern OSes would require, and Microsoft began developing the [[High Performance File System]] (HPFS), codenamed ''Pinball''. Instead of coding it inside the kernel, as FAT was, Microsoft developed a "driver-based" filesystem API that could allow them and other developers to add new filesystems to the kernel without needing to modify it. When Microsoft stopped working on OS/2, IBM continued using the IFS interface and Microsoft implemented a similar one in Windows NT. ==Implementations== === {{anchor|DOS|IFSFUNC}}IFS in DOS 4.x === {{expand section|date=November 2016}} ===IFS in OS/2=== The IFS provided a basic and powerful interface for programming filesystems. It was introduced in 1989 in OS/2 1.20, along with the HPFS filesystem. Filesystem drivers executed in kernel-space ([[ring 0 (computer security)|ring 0]]) and are divided in four principal pieces: microIFS, miniIFS, IFS, helpers. Only the IFS and the filesystem code itself is required and it is loaded via an "[[IFS (CONFIG.SYS directive)|IFS]]=" statement in the [[CONFIG.SYS]] file. It is a [[New Executable|NE]] [[16-bit]] [[dynamically loaded library]]. No matter if it is a [[32-bit]] OS/2 (2.0 and newer), the IFS is always 16-bit (although extraofficially you can make a 32-bit IFS). The microIFS is a piece of code that loads in memory the kernel and the miniIFS and jumps to kernel execution. It is usually in the boot portion of the filesystem. The miniIFS is a piece of code that is called by the kernel to load the first IFS statement that appears in the CONFIG.SYS file, so the first IFS statement must be the boot's filesystem for the system to be able to boot. The helpers are 16-bit (for OS/2 1.x) or 32-bit (for OS/2 2.x and up), are executed in user-space ([[Ring 3 (computer security)|ring 3]]) and contain the code used for typical filesystem maintenance, and are called by <code>[[CHKDSK]]</code> and <code>[[disk formatting|FORMAT]]</code> utilities. This four-piece scheme allowed developers to dynamically add a new bootable filesystem, as the [[ext2]] driver for OS/2 demonstrated. [[CD-ROM]] filesystem driver ([[ISO 9660]]) was added in OS/2 2.0, [[Universal Disk Format|UDF]] was added in OS/2 4.0 and [[IBM Journaled File System 2 (JFS2)|JFS]] was added in OS/2 4.5. [[ArcaOS]], the latest packaging of OS/2, has a number of filesystem drivers available, including FAT32.<ref>{{cite web|url=https://www.arcanoae.com/wiki/fat32/|title=FAT32 Installable File System Driver|access-date=2020-09-04}}</ref> There was also an official 32-bit HPFS IFS, called [[HPFS386]] that improved performance and added some features, like variable size cache and [[Access Control Lists]], and was available only in certain OS/2 server editions. The FAT filesystem was never removed from the kernel and officially never an IFS, although there are FAT IFS that added features like [[long filename|long file names]] (LFNs), [[FAT32]] support, etc. Network file-sharing protocols like [[Network File System (protocol)|NFS]] and [[Server Message Block|SMB]] are also implemented using IFS, and the IFS interface never changed. ===IFS in Windows 3.11 and 9x=== '''IFSHLP.SYS''' (the '''Installable File System''' Helper) is an [[MS-DOS]] device driver that was first released as part of Microsoft [[Windows for Workgroups]] 3.11. It enables native [[32-bit file access]] in [[Windows_3.0#Memory_modes|Windows 386 Enhanced Mode]] by bypassing the 16-bit DOS API and ensuring that no other [[real mode]] driver intercepts [[INT 21h]] calls. The protected mode counterpart of IFSHLP.SYS is [[IFSMGR.386]] in Windows 3.11 and [[IFSMGR.VXD]] in Windows 95 and Windows 98. <ref>{{cite web|url=http://madsenworld.dk/con_auto/index-uk.htm#14a|title=Guide to CONFIG.SYS & AUTOEXEC.BAT|author=Peter H. S. Madsen}}</ref><ref>{{cite book |url=https://books.google.com/books?dq=isbn%3A9781565922006&q=IFSHLP |title=Google Books search results for IFSHLP|access-date=2011-04-13}}</ref> ===IFS in Windows NT=== The IFS API is part of the [[Windows Driver Kit]]. When Microsoft stopped developing OS/2 and concentrated on what was then called OS/2 NT, they took the IFS ideas with it, along with the HPFS filesystem. Instead of being a four-piece scheme, NT IFS was redesigned into a two-piece scheme. microIFS and miniIFS were removed from the scheme. IFS and helpers remain as the same, but later, in Windows NT 4.0, a [[defragmentation]] helper (DEFRAG) was added. Microsoft's original NTLDR was coded for loading the NT kernel from FAT, [[High Performance File System|HPFS]] or [[NTFS]], but subsequent versions dropped HPFS support. All of the drivers and helpers became 32-bit [[Portable Executable|PE executables]]. The FAT file system was moved out of the Kernel to an IFS and was heavily optimized for performance, taking advantage of the 32-bit processing capabilities (being called [[FASTFAT]]). Original Windows NT 3.1 incorporated FAT, HPFS (Pinball) and the newly created NTFS drivers, along with a new and improved CD-ROM filesystem driver that incorporated long file names using the [[Joliet (file system)|Microsoft Joliet]] filesystem. Windows NT 3.51 added per-file compression to NTFS and to the IFS interface. In Windows NT 4.0 HPFS was removed. In Windows 2000 FASTFAT was updated to support FAT32 and [[Universal Disk Format|UDF]] was added. Windows 2000 modified the IFS interface to add per-file encryption. Network file-sharing protocols and antivirus are also implemented using IFS 'file system filter' drivers which intercept file I/O operations.<ref>{{cite web | url=https://docs.microsoft.com/en-us/windows-hardware/drivers/ifs/about-file-system-filter-drivers | title=About file system filter drivers - Windows drivers | date=15 December 2021 }}</ref> [[Apple Inc.|Apple]] started including read only [[HFS+]] drivers in [[Mac OS X 10.6]]'s version of [[Boot Camp (software)|Boot Camp]]<ref>{{cite web|title=Snow Leopard's Boot Camp Includes HFS + Windows Drivers|date=6 May 2009 |url=http://www.macrumors.com/2009/05/06/snow-leopards-boot-camp-includes-hfs-windows-drivers/|access-date=14 September 2012}}</ref> for use in [[Windows XP]], [[Windows Vista]], and [[Windows 7]]. ==Further reading== *{{cite book|author=Rajeev Nagar|title=Windows NT File System Internals, A Developer's Guide|year=1997|isbn=1-56592-249-2|publisher=O'Reilly}} *{{cite book|author=Helen Custer|title=Inside Windows NT File System|year=1994|isbn=1-55615-660-X|publisher=Microsoft Press}} *{{cite book|author=Helen Custer|title=Inside Windows NT|year=1993|isbn=1-55615-481-X|publisher=Microsoft Press}} ==See also== * [[Virtual file system]] * [[List of file systems]] * [[Comparison of file systems]] * [[Network redirector]] * [[Dokan Library]] ==References== {{Reflist}} ==External links== * [https://docs.microsoft.com/windows-hardware/drivers/ifs/ File systems driver design guide] at [[Microsoft Docs]] === ext2/ext3/ext4 === * [[Ext2Fsd]] is a [[GNU General Public License|GPL]] file system driver for Windows 2000 to Windows 8 (32Bit and 64Bit); it supports writing/multiple codepages, ext3 htree, journal since version 0.50 available * [https://web.archive.org/web/20100116125644/http://uranus.chrysocome.net/linux/ext2ifs.htm ext2 IFS for Windows NT] (Read only) * [[Ext2IFS]] / [http://www.fs-driver.org/ Another ext2-3 IFS for Windows NT/2000/XP/2003] (Read/Write; support for UTF-8 file names and ext3 htree; ext3 journal not supported ) === ReiserFS === * [http://rfsd.sf.net/ ReiserFS IFS for Windows NT] (Read only) === HFS === * [https://web.archive.org/web/20150510214930/http://macdrive.com/ Commercial HFS IFS for Windows NT] === OS/2 === * [https://web.archive.org/web/20150110193853/http://www.student.nada.kth.se/~f96-bet/HFS/ HFS IFS for OS/2] * [http://www.dsteiner.com/products/software/os2/vfat.htm NTFS and FAT IFS for OS/2] {{Webarchive|url=https://web.archive.org/web/20170620004724/http://www.dsteiner.com/products/software/os2/vfat.htm |date=2017-06-20 }} * [http://hobbes.nmsu.edu/h-browse.php?dir=/pub/os2/system/drivers/filesys FTP server offering IFS drivers for OS/2] {{Webarchive|url=https://web.archive.org/web/20170502082453/http://hobbes.nmsu.edu/h-browse.php?dir=%2Fpub%2Fos2%2Fsystem%2Fdrivers%2Ffilesys |date=2017-05-02 }} === Other === * [https://callbacktechnologies.com/cbfsstorage/ CBFS Storage] - cross-platform single-file virtual filesystem with encryption and compression * [https://callbacktechnologies.com/cbfsconnect/ CBFS Connect] - SDK that lets developers create installable virtual file systems for Windows in user mode * [https://github.com/microsoft/Windows-driver-samples/tree/main/filesys/miniFilter/minispy MiniSpy Sample] - a Windows filter driver sample from Microsoft * [https://www.easefilter.com/kb/minifilter-framework.htm EaseFilter] - a file system filter driver framework for developers in Windows user mode * [http://www.acc.umu.se/~bosse/ RomFS] - Windows driver examples * [https://web.archive.org/web/20141217230958/http://palissimo.de/ WinFUSE] - a .NET based Filesystem in USErspace framework that uses SMB instead of IFS * [https://dokan-dev.github.io/ Dokany] - an MIT-licensed framework for filesystems in Windows userspace that uses a separate kernel driver, with available .NET bindings {{Windows Components}} {{OS/2}} [[Category:Computer file systems]] [[Category:IBM file systems]] [[Category:OS/2]] [[Category:Microsoft application programming interfaces]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Anchor
(
edit
)
Template:Cite book
(
edit
)
Template:Cite web
(
edit
)
Template:Expand section
(
edit
)
Template:OS/2
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Webarchive
(
edit
)
Template:Windows Components
(
edit
)