Full Code of microsoft/winfile for AI

master 63ec2cc425c6 cached
196 files
4.3 MB
1.1M tokens
765 symbols
1 requests
Download .txt
Showing preview only (4,489K chars total). Download the full file or copy to clipboard to get everything.
Repository: microsoft/winfile
Branch: master
Commit: 63ec2cc425c6
Files: 196
Total size: 4.3 MB

Directory structure:
gitextract_ydtylm4l/

├── .gitignore
├── CHANGES.md
├── GNUmakefile
├── LICENSE
├── Package/
│   ├── Package.appxmanifest
│   └── Package.wapproj
├── README.md
├── SECURITY.md
├── SignConfig.xml
├── Winfile.sln
├── build/
│   ├── README.md
│   ├── Winfile.default.props
│   └── Winfile.props
├── help/
│   ├── WINFILE.CHM
│   ├── ini/
│   │   └── index.html
│   └── winfile.hlp
├── nuget/
│   ├── LICENSE.txt
│   ├── VERIFICATION.txt
│   └── winfile.nuspec
├── samples/
│   └── addon/
│       ├── AddOnSample.vcxproj.filters
│       ├── AddonSample.vcxproj
│       ├── dllmain.cpp
│       ├── extproc.cpp
│       ├── resource.h
│       ├── resources.rc
│       ├── stdafx.cpp
│       ├── stdafx.h
│       ├── targetver.h
│       └── wfext.h
├── src/
│   ├── BagOValues.h
│   ├── Resize.c
│   ├── Resize.h
│   ├── Winfile.vcxproj
│   ├── Winfile.vcxproj.filters
│   ├── dbg.c
│   ├── dbg.h
│   ├── fmifs.h
│   ├── lang/
│   │   ├── res_de-DE.rc
│   │   ├── res_en-US.rc
│   │   ├── res_he-IL.rc
│   │   ├── res_ja-JP.rc
│   │   ├── res_ko-KR.rc
│   │   ├── res_pl-PL.rc
│   │   ├── res_pt-PT.rc
│   │   ├── res_tr-TR.rc
│   │   ├── res_zh-CN.rc
│   │   ├── winfile_de-DE.dlg
│   │   ├── winfile_en-US.dlg
│   │   ├── winfile_he-IL.dlg
│   │   ├── winfile_ja-JP.dlg
│   │   ├── winfile_ko-KR.dlg
│   │   ├── winfile_pl-PL.dlg
│   │   ├── winfile_pt-PT.dlg
│   │   ├── winfile_tr-TR.dlg
│   │   └── winfile_zh-CN.dlg
│   ├── lfn.c
│   ├── lfn.h
│   ├── lfnmisc.c
│   ├── mcopy.cur
│   ├── mhard.cur
│   ├── mlink.cur
│   ├── mmove.cur
│   ├── mpr.h
│   ├── numfmt.c
│   ├── numfmt.h
│   ├── origrc/
│   │   ├── winfile.cs-CZ.rc
│   │   ├── winfile.da-DK.rc
│   │   ├── winfile.de-DE.rc
│   │   ├── winfile.en-US.rc
│   │   ├── winfile.es-ES.rc
│   │   ├── winfile.fi-FI.rc
│   │   ├── winfile.fr-FR.rc
│   │   ├── winfile.hu-HU.rc
│   │   ├── winfile.it-IT.rc
│   │   ├── winfile.ja-JP.rc
│   │   ├── winfile.ko-KR.rc
│   │   ├── winfile.nb-NO.rc
│   │   ├── winfile.nl-NL.rc
│   │   ├── winfile.pl-PL.rc
│   │   ├── winfile.pt-BR.rc
│   │   ├── winfile.ru-RU.rc
│   │   ├── winfile.sv-SE.rc
│   │   ├── winfile.zh-CN.rc
│   │   └── winfile.zh-TW.rc
│   ├── res.h
│   ├── res.rc
│   ├── scopy.cur
│   ├── shard.cur
│   ├── slink.cur
│   ├── smove.cur
│   ├── spinlock.h
│   ├── split.cur
│   ├── suggest.c
│   ├── suggest.h
│   ├── tbar.c
│   ├── treectl.c
│   ├── treectl.h
│   ├── w31rc/
│   │   ├── winfile.Brazil.rc
│   │   ├── winfile.Catalan.rc
│   │   ├── winfile.Czech.rc
│   │   ├── winfile.Danish.rc
│   │   ├── winfile.Dutch.rc
│   │   ├── winfile.Finnish.rc
│   │   ├── winfile.French.Int.rc
│   │   ├── winfile.French.rc
│   │   ├── winfile.German.rc
│   │   ├── winfile.Hungary.rc
│   │   ├── winfile.Italian.rc
│   │   ├── winfile.Japanese.rc
│   │   ├── winfile.Korean.rc
│   │   ├── winfile.Norway.rc
│   │   ├── winfile.Polish.rc
│   │   ├── winfile.Portuguese.rc
│   │   ├── winfile.SimChin.rc
│   │   ├── winfile.Spanish.rc
│   │   ├── winfile.Swedish.rc
│   │   ├── winfile.TradChin.rc
│   │   ├── winfile.Turkish.rc
│   │   └── winfile.USEnglish.rc
│   ├── wfassoc.c
│   ├── wfchgnot.c
│   ├── wfcomman.c
│   ├── wfcopy.c
│   ├── wfcopy.h
│   ├── wfdir.c
│   ├── wfdirrd.c
│   ├── wfdirsrc.c
│   ├── wfdlgs.c
│   ├── wfdlgs.h
│   ├── wfdlgs2.c
│   ├── wfdlgs3.c
│   ├── wfdoc.txt
│   ├── wfdocb.h
│   ├── wfdos.c
│   ├── wfdrives.c
│   ├── wfdrop.c
│   ├── wfdrop.h
│   ├── wfext.c
│   ├── wfext.h
│   ├── wfexti.h
│   ├── wffile.c
│   ├── wfgoto.cpp
│   ├── wfgwl.h
│   ├── wfhelp.h
│   ├── wfinfo.c
│   ├── wfinfo.h
│   ├── wfinit.c
│   ├── wfloc.c
│   ├── wfmem.c
│   ├── wfmem.h
│   ├── wfprint.c
│   ├── wfsearch.c
│   ├── wftree.c
│   ├── wfutil.c
│   ├── winexp.h
│   ├── winfile.c
│   ├── winfile.exe.manifest
│   ├── winfile.h
│   ├── wnetcaps.c
│   └── wnetcaps.h
└── tools/
    ├── ExeView/
    │   ├── ExeView.vcxproj
    │   ├── ExeView.vcxproj.filters
    │   ├── abstract.txt
    │   ├── bmp.cpp
    │   ├── exehdr.cpp
    │   ├── exehdr.h
    │   ├── exeview.txt
    │   ├── filllb.cpp
    │   ├── global.h
    │   ├── iconcur.cpp
    │   ├── init.cpp
    │   ├── main.cpp
    │   ├── main.def
    │   ├── main.rc
    │   ├── makefile
    │   ├── menudlg.cpp
    │   ├── res.cpp
    │   ├── res.h
    │   ├── save.cpp
    │   ├── stdafx.cpp
    │   ├── stdafx.h
    │   └── targetver.h
    ├── FileSignatureInfo/
    │   ├── FileSignatureInfo.cpp
    │   ├── FileSignatureInfo.vcxproj
    │   ├── FileSignatureInfo.vcxproj.filters
    │   ├── VerifySignature.cpp
    │   ├── stdafx.cpp
    │   ├── stdafx.h
    │   └── targetver.h
    └── VerifyResources/
        ├── Resources.h
        ├── VerifyResources.cpp
        ├── VerifyResources.vcxproj
        ├── VerifyResources.vcxproj.filters
        ├── stdafx.cpp
        ├── stdafx.h
        └── targetver.h

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Aa][Rr][Mm]64/
x64/
x86/
[Ww]in32/
bld/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.o
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Typescript v1 declaration files
typings/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
Makefile.depends
*.exe
tags


================================================
FILE: CHANGES.md
================================================
## Changes in v10.4 compared to v10.3 (February 2025)

1. New Korean translation
2. Resizable dialogs in pt-PT
3. Better preservation of display settings when opening a specified directory via command line
4. Relative paths when opening a specified directory via command line
5. Security related warnings and hardening

## Changes in v10.3 compared to v10.2 (March 2024)

1. Ability to launch Administrator command prompt or Explorer in a directory
2. More entries in the Goto dialog, and ability to Page Up/Page Down through the list
3. Resizable dialogs throughout
4. Symbolic links are visually distinguished using >SYMLINK<
5. Translation improvements
6. Can launch the Store version from the command line
7. Refresh is more thorough
8. Can specify an initial directory when opening Winfile
9. Source and tooling improvements, including an ability to target Windows XP

## Changes in v10.2 compared to v10.0 (December 2022)

1. Editor configurable via Winfile.ini[Settings]EditorPath
2. Change drives now via CTRL + ALT + letter
3. File.Goto paths can be configured.  Default = C:\\. Configure via Winfile.ini[Settings]CachedPath
4. `ctrl+C` copies path text to clipboard
5. CTRL + ENTER executes associated files as administrator
6. Symbolic Link directories/files and can be created by pressing CTRL + SHIFT during drag and drop of directories/files
7. Hardlinks and Junctions and can be created by pressing CTRL + SHIFT + ALT during drag and drop of directories/files
8. The delimiters for splitting words for the GotoCache can be configured via Winfile.ini[Settings]GotoCachePunctuation. The default is - _.
9. The scroll behavior of the treeview on expand can be configured via Winfile.ini[Settings]ScrollOnExpand. The default is to scroll.
10. Can handle paths up to 1024 characters with Windows10 >= 1607. Set HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled=1 as admin.
11. Japanese localisation with full-width katakanas
12. Create files with suffix '- Copy', when copying with (`ctrl+C`) -> (`ctrl+V`) in the same dir, or drag-copy with mouse onto empty space in same dir.
13. AMD64 build available

## Changes in v10.0 compared to original_plus (April 2018)

Version v10.0 represents the entire set of changes from Nov. 2007 until this OSS project was created.

1. OLE drag/drop support
2. control characters (e.g., ctrl+C) map to current shortcut (e.g., `ctrl+C` -> `copy`)
instead of changing drives
3. cut (`ctrl+X`) followed by paste (`ctrl+V`) translates into a file move as one would expect
4. left and right arrows in the tree view expand and collapse folders like in the Explorer
5. added context menus in both panes
6. improved the means by which icons are displayed for files
7. F12 runs notepad or notepad++ on the selected file
8. moved the ini file location to `%AppData%\Roaming\Microsoft\WinFile`
9. File.Search can include a date which limits the files returned to those after the date provided;
the output is also sorted by the date instead of by the name
10. File.Search includes an option as to whether to include sub-directories
11. `ctrl+K` starts a command shell (ConEmu if installed) in the current directory; `shift+ctrl+K`
starts an elevated command shell (`cmd.exe` only)
12. File.Goto (`ctrl+G`) enables one to type a few words of a path and get a list of directories;
selecting one changes to that directory.  Hardcoded to C:\\ .
13. UI shows reparse points (e.g., Junction Points and Symbolic Links) as such with little icons.
14. added simple forward / back navigation (probably needs to be improved)
15. View command has a new option to sort by date forward (oldest on top); normal date sorting is newest on top

## Changes in original_plus (April 2018)

The source code provided here (in the `src` directory) was copied from the Windows NT 4 source tree in November
2007.  The tag named original_plus contains a very limited set of modifications
from the original sources to enable `WinFile.exe` to run on current Windows.
The most significant changes are:

1. converted to Visual Studio solution; works on VS 2015 and 2017
2. compiles and runs on 64-bit Windows (e.g., GetWindowLong -> GetWindowLongPtr, LONG -> LPARAM)
3. added a few header files which were stored elsewhere in the NT source tree (e.g., wfext.h)
4. deleted some unused files (e.g., winfile.def)
5. converted 64-bit arithmetic from internal libraries to C
6. converted internal shell APIs to public APIs (the primary reason the old version would not run)

The help directory contains both winfile.hlp and winfile.chm.  Winfile.hlp was in the NT4
source tree, but does not work on Windows 10 any more.  Winfile.chm was copied from
a regular installation of Windows 98 and works on Windows 10.  As is, `WinFile.exe`
tries to launch winfile.hlp which fails.

To create your own local branch referring to this release, run `git checkout -b <your branch> original_plus`.



================================================
FILE: GNUmakefile
================================================
SRCS = \
	src/dbg.c \
	src/lfn.c \
	src/lfnmisc.c \
	src/numfmt.c \
	src/Resize.c \
	src/suggest.c \
	src/tbar.c \
	src/treectl.c \
	src/wfassoc.c \
	src/wfchgnot.c \
	src/wfcomman.c \
	src/wfcopy.c \
	src/wfdir.c \
	src/wfdirrd.c \
	src/wfdirsrc.c \
	src/wfdlgs.c \
	src/wfdlgs2.c \
	src/wfdlgs3.c \
	src/wfdos.c \
	src/wfdrives.c \
	src/wfdrop.c \
	src/wfext.c \
	src/wffile.c \
	src/wfinfo.c \
	src/wfinit.c \
	src/wfmem.c \
	src/wfloc.c \
	src/wfprint.c \
	src/wfsearch.c \
	src/wftree.c \
	src/wfutil.c \
	src/winfile.c \
	src/wnetcaps.c

OBJS = $(subst .c,.o,$(SRCS)) src/wfgoto.o src/res.o

CFLAGS = -DUNICODE -DFASTMOVE -DSTRSAFE_NO_DEPRECATE -DWINVER=0x0600
LDLIBS = -mwindows -lkernel32 -lgdi32 -luser32 -ladvapi32 -lcomctl32 -lole32 -lshlwapi -lshell32 -loleaut32 -lversion
TARGET = winfile
ifeq ($(OS),Windows_NT)
TARGET := $(TARGET).exe
endif

CC ?= gcc
CXX ?= g++
WINDRES = windres
RM = rm -f

.PHONY: all depend clean
.SUFFIXES: .c .cpp .o .res

all : $(TARGET)

$(TARGET) : $(OBJS)
	$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)

.c.o :
	$(CC) -c $(CFLAGS) -I. $< -o $@

.cpp.o :
	$(CXX) -c $(CFLAGS) -I. $< -o $@

src/res.o : src/res.rc src/lang/*.rc src/lang/*.dlg
	$(WINDRES) -DNOWINRES -I. -Isrc/ -i src/res.rc -o src/res.o

clean :
	$(RM) $(OBJS) $(TARGET)

depend:
	$(CC) -E -MM -w src/*.c > Makefile.depends

-include Makefile.depends


================================================
FILE: LICENSE
================================================
    MIT License

    Copyright (c) Microsoft Corporation. All rights reserved.

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE


================================================
FILE: Package/Package.appxmanifest
================================================
<?xml version="1.0" encoding="utf-8"?>
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
  xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="desktop uap uap3 mp rescap">
  <Identity Name="Microsoft.WindowsFileManager" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="10.4.0.0" />
  <Properties>
    <DisplayName>Windows File Manager</DisplayName>
    <PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
    <Logo>Images\StoreLogo.png</Logo>
  </Properties>
  <Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
  </Dependencies>
  <Resources>
    <Resource Language="x-generate" />
  </Resources>
  <Applications>
    <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$">
      <uap:VisualElements DisplayName="Windows File Manager" Description="Windows File Manager reborn; cf. https://github.com/microsoft/winfile." BackgroundColor="transparent" Square150x150Logo="Images\Square150x150Logo.png" Square44x44Logo="Images\Square44x44Logo.png">
        <uap:DefaultTile>
          <uap:ShowNameOnTiles>
            <uap:ShowOn Tile="square150x150Logo" />
          </uap:ShowNameOnTiles>
        </uap:DefaultTile>
        <uap:SplashScreen Image="Images\SplashScreen.png" />
      </uap:VisualElements>
      <Extensions>
        <uap3:Extension
          Category="windows.appExecutionAlias"
          Executable="Winfile\Winfile.exe"
          EntryPoint="Windows.FullTrustApplication">
          <uap3:AppExecutionAlias>
            <desktop:ExecutionAlias Alias="Winfile.exe" />
          </uap3:AppExecutionAlias>
        </uap3:Extension>
      </Extensions>
    </Application>
  </Applications>
  <Capabilities>
    <Capability Name="internetClient" />
    <rescap:Capability Name="runFullTrust" />
  </Capabilities>
</Package>


================================================
FILE: Package/Package.wapproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '15.0'">
    <VisualStudioVersion>15.0</VisualStudioVersion>
  </PropertyGroup>
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|ARM64">
      <Configuration>Debug</Configuration>
      <Platform>ARM64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|ARM64">
      <Configuration>Release</Configuration>
      <Platform>ARM64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup>
    <WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>
    <PlatformTarget Condition="'$(Platform)'=='Win32'">x86</PlatformTarget>
  </PropertyGroup>
  <Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
  <PropertyGroup>
    <ProjectGuid>ac921d51-18e2-4fbe-a444-059543458c00</ProjectGuid>
    <TargetPlatformVersion>10.0.18362.0</TargetPlatformVersion>
    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>
    <DefaultLanguage>en-US</DefaultLanguage>
    <PackageCertificateKeyFile>Winfile.AppStore.UploadCert.pfx</PackageCertificateKeyFile>
    <EntryPointProjectUniqueName>..\src\Winfile.vcxproj</EntryPointProjectUniqueName>
    <GenerateAppInstallerFile>False</GenerateAppInstallerFile>
    <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
    <AppxBundlePlatforms>x86|x64|arm64</AppxBundlePlatforms>
    <AppInstallerUpdateFrequency>0</AppInstallerUpdateFrequency>
    <AppInstallerCheckForUpdateFrequency>OnApplicationRun</AppInstallerCheckForUpdateFrequency>
    <!-- cf. https://github.com/microsoft/winfile/issues/227 -->
    <SkipUnionWinmd>true</SkipUnionWinmd>
    <AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
    <GenerateTestArtifacts>True</GenerateTestArtifacts>
    <HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
    <AppxBundle>Always</AppxBundle>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <AppxBundle>Always</AppxBundle>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <AppxBundle>Always</AppxBundle>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <AppxBundle>Always</AppxBundle>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
    <AppxBundle>Always</AppxBundle>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <AppxBundle>Always</AppxBundle>
  </PropertyGroup>
  <ItemGroup>
    <AppxManifest Include="Package.appxmanifest">
      <SubType>Designer</SubType>
    </AppxManifest>
    <None Include="Package_TemporaryKey.pfx" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="Images\SplashScreen.png" />
    <Content Include="Images\Square150x150Logo.scale-100.png" />
    <Content Include="Images\Square150x150Logo.scale-200.png" />
    <Content Include="Images\Square150x150Logo.scale-400.png" />
    <Content Include="Images\Square44x44Logo.altform-unplated_targetsize-16.png" />
    <Content Include="Images\Square44x44Logo.altform-unplated_targetsize-256.png" />
    <Content Include="Images\Square44x44Logo.altform-unplated_targetsize-48.png" />
    <Content Include="Images\Square44x44Logo.scale-100.png" />
    <Content Include="Images\Square44x44Logo.scale-200.png" />
    <Content Include="Images\Square44x44Logo.scale-400.png" />
    <Content Include="Images\Square44x44Logo.targetsize-16.png" />
    <Content Include="Images\Square44x44Logo.targetsize-256.png" />
    <Content Include="Images\Square44x44Logo.targetsize-48.png" />
    <Content Include="Images\StoreLogo.scale-100.png" />
    <Content Include="Images\StoreLogo.scale-200.png" />
    <Content Include="Images\StoreLogo.scale-400.png" />
    <None Include="Winfile.AppStore.UploadCert.pfx" />
    <None Include="Package_StoreKey.pfx" />
    <None Include="Package.StoreAssociation.xml" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\src\Winfile.vcxproj" />
  </ItemGroup>
  <Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
</Project>


================================================
FILE: README.md
================================================


# Announcement: Repository to be archived on March 1, 2025
We realize this may come as a shock and disappointment to our contributors but we simply do not have the expertise or resources within the organization to continue to maintain this project. 
While you may continue to work on your own private fork, remember that use of archived repositories are more risky from a security standpoint and caution should be taken. 

# ![icon](winfile.png) Windows File Manager (WinFile)

The Windows File Manager lives again and runs as a native x86, x64 and arm64 desktop app
on all currently supported version of Windows, including Windows 11. I welcome your thoughts, comments and suggestions.

There are two primary versions of the source code in the master branch:

1. original_plus tag: refers to the source for WinFile as of Windows NT4 with minimal changes
so that it compiles with Visual Studio and runs on current Windows.

2. current master: actively developed branch that consists of enhancements and additions to WinFile.

I will consider bugs fixes and suggestions for minor changes to the master branch. Feel free to create a pull request or post issues as you see fit.

I will not be changing the original_plus sources nor creating other branches for other purposes.
You are welcome to do that on your own.

## Download The App

If you are running Windows 10, you can download the app from the store

<a href="https://www.microsoft.com/store/apps/9p7vbbbc49rb?ocid=badge"><img src="https://developer.microsoft.com/store/badges/images/English_get-it-from-MS.png" alt="Get it from Microsoft" width="150px"></a>

If you just want to download the WinFile application without worrying about compiling from the source code, we have a number of pre-compiled versions available.

Please select the version which you would like to download.

- [Chocolatey release](https://chocolatey.org/packages/winfile)

- Winget release: `winget install "Windows File Manager"`

- [MSYS2 release](https://packages.msys2.org/base/mingw-w64-winfile)

- [Latest Release on Github (v10.3.0.0)](https://github.com/microsoft/winfile/releases/latest)

To see more release binaries, including of older versions, [see the releases page](https://github.com/Microsoft/winfile/releases).

## History

The Windows File manager was originally released with Windows 3.0 in the early 1990s.  You
can read more about the history at https://en.wikipedia.org/wiki/Windows_File_Manager .

## Change history

Highlights of changes in each release are in [CHANGES.md](CHANGES.md).

## What it looks like
# ![Winfile](winfilescreenshot.png)

## Contributing

### Contributor License Agreement
As mentioned above, this project welcomes contributions and suggestions.  Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.

### What Makes a Good Pull Request for WinFile?
If you are interested in contributing and/or suggesting changes to the actual application, you might find it helpful to [read this post first](https://github.com/Microsoft/winfile/issues/88).

## License

Copyright (c) Microsoft Corporation. All rights reserved.

Licensed under the [MIT](LICENSE) License.


================================================
FILE: SECURITY.md
================================================
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->

## Security

Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).

If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.

## Reporting Security Issues

**Please do not report security vulnerabilities through public GitHub issues.**

Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).

If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).

You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 

Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:

  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
  * Full paths of source file(s) related to the manifestation of the issue
  * The location of the affected source code (tag/branch/commit or direct URL)
  * Any special configuration required to reproduce the issue
  * Step-by-step instructions to reproduce the issue
  * Proof-of-concept or exploit code (if possible)
  * Impact of the issue, including how an attacker might exploit the issue

This information will help us triage your report more quickly.

If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.

## Preferred Languages

We prefer all communications to be in English.

## Policy

Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).

<!-- END MICROSOFT SECURITY.MD BLOCK -->


================================================
FILE: SignConfig.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<SignConfigXML>
 <job platform="Win32" certSubject="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" configuration="Release" dest="__OUTPATHROOT__\signed" jobname="Winfile x86" joburl="https://github.com/microsoft/winfile" approvers="">
   <file src="__INPATHROOT__\Winfile.exe" signType="135020002" dest="__OUTPATHROOT__\signed\Winfile.exe" />
 </job>
 <job platform="x64" certSubject="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" configuration="Release" dest="__OUTPATHROOT__\signed" jobname="Winfile x64" joburl="https://github.com/microsoft/winfile" approvers="">
   <file src="__INPATHROOT__\Winfile.exe" signType="135020002" dest="__OUTPATHROOT__\signed\Winfile.exe" />
 </job>
 <job platform="ARM" certSubject="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" configuration="Release" dest="__OUTPATHROOT__\signed" jobname="Winfile ARM" joburl="https://github.com/microsoft/winfile" approvers="">
   <file src="__INPATHROOT__\Winfile.exe" signType="135020002" dest="__OUTPATHROOT__\signed\Winfile.exe" />
 </job>
</SignConfigXML>


================================================
FILE: Winfile.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27428.2037
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Winfile", "src\Winfile.vcxproj", "{028400E7-500A-4FB9-877F-F6C7AE24F109}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VerifyResources", "tools\VerifyResources\VerifyResources.vcxproj", "{2A455495-7936-4F67-B957-6356E0141DAD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FileSignatureInfo", "tools\FileSignatureInfo\FileSignatureInfo.vcxproj", "{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AddonSample", "samples\addon\AddOnSample.vcxproj", "{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ExeView", "tools\ExeView\ExeView.vcxproj", "{23717B8E-CA4A-412F-A4EA-5E6899143EC7}"
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "Package", "Package\Package.wapproj", "{AC921D51-18E2-4FBE-A444-059543458C00}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2C73F3F2-606A-4B7B-B473-3E5A8AC467FB}"
	ProjectSection(SolutionItems) = preProject
		README.md = README.md
	EndProjectSection
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|ARM64 = Debug|ARM64
		Debug|Win32 = Debug|Win32
		Debug|x64 = Debug|x64
		Debug|x86 = Debug|x86
		DebugXPStatic|ARM64 = DebugXPStatic|ARM64
		DebugXPStatic|Win32 = DebugXPStatic|Win32
		DebugXPStatic|x64 = DebugXPStatic|x64
		DebugXPStatic|x86 = DebugXPStatic|x86
		Release|ARM64 = Release|ARM64
		Release|Win32 = Release|Win32
		Release|x64 = Release|x64
		Release|x86 = Release|x86
		ReleaseXPStatic|ARM64 = ReleaseXPStatic|ARM64
		ReleaseXPStatic|Win32 = ReleaseXPStatic|Win32
		ReleaseXPStatic|x64 = ReleaseXPStatic|x64
		ReleaseXPStatic|x86 = ReleaseXPStatic|x86
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Debug|ARM64.ActiveCfg = Debug|ARM64
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Debug|ARM64.Build.0 = Debug|ARM64
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Debug|Win32.ActiveCfg = Debug|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Debug|Win32.Build.0 = Debug|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Debug|x64.ActiveCfg = Debug|x64
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Debug|x64.Build.0 = Debug|x64
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Debug|x86.ActiveCfg = Debug|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Debug|x86.Build.0 = Debug|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.DebugXPStatic|ARM64.ActiveCfg = DebugXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.DebugXPStatic|ARM64.Build.0 = DebugXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.DebugXPStatic|Win32.ActiveCfg = DebugXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.DebugXPStatic|Win32.Build.0 = DebugXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.DebugXPStatic|x64.ActiveCfg = DebugXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.DebugXPStatic|x64.Build.0 = DebugXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.DebugXPStatic|x86.ActiveCfg = DebugXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.DebugXPStatic|x86.Build.0 = DebugXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Release|ARM64.ActiveCfg = Release|ARM64
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Release|ARM64.Build.0 = Release|ARM64
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Release|Win32.ActiveCfg = Release|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Release|Win32.Build.0 = Release|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Release|x64.ActiveCfg = Release|x64
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Release|x64.Build.0 = Release|x64
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Release|x86.ActiveCfg = Release|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.Release|x86.Build.0 = Release|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.ReleaseXPStatic|ARM64.ActiveCfg = ReleaseXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.ReleaseXPStatic|ARM64.Build.0 = ReleaseXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.ReleaseXPStatic|Win32.ActiveCfg = ReleaseXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.ReleaseXPStatic|Win32.Build.0 = ReleaseXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.ReleaseXPStatic|x64.ActiveCfg = ReleaseXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.ReleaseXPStatic|x64.Build.0 = ReleaseXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.ReleaseXPStatic|x86.ActiveCfg = ReleaseXPStatic|Win32
		{028400E7-500A-4FB9-877F-F6C7AE24F109}.ReleaseXPStatic|x86.Build.0 = ReleaseXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.Debug|ARM64.ActiveCfg = Debug|ARM64
		{2A455495-7936-4F67-B957-6356E0141DAD}.Debug|ARM64.Build.0 = Debug|ARM64
		{2A455495-7936-4F67-B957-6356E0141DAD}.Debug|Win32.ActiveCfg = Debug|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.Debug|Win32.Build.0 = Debug|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.Debug|x64.ActiveCfg = Debug|x64
		{2A455495-7936-4F67-B957-6356E0141DAD}.Debug|x64.Build.0 = Debug|x64
		{2A455495-7936-4F67-B957-6356E0141DAD}.Debug|x86.ActiveCfg = Debug|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.Debug|x86.Build.0 = Debug|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.DebugXPStatic|ARM64.ActiveCfg = DebugXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.DebugXPStatic|ARM64.Build.0 = DebugXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.DebugXPStatic|Win32.ActiveCfg = DebugXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.DebugXPStatic|Win32.Build.0 = DebugXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.DebugXPStatic|x64.ActiveCfg = DebugXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.DebugXPStatic|x64.Build.0 = DebugXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.DebugXPStatic|x86.ActiveCfg = DebugXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.DebugXPStatic|x86.Build.0 = DebugXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.Release|ARM64.ActiveCfg = Release|ARM64
		{2A455495-7936-4F67-B957-6356E0141DAD}.Release|ARM64.Build.0 = Release|ARM64
		{2A455495-7936-4F67-B957-6356E0141DAD}.Release|Win32.ActiveCfg = Release|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.Release|Win32.Build.0 = Release|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.Release|x64.ActiveCfg = Release|x64
		{2A455495-7936-4F67-B957-6356E0141DAD}.Release|x64.Build.0 = Release|x64
		{2A455495-7936-4F67-B957-6356E0141DAD}.Release|x86.ActiveCfg = Release|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.Release|x86.Build.0 = Release|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.ReleaseXPStatic|ARM64.ActiveCfg = ReleaseXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.ReleaseXPStatic|ARM64.Build.0 = ReleaseXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.ReleaseXPStatic|Win32.ActiveCfg = ReleaseXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.ReleaseXPStatic|Win32.Build.0 = ReleaseXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.ReleaseXPStatic|x64.ActiveCfg = ReleaseXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.ReleaseXPStatic|x64.Build.0 = ReleaseXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.ReleaseXPStatic|x86.ActiveCfg = ReleaseXPStatic|Win32
		{2A455495-7936-4F67-B957-6356E0141DAD}.ReleaseXPStatic|x86.Build.0 = ReleaseXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Debug|ARM64.ActiveCfg = Debug|ARM64
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Debug|ARM64.Build.0 = Debug|ARM64
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Debug|Win32.ActiveCfg = Debug|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Debug|Win32.Build.0 = Debug|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Debug|x64.ActiveCfg = Debug|x64
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Debug|x64.Build.0 = Debug|x64
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Debug|x86.ActiveCfg = Debug|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Debug|x86.Build.0 = Debug|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.DebugXPStatic|ARM64.ActiveCfg = DebugXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.DebugXPStatic|ARM64.Build.0 = DebugXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.DebugXPStatic|Win32.ActiveCfg = DebugXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.DebugXPStatic|Win32.Build.0 = DebugXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.DebugXPStatic|x64.ActiveCfg = DebugXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.DebugXPStatic|x64.Build.0 = DebugXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.DebugXPStatic|x86.ActiveCfg = DebugXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.DebugXPStatic|x86.Build.0 = DebugXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Release|ARM64.ActiveCfg = Release|ARM64
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Release|ARM64.Build.0 = Release|ARM64
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Release|Win32.ActiveCfg = Release|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Release|Win32.Build.0 = Release|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Release|x64.ActiveCfg = Release|x64
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Release|x64.Build.0 = Release|x64
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Release|x86.ActiveCfg = Release|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.Release|x86.Build.0 = Release|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.ReleaseXPStatic|ARM64.ActiveCfg = ReleaseXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.ReleaseXPStatic|ARM64.Build.0 = ReleaseXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.ReleaseXPStatic|Win32.ActiveCfg = ReleaseXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.ReleaseXPStatic|Win32.Build.0 = ReleaseXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.ReleaseXPStatic|x64.ActiveCfg = ReleaseXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.ReleaseXPStatic|x64.Build.0 = ReleaseXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.ReleaseXPStatic|x86.ActiveCfg = ReleaseXPStatic|Win32
		{24D8E2A7-CD5A-423B-AEB4-CAA277BD0A0F}.ReleaseXPStatic|x86.Build.0 = ReleaseXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Debug|ARM64.ActiveCfg = Debug|ARM64
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Debug|ARM64.Build.0 = Debug|ARM64
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Debug|Win32.ActiveCfg = Debug|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Debug|Win32.Build.0 = Debug|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Debug|x64.ActiveCfg = Debug|x64
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Debug|x64.Build.0 = Debug|x64
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Debug|x86.ActiveCfg = Debug|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Debug|x86.Build.0 = Debug|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.DebugXPStatic|ARM64.ActiveCfg = DebugXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.DebugXPStatic|ARM64.Build.0 = DebugXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.DebugXPStatic|Win32.ActiveCfg = DebugXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.DebugXPStatic|Win32.Build.0 = DebugXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.DebugXPStatic|x64.ActiveCfg = DebugXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.DebugXPStatic|x64.Build.0 = DebugXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.DebugXPStatic|x86.ActiveCfg = DebugXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.DebugXPStatic|x86.Build.0 = DebugXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Release|ARM64.ActiveCfg = Release|ARM64
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Release|ARM64.Build.0 = Release|ARM64
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Release|Win32.ActiveCfg = Release|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Release|Win32.Build.0 = Release|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Release|x64.ActiveCfg = Release|x64
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Release|x64.Build.0 = Release|x64
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Release|x86.ActiveCfg = Release|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.Release|x86.Build.0 = Release|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.ReleaseXPStatic|ARM64.ActiveCfg = ReleaseXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.ReleaseXPStatic|ARM64.Build.0 = ReleaseXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.ReleaseXPStatic|Win32.ActiveCfg = ReleaseXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.ReleaseXPStatic|Win32.Build.0 = ReleaseXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.ReleaseXPStatic|x64.ActiveCfg = ReleaseXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.ReleaseXPStatic|x64.Build.0 = ReleaseXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.ReleaseXPStatic|x86.ActiveCfg = ReleaseXPStatic|Win32
		{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}.ReleaseXPStatic|x86.Build.0 = ReleaseXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Debug|ARM64.ActiveCfg = Debug|ARM64
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Debug|ARM64.Build.0 = Debug|ARM64
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Debug|Win32.ActiveCfg = Debug|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Debug|Win32.Build.0 = Debug|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Debug|x64.ActiveCfg = Debug|x64
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Debug|x64.Build.0 = Debug|x64
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Debug|x86.ActiveCfg = Debug|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Debug|x86.Build.0 = Debug|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.DebugXPStatic|ARM64.ActiveCfg = DebugXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.DebugXPStatic|ARM64.Build.0 = DebugXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.DebugXPStatic|Win32.ActiveCfg = DebugXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.DebugXPStatic|Win32.Build.0 = DebugXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.DebugXPStatic|x64.ActiveCfg = DebugXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.DebugXPStatic|x64.Build.0 = DebugXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.DebugXPStatic|x86.ActiveCfg = DebugXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.DebugXPStatic|x86.Build.0 = DebugXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Release|ARM64.ActiveCfg = Release|ARM64
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Release|ARM64.Build.0 = Release|ARM64
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Release|Win32.ActiveCfg = Release|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Release|Win32.Build.0 = Release|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Release|x64.ActiveCfg = Release|x64
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Release|x64.Build.0 = Release|x64
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Release|x86.ActiveCfg = Release|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.Release|x86.Build.0 = Release|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.ReleaseXPStatic|ARM64.ActiveCfg = ReleaseXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.ReleaseXPStatic|ARM64.Build.0 = ReleaseXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.ReleaseXPStatic|Win32.ActiveCfg = ReleaseXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.ReleaseXPStatic|Win32.Build.0 = ReleaseXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.ReleaseXPStatic|x64.ActiveCfg = ReleaseXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.ReleaseXPStatic|x64.Build.0 = ReleaseXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.ReleaseXPStatic|x86.ActiveCfg = ReleaseXPStatic|Win32
		{23717B8E-CA4A-412F-A4EA-5E6899143EC7}.ReleaseXPStatic|x86.Build.0 = ReleaseXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|ARM64.ActiveCfg = Debug|ARM64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|ARM64.Build.0 = Debug|ARM64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|ARM64.Deploy.0 = Debug|ARM64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|Win32.ActiveCfg = Debug|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|Win32.Build.0 = Debug|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|Win32.Deploy.0 = Debug|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|x64.ActiveCfg = Debug|x64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|x64.Build.0 = Debug|x64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|x64.Deploy.0 = Debug|x64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|x86.ActiveCfg = Debug|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|x86.Build.0 = Debug|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Debug|x86.Deploy.0 = Debug|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.DebugXPStatic|ARM64.ActiveCfg = DebugXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.DebugXPStatic|Win32.ActiveCfg = DebugXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.DebugXPStatic|Win32.Build.0 = DebugXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.DebugXPStatic|x64.ActiveCfg = DebugXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.DebugXPStatic|x86.ActiveCfg = DebugXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.DebugXPStatic|x86.Build.0 = DebugXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|ARM64.ActiveCfg = Release|ARM64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|ARM64.Build.0 = Release|ARM64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|ARM64.Deploy.0 = Release|ARM64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|Win32.ActiveCfg = Release|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|Win32.Build.0 = Release|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|Win32.Deploy.0 = Release|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|x64.ActiveCfg = Release|x64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|x64.Build.0 = Release|x64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|x64.Deploy.0 = Release|x64
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|x86.ActiveCfg = Release|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|x86.Build.0 = Release|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.Release|x86.Deploy.0 = Release|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.ReleaseXPStatic|ARM64.ActiveCfg = ReleaseXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.ReleaseXPStatic|Win32.ActiveCfg = ReleaseXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.ReleaseXPStatic|Win32.Build.0 = ReleaseXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.ReleaseXPStatic|x64.ActiveCfg = ReleaseXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.ReleaseXPStatic|x86.ActiveCfg = ReleaseXPStatic|Win32
		{AC921D51-18E2-4FBE-A444-059543458C00}.ReleaseXPStatic|x86.Build.0 = ReleaseXPStatic|Win32
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {56BB175E-5DE4-4CCB-B12D-67217C03BD15}
	EndGlobalSection
EndGlobal


================================================
FILE: build/README.md
================================================

These two files control repo-wide build settings.

Msbuild projects work by including a "default" props file, then allowing
projects to override those defaults, then including a "props" file that
can apply high-level properties into lower level configuration.  After that,
projects can once again override lower level values, then define which files
to compile, then include a "targets" file to perform execution.

In other words, the way to think of these two files is
`Winfile.default.props` executes before `Winfile.props`, and the two files
are split to allow individual projects to manipulate state in between.

Generally, anything affecting supported architectures, compilers, and basic
compilation options should be here.  Anything specific to an executable
should be in the project files.



================================================
FILE: build/Winfile.default.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|ARM64">
      <Configuration>Debug</Configuration>
      <Platform>ARM64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="DebugXPStatic|Win32">
      <Configuration>DebugXPStatic</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|ARM64">
      <Configuration>Release</Configuration>
      <Platform>ARM64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="ReleaseXPStatic|Win32">
      <Configuration>ReleaseXPStatic</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
    <WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
    <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='DebugXPStatic'">
    <UseDebugLibraries>true</UseDebugLibraries>
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)'=='Release' or '$(Configuration)'=='ReleaseXPStatic'">
    <UseDebugLibraries>false</UseDebugLibraries>
    <LinkIncremental>false</LinkIncremental>
    <WholeProgramOptimization>true</WholeProgramOptimization>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='ReleaseXPStatic' or '$(Configuration)'=='DebugXPStatic'">
    <PlatformToolset>v141_xp</PlatformToolset>
    <XPDeprecationWarning>false</XPDeprecationWarning>
  </PropertyGroup>
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release' or '$(Configuration)'=='Debug'">
    <PlatformToolset>v143</PlatformToolset>
  </PropertyGroup>
</Project>


================================================
FILE: build/Winfile.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ItemDefinitionGroup Label="Globals">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
      <MultiProcessorCompilation>true</MultiProcessorCompilation>
    </ClCompile>
    <Link>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <SdlCheck>true</SdlCheck>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)'=='DebugXPStatic'">
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
    <ClCompile>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <SdlCheck>true</SdlCheck>
    </ClCompile>
    <Link>
      <OptimizeReferences>true</OptimizeReferences>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)'=='ReleaseXPStatic'">
    <ClCompile>
      <Optimization>MinSpace</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
    </ClCompile>
    <Link>
      <OptimizeReferences>true</OptimizeReferences>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
    <ClCompile>
      <CallingConvention>StdCall</CallingConvention>
    </ClCompile>
    <Link>
      <TargetMachine>MachineX86</TargetMachine>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Platform)'=='ARM64'">
    <ClCompile>
      <CallingConvention>StdCall</CallingConvention>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
    <ClCompile>
      <CallingConvention>StdCall</CallingConvention>
    </ClCompile>
    <Link>
      <TargetMachine>MachineX64</TargetMachine>
    </Link>
    <Midl>
      <TargetEnvironment>X64</TargetEnvironment>
    </Midl>
  </ItemDefinitionGroup>
  <PropertyGroup>
    <OutDir>$(Platform)\$(Configuration)\</OutDir>
    <IntDir>$(Platform)\$(Configuration)\</IntDir>
  </PropertyGroup>
</Project>


================================================
FILE: help/ini/index.html
================================================
<html>
<head>
<title>Building winfile.ini from scratch</title>
</head>
<body>
 <p>OR: Building WINFILE.INI from scratch is a bad idea. Here's how to do it anyway.</p>
<h3>Preface:</h3>
<p>This is not an "issue" per se, and is more of an "I couldn't find this written down anywhere and perhaps somebody else might want to know this for some reason" thing. Feel free to mark it as "solved" or "complete" or whatever, this is purely informational. If you need an issue, somebody could find a way to work this information into the help documentation or whatever.</p>
<p>To be perfectly clear, there is very little practical reason you should ever edit WINFILE.INI directly - nearly everything that is stored in the INI can be directly changed using the user interface, and it's much easier to make these changes in the UI directly. I make this quick reference available simply to satisfy my own sensibilities. If this helps you, great.</p>
<p>At any rate, if you ever need or desire to modify the INI file for fun or profit, here is a list of all of the INI settings I've identified, with best-effort descriptions of what they do. Add them to the help files or whatever. Hopefully, google/bing/whatever will index this and the next person who searches for it will find this.</p>
<p>Also, for anybody following along at home, sprinkled throughout this document are example lines ripped directly from my INI file. You don't have to copy them directly if you don't want to - this is just how I like mine.</p>
<h3>[Settings]</h3>
<p>The INI file begins with the line <em>[Settings]</em>. It delimits the beginning of the settings portion of the INI file, which just so happens to be the entire file. This line is mandatory: File Manager is pretty lax about the order of each key/setting, however it outright ignores all parameters that are not beneath [Settings] - it has to be the first line of the file.</p>
<p><code>[Settings]</code></p>
<h3>Window metrics:</h3>
<p>The first entry of note is <strong>Window</strong>, which stores the last opened location of the MDI parent window. It features several parameters, not all of which are known to me - if you know what the missing ones are, feel free to share. In order, the parameters are the leftmost pixel location, the topmost pixel location, the width in pixels, the height in pixels, an unknown blank parameter, another unknown blank parameter, and visibility. Set visibility zero to make the program window not display at all even though winfile is running in the background, 1 for normal, 3 for maximized. Technically, I think 2 should have it start minimized, but it doesn't.</p>
<p><code>Window=123,123,800,600, , ,1</code></p>
<p>Similarly, Windows File Manager has many child windows, and it will save the location/metrics of these windows on close using entries <strong>dir1</strong>, <strong>dir2</strong>, etc. You <em>could</em> edit these entries to change the view options of each window. I do not recommend doing so, as any missing parameters cause file manager to close entirely, and I don't fully understand how each parameter is calculated. The known parameters are: leftmost pixel, topmost pixel, width, height, -1, -1, visible, ?, ?, ?,divider,path. Those three question marks? Those are used for the view options. How exactly those values are calculated are beyond the scope of this document because I don't know myself. As with the parent, so with the child - set visible to 0 for an invisible folder window, 1 for normal display, 2 for minimized, and 3 for maximized. Path must include the file mask you wish to show. For example, <code>C:\*.* </code>shows all files in the C:\ drive. <code>D:\folder\*.exe</code> shows all exe files in the location D:\folder, etc.</p>
<pre><code>dir1=80,52,776,486,-1,-1,1,30,201,135958,247,C:\*.*
dir2=0,0,636,348,-1,-1,1,32,201,24561,193,Z:\*.exe
dir3=120,44,500,300,-1,-1,2,30,201,24561,193,E:\*.*
</code></pre>
<h3>Options menu items</h3>
<p>Most of these are self explanatory. <strong>MinOnRun</strong> does exactly that, if set to true (1), File Manager minimized itself when a program or file is executed. <strong>IndexOnLaunch</strong>, when set to 1, causes the Goto Directory index to be created on launch. This is helpful because it means you don't have to remember exactly how things are spelled when using the goto feature.<strong>StatusBar</strong>, <strong>DriveBar</strong>, and <strong>Toolbar</strong> all control whether or not these bars are visible (1) or not (0). Finally, <strong>NewWinOnNetConnect</strong> determines if a new folder window is opened when you connect to a network drive.</p>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="goto.png"><img src="goto.png" alt="GotoIndex" style="max-width: 100%;"></a><br>
[Figure 1: The Goto directory dialog (Ctrl+G) is shown with indexing disabled and again with it enabled.]</p>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="toolbar.png"><img src="toolbar.png" alt="ToolbarsOnOff" style="max-width: 100%;"></a><br>
[Figure 2: The primary interface is shown with the toolbar/drivebar/status bar disabled, and again below with aforementioned bars enabled]</p>
<pre><code>MinOnRun=0
IndexOnLaunch=1
StatusBar=1
DriveBar=1
Toolbar=1
NewWinOnNetConnect=1
</code></pre>
<h3>Are you sure about that?</h3>
<p>All of these options are found in the Options &gt; Confirmation dialog, and they are entirely self explanatory. Setting them to 0 unchecks the box and consequently means File Manager does not ask for confirmation. Setting them to 1 checks the box and makes it ask you to confirm. <strong>ConfirmDelete</strong> asks on file deletion, <strong>ConfirmSubDel</strong> asks on folder deletion, <strong>ConfirmReplace</strong> asks when you try to replace an existing file, <strong>ConfirmMouse</strong> asks when you drag-and-drop a file, <strong>ConfirmFormat</strong> is supposed to ask when you select to format a drive, but doesn't appear to do so. <strong>ConfirmReadOnly</strong> asks when you try to modify a System, Hidden, and/or Read-Only file.</p>
<pre><code>ConfirmDelete=1
ConfirmSubDel=1
ConfirmReplace=1
ConfirmMouse=0
ConfirmFormat=1
ConfirmReadOnly=1
</code></pre>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="confirm.png"><img src="confirm.png" alt="image" style="max-width: 100%;"></a><br>
[Figure 3: File Manager is asking me to confirm I intended to delete a file. I am prone to accidents, so having it double check my work is always reassuring, especially when you consider that File Manager bypasses the Windows Recycle Bin and directly deletes the file.]</p>
<h3>Fun Visual Tricks</h3>
<p><strong>DisableVisualStyles</strong> determines if the toolbar uses visual styles (0), or does not (1). If you want that authentic 9x/nt4 feel, set it to 1 for raised buttons. Or leave it at 0 and get the boring, flat buttons.<br>
<strong>MirrorContent</strong> reverses the left-right order of individual items without reversing text. See attached picture below. I'm not sure if there's an actual practical use for it, or if it's just neat.<br>
<a target="_blank" rel="noopener noreferrer nofollow" href="styles.png"><img src="styles.png" alt="visualStyling" style="max-width: 100%;"></a><br>
[Figure 4: Visual styles are enabled (top) and disabled (bottom). It's altogether a minor change, but if you're using a classic theme on your computer it may tie things together.]</p>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="rtl.png"><img src="rtl.png" alt="mirror_mode" style="max-width: 100%;"></a><br>
[Figure 5: The File Manager window has been mirrored! Text is still rendered in the correct left-to-right fashion, but menu items and buttons are right-to-left ordered.]</p>
<pre><code>DisableVisualStyles=1
MirrorContent=0
</code></pre>
<h3>Fun with Fonts</h3>
<p><strong>Face</strong> sets the font face used by File Manager. Note: it uses the name of the font as shown in the font picker, and not the filename of a font, so the font has to be installed in the system to use. <strong>Size</strong> sets the font size. These are probably the only two you should mess with.</p>
<p><strong>LowerCase</strong> controls whether or not Italic/Oblique fonts are used. Oh, and also makes every thing lowercase. It's pulling double duty. Default value is 0. Add 1 to the value to make FAT formatted drives display in lowercase. Add 8 to the value to make all drives display in lowercase. Add 4 to the value to make the font italic. So, for example, to make the font italic <em>and</em> have FAT drives display lowercase, set the value to 5. <strong>Weight</strong> sets the font weight used. What values are valid? Depends on the font. For example, in Segoe UI a value of 300 corresponds to light, 350 semilight, 400 regular, 700 semibold. Different fonts have different values. Frankly, I suggest just omitting this property entirely.</p>
<pre><code>Face=Segoe UI
Size=10
LowerCase=0
</code></pre>
<h3>Miscellaneous other tweaks</h3>
<p><strong>UILanguage</strong> sets the language used by File Manager. At, present, to my knowledge anyways, there are seven available language options currently: en-US, zh-CN, he-IL, ja-JP, pl-PL, de-DE, and ko-KR. English (US), Chinese (Simplified), Hebrew, Japanese, Polish, German, and Korean.</p>
<p><code>UILanguage=en-US</code></p>
<p><strong>EditorPath</strong> sets the editor that is executed when the edit command is selected. Contrary to what the name indicates, you might not necessarily need the entire path - if the editor itself is in your path somewhere, you can just put the editor command in alone.<br>
<code>EditorPath=nano</code></p>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="edit.gif"><img src="edit.gif" alt="ezgif com-gif-maker" style="max-width: 100%;"></a><br>
[Figure 6: I have set the default editor to nano. Now, when File Manager is told to edit the the file NOSHARE, the file is automatically opened in the console based text editor nano.]</p>
<p><strong>ScrollOnExpand</strong> determines if the directory tree view scrolls automatically when you expand a folder in the tree. The default behavior (1) is that it does scroll automatically putting the directory you expanded at the top of the view. You can disable this behavior by setting the value to 0.<br>
Note: at the time of writing, this behavior is not available in the currently released version. I'm led to believe that the changes necessary have been implemented if you build from source, and it could turn up in a theoretical future release.</p>
<p><code>ScrollOnExpand = 0</code></p>
</body>
</html>


================================================
FILE: nuget/LICENSE.txt
================================================

From: https://github.com/Microsoft/winfile/raw/master/LICENSE

LICENSE

    MIT License

    Copyright (c) Microsoft Corporation. All rights reserved.

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE



================================================
FILE: nuget/VERIFICATION.txt
================================================

VERIFICATION
Verification is intended to assist the Chocolatey moderators and community
in verifying that this package's contents are trustworthy.
 
    Verify authenticode signature signed by :
	
	CN = Microsoft 3rd Party Application Component
	O = Microsoft Corporation
	L = Redmond
	S = Washington
	C = US


================================================
FILE: nuget/winfile.nuspec
================================================
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>winfile</id>
    <version>10.4.0.0</version>
    <title>WinFile</title>
    <authors>Microsoft, WinFile OSS Contributors</authors>
    <owners>https://github.com/craigwi</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <bugTrackerUrl>https://github.com/Microsoft/winfile/issues</bugTrackerUrl>
    <iconUrl>https://github.com/Microsoft/winfile/blob/master/winfile.png</iconUrl>
    <licenseUrl>https://github.com/Microsoft/winfile/raw/master/LICENSE</licenseUrl>
    <projectSourceUrl>https://github.com/Microsoft/winfile</projectSourceUrl>
    <projectUrl>https://github.com/Microsoft/winfile</projectUrl>
    <releaseNotes>https://github.com/Microsoft/winfile/releases</releaseNotes>
    <description>Windows File Manager (WinFile) was originally released with Windows 3.0 in the early 1990s. You can read more about the history at https://en.wikipedia.org/wiki/Windows_File_Manager.</description>
    <summary>WinFile is the predecessor to the Windows Explorer and now runs on modern Windows, including Windows 10.</summary>
    <copyright>Copyright (c) Microsoft Corporation. All rights reserved.</copyright>
    <tags>file manager utilities tools</tags>
    <dependencies>
      <dependency id='vcredist140' version='14.38.33135' />
    </dependencies>
  </metadata>
  <files>
    <file src="LICENSE.txt" target="legal\LICENSE.txt" />
    <file src="VERIFICATION.txt" target="legal\VERIFICATION.txt" />
    <file src="x86\Winfile.exe" target="tools\x86\Winfile.exe" />
    <file src="x86\Winfile.pdb" target="tools\x86\Winfile.pdb" />
    <file src="help\winfile.chm" target="tools\x86\winfile.chm" />
    <file src="x64\Winfile.exe" target="tools\x64\Winfile.exe" />
    <file src="x64\Winfile.pdb" target="tools\x64\Winfile.pdb" />
    <file src="arm64\Winfile.exe" target="tools\arm64\Winfile.exe" />
    <file src="arm64\Winfile.pdb" target="tools\arm64\Winfile.pdb" />
  </files>
</package>


================================================
FILE: samples/addon/AddOnSample.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <ClCompile Include="dllmain.cpp" />
    <ClCompile Include="extproc.cpp" />
    <ClCompile Include="stdafx.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="wfext.h">
      <Filter>Headers</Filter>
    </ClInclude>
    <ClInclude Include="stdafx.h">
      <Filter>Headers</Filter>
    </ClInclude>
    <ClInclude Include="targetver.h">
      <Filter>Headers</Filter>
    </ClInclude>
    <ClInclude Include="resource.h">
      <Filter>Resources</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <Filter Include="Resources">
      <UniqueIdentifier>{f6080eb3-5cce-4602-8507-30f028c8d840}</UniqueIdentifier>
    </Filter>
    <Filter Include="Headers">
      <UniqueIdentifier>{4b7508bc-69b1-4a80-92cc-2937c9a43869}</UniqueIdentifier>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="resources.rc">
      <Filter>Resources</Filter>
    </ResourceCompile>
  </ItemGroup>
  <ItemGroup>
    <Image Include="AddonSample.bmp">
      <Filter>Resources</Filter>
    </Image>
    <Image Include="AddonSample.ico">
      <Filter>Resources</Filter>
    </Image>
  </ItemGroup>
</Project>

================================================
FILE: samples/addon/AddonSample.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Label="Globals">
    <VCProjectVersion>15.0</VCProjectVersion>
    <ProjectGuid>{B46F5F82-52A4-45CC-9AA3-ADF9EE8E51A3}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>AddonSample</RootNamespace>
    <ProjectName>AddonSample</ProjectName>
  </PropertyGroup>
  <Import Project="..\..\build\Winfile.default.props" />
  <PropertyGroup Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <ClCompile>
      <PrecompiledHeader>Use</PrecompiledHeader>
      <ConformanceMode>true</ConformanceMode>
      <SDLCheck>true</SDLCheck>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
    </Link>
  </ItemDefinitionGroup>
  <Import Project="..\..\build\Winfile.props" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|arm64'">
    <ClCompile>
      <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|arm64'">
    <ClCompile>
      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClInclude Include="resource.h" />
    <ClInclude Include="stdafx.h" />
    <ClInclude Include="targetver.h" />
    <ClInclude Include="wfext.h" />
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="dllmain.cpp" />
    <ClCompile Include="extproc.cpp" />
    <ClCompile Include="stdafx.cpp">
      <PrecompiledHeader>Create</PrecompiledHeader>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="resources.rc" />
  </ItemGroup>
  <ItemGroup>
    <Image Include="AddonSample.bmp" />
    <Image Include="AddonSample.ico" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>


================================================
FILE: samples/addon/dllmain.cpp
================================================
/********************************************************************

   dllmain.cpp

   Windows File Manager Sample Addon : Defines the entry point for the DLL application.

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#include "stdafx.h"

HMODULE hInstance;

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    hInstance = hModule;

    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}



================================================
FILE: samples/addon/extproc.cpp
================================================
/********************************************************************

   extproc.cpp

   Windows File Manager Sample Addon : extension entry point (UNICODE)

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#include "stdafx.h"

extern HMODULE hInstance;
WORD wMenuDelta; 
BOOL fToggle = FALSE; 

/*
LONG CALLBACK FMExtensionProc(HWND hwnd, WORD wMsg, LONG lParam)        -- ANSI
LONG CALLBACK FMExtensionProcW(HWND hwnd, WORD wMsg, LONG lParam)       -- UNICODE

Parameters:
	
	hwnd	Type: HWND
	A window handle to File Manager. 
	An extension uses this handle to specify the parent window for any dialog box or 
	message box it must display, and to send query messages to File Manager.

	wMsg	Type: WORD
	One of the following File Manager messages.

		1 through 99
		User selected an item from the extension-supplied menu. The value is the identifier of the selected menu item.

		FMEVENT_HELPMENUITEM
		User pressed F1 while selecting an extension menu or toolbar command item. Indicates that the extension should call WinHelp appropriately for the command item.

		FMEVENT_HELPSTRING
		User selected an extension menu or toolbar command item. Indicates that the extension should supply a Help string.

		FMEVENT_INITMENU
		User selected the extension's menu. The extension should initialize items in the menu.

		FMEVENT_LOAD
		File Manager is loading the extension DLL and prompts the DLL for information about the menu that the DLL supplies.

		FMEVENT_SELCHANGE
		Selection in the File Manager directory window or Search Results window has changed.

		FMEVENT_TOOLBARLOAD
		File Manager is creating the toolbar and prompts the extension DLL for information about any buttons the DLL adds to the toolbar.

		FMEVENT_UNLOAD
		File Manager is unloading the extension DLL.

		FMEVENT_USER_REFRESH
		User selected the Refresh command from the Window menu. The extension should update items in the menu, if necessary.
	
	lParam		Type: LONG
	Message-specific value.

	Return value	Type: LONG
	Returns a value dependent upon the wMsg parameter message.

    Usage: in order for Windows File Manager to load this dll, add a section to winfile.ini (located in %USERPROFILE%\Roaming\Microsoft\Winfile):

        [Addons]
        ext1=<path to dll>

    The key names ('ext1' in the example) don't matter, but must all be unique within the [Addons] section.  Specifying anything but a full path
    results in undefined behavior currently.

*/
LONG APIENTRY FMExtensionProcW(HWND hwnd, WPARAM wEvent, LPARAM lParam)
{
	// this is to export the function name as plain 'C'
	#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__) // my complain, but compiles well

	LONG returnValue = 0L;
    HMENU hMenu;
    TCHAR szBuf[200];
	
	switch (wEvent)
	{
	case FMEVENT_LOAD: 
		{
			/* File Manager is loading the extension DLL and prompts the DLL for information about the menu that the DLL supplies. */
			wMenuDelta = ((LPFMS_LOAD)lParam)->wMenuDelta; 
			
			/* Fill the FMS_LOAD structure. */ 
			((LPFMS_LOAD) lParam)->dwSize = sizeof(FMS_LOAD); 
			lstrcpy(((LPFMS_LOAD)lParam)->szMenuName, L"AddonSampleMenu");
			
			/* Return the handle to the menu. */ 
			HMENU hm = GetSubMenu(LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU)), 0); // IDR_MENU from resource.h

			((LPFMS_LOAD)lParam)->hMenu = hm;
			
			returnValue = (LONG)TRUE; 
		}
		break;
	case FMEVENT_UNLOAD: 
		{
			/* File Manager is unloading the extension DLL. */
		}
		break; 
	case FMEVENT_INITMENU: 
		{
			/* User selected the extension's menu. The extension should initialize items in the menu. */

			hMenu = (HMENU) lParam; 

			// Add check marks to menu items as appropriate. 
			// Add menu-item delta values to menu-item 
			// identifiers to specify the menu items to check.
			CheckMenuItem(hMenu, wMenuDelta + IDM_TOGGLE,  fToggle ? MF_BYCOMMAND | MF_CHECKED : MF_BYCOMMAND | MF_UNCHECKED); 
		}
		break; 
	case FMEVENT_TOOLBARLOAD: 
		{
			/* File Manager is creating the toolbar and prompts the extension DLL for information about any buttons the DLL adds to the toolbar. */
			/* Gets called before winfile shows the toolbar. */
			
			// EXT_BUTTON:
            // Parameter 1: <id>
            // Parameter 2: <help string id>
			// Parameter 3: 0=normal, 1=invisible/separator, 2=pressed-not pressed
			static EXT_BUTTON extbtn[ ] = { { IDM_FIRSTBUTTON, 0, 0} }; 
			
			// Fill the FMS_TOOLBARLOAD structure.
			((LPFMS_TOOLBARLOAD)lParam)->dwSize = sizeof(FMS_TOOLBARLOAD); 
			((LPFMS_TOOLBARLOAD)lParam)->lpButtons = (LPEXT_BUTTON) &extbtn; 
			((LPFMS_TOOLBARLOAD)lParam)->cButtons = 1; // Number of buttons in the list (incl. Seperator)
			((LPFMS_TOOLBARLOAD)lParam)->cBitmaps = 1; // Number of Buttons, shown with the current image
			((LPFMS_TOOLBARLOAD)lParam)->idBitmap = IDB_TEST; //IDB_TEST from resource.h 
			
			returnValue = (LONG)TRUE; 
		}
		break;
	case FMEVENT_USER_REFRESH: 
		{
			/* User selected the Refresh command from the Window menu. The extension should update items in the menu, if necessary. */
		}
		break; 
	case FMEVENT_SELCHANGE: 
		{
			/* Selection in the File Manager directory window or Search Results window has changed. */
			/* reacts only on the right half of the window and only left click */
		}
		break; 
	case FMEVENT_HELPSTRING:
		{
			/* User selected an extension menu or toolbar command item. Indicates that the extension should supply a Help string. */

			if ( ((LPFMS_HELPSTRING)lParam)->idCommand == -1 )
			{
				lstrcpy(((LPFMS_HELPSTRING)lParam)->szHelp, L"The mouse is over the menu item (Extension)."); 
			}
			else 
			{
				wsprintf(((LPFMS_HELPSTRING)lParam)->szHelp, L"Tooltip for item %d", ((LPFMS_HELPSTRING)lParam)->idCommand); 
			}
		}
		break; 
	case FMEVENT_HELPMENUITEM: 
		{
			/* 
			User pressed F1 while selecting an extension menu or toolbar command item. 
			Indicates that the extension should call WinHelp appropriately for the command item. 
			*/
			wsprintf(szBuf, L"Help for %d", lParam); 
			MessageBox(hwnd, szBuf, L"WinHelp call", MB_OK); 
			/* Use: WinHelp(hwnd, "ExtHelp.hlp", HELP_CONTEXT, lParam);  */ 
		}
		break; 
	// ***** Till here FMEVENT_... *****
	// now the handling of the self defined actions
	case IDM_FIRSTBUTTON: // (1)
		{
			INT focus = (INT)SendMessage(hwnd, FM_GETFOCUS, 0, 0);

			switch( focus ) 
			{
			case FMFOCUS_DIR:
				MessageBox(hwnd, L"Focus is on the right side.", L"Test-Plugin", MB_OK); 
				break;
			case FMFOCUS_TREE:
				MessageBox(hwnd, L"Focus is on the left side.", L"Test-Plugin", MB_OK); 
				break;
			};
		}
		break; 
	case IDM_TESTMENU: 
		{
			MessageBox(hwnd, L"Hi test!", L"IDM_TESTMENU", MB_OK);
		}
		break; 
	case IDM_TOGGLE: 
		{
			MessageBox(hwnd, fToggle ? L"Hi On" : L"Hi Off", L"IDM_TOGGLE", MB_OK);
			fToggle = !fToggle; 
		}
		break; 
	default: 
		{
			wsprintf(szBuf, L"Unrecognized idm: %d", (INT) wEvent);
			MessageBox(hwnd, szBuf, L"Error", MB_OK);
		}
		break;
	} 

	return returnValue; 
}


================================================
FILE: samples/addon/resource.h
================================================
/********************************************************************

   resource.h

   Windows File Manager Sample Addon resource definitions

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#define IDR_MENU                        101
#define IDB_TEST                        102

#define IDM_FIRSTBUTTON 1
#define IDM_TESTMENU    2
#define IDM_TOGGLE      8

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC                     1
#define _APS_NEXT_RESOURCE_VALUE        103
#define _APS_NEXT_COMMAND_VALUE         40002
#define _APS_NEXT_CONTROL_VALUE         1000
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif


================================================
FILE: samples/addon/resources.rc
================================================
/********************************************************************

   resources.rc

   Windows File Manager Sample Addon resource definitions

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "windows.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
#pragma code_page(1252)

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

IDR_MENU MENU
BEGIN
    POPUP "AddonSampleMenu"
    BEGIN
        MENUITEM "Test entry 1234", IDM_TESTMENU
        MENUITEM "Toggle", IDM_TOGGLE
    END
END


/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//

IDB_TEST                BITMAP                  "AddonSample.bmp"
#endif    // English resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED



================================================
FILE: samples/addon/stdafx.cpp
================================================
// stdafx.cpp : source file that includes just the standard includes
// Dll1.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"

// NOTE: reference any additional headers you need in STDAFX.H
// and not in this file


================================================
FILE: samples/addon/stdafx.h
================================================
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//

#pragma once

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>


#include "wfext.h"
#include "resource.h"


================================================
FILE: samples/addon/targetver.h
================================================
#pragma once

// Including SDKDDKVer.h defines the highest available Windows platform.

// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.

#include <SDKDDKVer.h>


================================================
FILE: samples/addon/wfext.h
================================================
/********************************************************************

   wfext.h

   Windows File Manager Extensions definitions (Win32 variant)

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#ifndef _INC_WFEXT
#define _INC_WFEXT            /* #defined if wfext.h has been included */

#ifdef __cplusplus            /* Assume C declaration for C++ */
extern "C" {
#endif  /* __cplusplus */

#define MENU_TEXT_LEN           40

#define FMMENU_FIRST            1
#define FMMENU_LAST             99

#define FMEVENT_LOAD            100
#define FMEVENT_UNLOAD          101
#define FMEVENT_INITMENU        102
#define FMEVENT_USER_REFRESH    103
#define FMEVENT_SELCHANGE       104
#define FMEVENT_TOOLBARLOAD     105
#define FMEVENT_HELPSTRING      106
#define FMEVENT_HELPMENUITEM    107

#define FMFOCUS_DIR             1
#define FMFOCUS_TREE            2
#define FMFOCUS_DRIVES          3
#define FMFOCUS_SEARCH          4

#define FM_GETFOCUS           (WM_USER + 0x0200)
#define FM_GETSELCOUNT        (WM_USER + 0x0202)
#define FM_GETSELCOUNTLFN     (WM_USER + 0x0203)  /* LFN versions are odd */
#define FM_REFRESH_WINDOWS    (WM_USER + 0x0206)
#define FM_RELOAD_EXTENSIONS  (WM_USER + 0x0207)

#define FM_GETDRIVEINFOA      (WM_USER + 0x0201)
#define FM_GETFILESELA        (WM_USER + 0x0204)
#define FM_GETFILESELLFNA     (WM_USER + 0x0205)  /* LFN versions are odd */

#define FM_GETDRIVEINFOW      (WM_USER + 0x0211)
#define FM_GETFILESELW        (WM_USER + 0x0214)
#define FM_GETFILESELLFNW     (WM_USER + 0x0215)  /* LFN versions are odd */

#ifdef UNICODE
#define FM_GETDRIVEINFO    FM_GETDRIVEINFOW
#define FM_GETFILESEL      FM_GETFILESELW
#define FM_GETFILESELLFN   FM_GETFILESELLFNW
#else
#define FM_GETDRIVEINFO    FM_GETDRIVEINFOA
#define FM_GETFILESEL      FM_GETFILESELA
#define FM_GETFILESELLFN   FM_GETFILESELLFNA
#endif


typedef struct _FMS_GETFILESELA {
   FILETIME ftTime;
   DWORD dwSize;
   BYTE bAttr;
   CHAR szName[260];          // always fully qualified
} FMS_GETFILESELA, FAR *LPFMS_GETFILESELA;

typedef struct _FMS_GETFILESELW {
   FILETIME ftTime ;
   DWORD dwSize;
   BYTE bAttr;
   WCHAR szName[260];          // always fully qualified
} FMS_GETFILESELW, FAR *LPFMS_GETFILESELW;

#ifdef UNICODE
#define FMS_GETFILESEL   FMS_GETFILESELW
#define LPFMS_GETFILESEL LPFMS_GETFILESELW
#else
#define FMS_GETFILESEL   FMS_GETFILESELA
#define LPFMS_GETFILESEL LPFMS_GETFILESELA
#endif


typedef struct _FMS_GETDRIVEINFOA {      // for drive
   DWORD dwTotalSpace;
   DWORD dwFreeSpace;
   CHAR  szPath[260];                    // current directory
   CHAR  szVolume[14];                   // volume label
   CHAR  szShare[128];                   // if this is a net drive
} FMS_GETDRIVEINFOA, FAR *LPFMS_GETDRIVEINFOA;

typedef struct _FMS_GETDRIVEINFOW {      // for drive
   DWORD dwTotalSpace;
   DWORD dwFreeSpace;
   WCHAR szPath[260];                    // current directory
   WCHAR szVolume[14];                   // volume label
   WCHAR szShare[128];                   // if this is a net drive
} FMS_GETDRIVEINFOW, FAR *LPFMS_GETDRIVEINFOW;

#ifdef UNICODE
#define FMS_GETDRIVEINFO   FMS_GETDRIVEINFOW
#define LPFMS_GETDRIVEINFO LPFMS_GETDRIVEINFOW
#else
#define FMS_GETDRIVEINFO   FMS_GETDRIVEINFOA
#define LPFMS_GETDRIVEINFO LPFMS_GETDRIVEINFOA
#endif


typedef struct _FMS_LOADA {
   DWORD dwSize;                        // for version checks
   CHAR  szMenuName[MENU_TEXT_LEN];     // output
   HMENU hMenu;                         // output
   UINT  wMenuDelta;                    // input
} FMS_LOADA, FAR *LPFMS_LOADA;

typedef struct _FMS_LOADW {
   DWORD dwSize;                        // for version checks
   WCHAR szMenuName[MENU_TEXT_LEN];     // output
   HMENU hMenu;                         // output
   UINT  wMenuDelta;                    // input
} FMS_LOADW, FAR *LPFMS_LOADW;

#ifdef UNICODE
#define FMS_LOAD   FMS_LOADW
#define LPFMS_LOAD LPFMS_LOADW
#else
#define FMS_LOAD   FMS_LOADA
#define LPFMS_LOAD LPFMS_LOADA
#endif


// Toolbar definitions

typedef struct tagEXT_BUTTON {
   WORD idCommand;                 /* menu command to trigger */
   WORD idsHelp;                   /* help string ID */
   WORD fsStyle;                   /* button style */
} EXT_BUTTON, FAR *LPEXT_BUTTON;

typedef struct tagFMS_TOOLBARLOAD {
   DWORD dwSize;                   /* for version checks */
   LPEXT_BUTTON lpButtons;         /* output */
   WORD cButtons;                  /* output, 0==>no buttons */
   WORD cBitmaps;                  /* number of non-sep buttons */
   WORD idBitmap;                  /* output */
   HBITMAP hBitmap;                /* output if idBitmap==0 */
} FMS_TOOLBARLOAD, FAR *LPFMS_TOOLBARLOAD;

typedef struct tagFMS_HELPSTRINGA {
   INT   idCommand;       /* input, -1==>the menu was selected */
   HMENU hMenu;           /* input, the extensions menu */
   CHAR  szHelp[128];     /* output, the help string */
} FMS_HELPSTRINGA, FAR *LPFMS_HELPSTRINGA;

typedef struct tagFMS_HELPSTRINGW {
   INT   idCommand;       /* input, -1==>the menu was selected */
   HMENU hMenu;           /* input, the extensions menu */
   WCHAR szHelp[128];     /* output, the help string */
} FMS_HELPSTRINGW, FAR *LPFMS_HELPSTRINGW;

#ifdef UNICODE
#define FMS_HELPSTRING   FMS_HELPSTRINGW
#define LPFMS_HELPSTRING LPFMS_HELPSTRINGW
#else
#define FMS_HELPSTRING   FMS_HELPSTRINGA
#define LPFMS_HELPSTRING LPFMS_HELPSTRINGA
#endif


typedef DWORD (APIENTRY *FM_EXT_PROC)(HWND, WPARAM, LPARAM);
typedef DWORD (APIENTRY *FM_UNDELETE_PROC)(HWND, LPTSTR);

#ifdef UNICODE
LONG WINAPI FMExtensionProcW(HWND hwnd, WPARAM wEvent, LPARAM lParam);
#else
LONG WINAPI FMExtensionProc(HWND hwnd, WPARAM wEvent, LPARAM lParam);
#endif

#ifdef __cplusplus
}                  /* End of extern "C" { */
#endif             /* __cplusplus */

#endif             /* _INC_WFEXT */



================================================
FILE: src/BagOValues.h
================================================
/********************************************************************

   BagOValues.h

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#include <string>
#include <map>
#include <vector>
#include <algorithm>

#include "spinlock.h"

using namespace std;

template <class TValue>
class BagOValues
{
	typedef pair<wstring, TValue> TPair;
	typedef vector<TPair> TVector;
	typedef typename TVector::const_iterator TItr;

	SpinLock m_spinlock;
	TVector m_Values;
	wstring m_lastStr;
	TItr m_LastItr;

public:
	BagOValues()
	{
	}

	// copies the value, but doesn't assume any memory management needs be done
	void Add(wstring key, TValue value)
	{
		this->m_spinlock.Lock();
		wstring lowered;
		lowered.resize(key.size());
		transform(std::begin(key), std::end(key), std::begin(lowered), ::tolower);
		m_Values.emplace_back(make_pair(std::move(lowered), value));

		m_lastStr.resize(0);	// clear this after new data added
		this->m_spinlock.Unlock();
	}

	void Sort()
	{
		this->m_spinlock.Lock();
		sort(m_Values.begin(), m_Values.end());
		this->m_spinlock.Unlock();
	}

	// Retrieve with fPrefix = true means return values for the tree at the point of the query matched; 
	//      we must consume the whole query for anything to be returned
	// fPrefix = false means that we only return values when an entire key matches and we match substrings of the query
	//
	// NOTE: returns a newly allocated vector; must delete it
	vector<TValue> Retrieve(const wstring& query, bool fPrefix = true, unsigned maxResults = ULONG_MAX)
	{
		wstring lowered;
		lowered.resize(query.size());
		transform(std::cbegin(query), std::cend(query), std::begin(lowered), ::tolower);

		vector<TValue> results;
		TValue val = TValue();
		TPair laspair = make_pair(lowered, val);

		this->m_spinlock.Lock();

		// if last saved string/iterator is a prefix of the new string, start there
		TItr itr;
		if (m_lastStr.size() != 0 && lowered.compare(0, m_lastStr.size(), m_lastStr) == 0)
			itr = m_LastItr;
		else
		{
			itr = lower_bound(m_Values.begin(), m_Values.end(), laspair, CompareFirst);

			m_lastStr = lowered;
			m_LastItr = itr;
		}

		for (; itr != m_Values.end(); itr++)
		{
			const wstring& key = itr->first;
			int cmp = key.compare(0, lowered.size(), lowered);
			if (cmp == 0)
			{
				if (!fPrefix && key.size() != lowered.size())
				{
					// need exact match (not just prefix); skip
					continue;
				}

				if (results.size() >= maxResults)
					break;

				results.push_back(itr->second);
			}
			else if (cmp > 0)
			{
				// iterated past the strings which match on the prefix
				break;
			}
		}

		this->m_spinlock.Unlock();
		return results;
	}

private:
	static bool CompareFirst(const TPair& a, const TPair& b)
	{
		return a.first < b.first;
	}
};



================================================
FILE: src/Resize.c
================================================

//
//  Demonstration code for a generic implementation of resizeable dialogs.
//  This code implements a window class (DIALOGRESIZECONTROLCLASS) which
//  can be added to dialog templates in order to define how controls
//  should be moved or resized as the dialog is resized.  An example
//  statement looks like:
//
//  DIALOGRESIZECONTROL { A, B, C, D }
//
//  Where:
//    A is the percentage of the new area to move the following control right;
//    B is the percentage of the new area to move the following control down;
//    C is the percentage of the new area to add to the following control's width;
//    D is the percentage of the new area to add to the following control's height.
//
//  Optionally, a second class is provided (DIALOGRESIZEDATACLASS) which
//  allows the resource to specify the bounds that the dialog can be resized
//  to.  By default the dialog can be resized freely.  An example statement
//  looks like:
//
//  DIALOGRESIZE { A, B }
//
//  Where:
//    A is the maximum percentage of the initial width allowable, or 0 if
//      unbounded;
//    B is the maximum percentage of the initial height allowable, or 0 if
//      unbounded.
//
//  Malcolm Smith, 11 Sep 2010
//

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include "Resize.h"

//
//  For older 32-bit compilers, we won't have 64-bit support.  Use the 32-bit
//  variants; lack of 64-bit support doesn't matter when we're targeting
//  32-bit.
//

#ifndef SetWindowLongPtr
#define LONG_PTR LONG
#define DWLP_MSGRESULT DWL_MSGRESULT
#define DWLP_USER DWL_USER
#define SetWindowLongPtr( HWND, INDEX, DATA ) SetWindowLong( HWND, INDEX, DATA )
#define GetWindowLongPtr( HWND, INDEX ) GetWindowLong( HWND, INDEX )
#endif

#ifndef WS_EX_LAYOUTRTL
#define WS_EX_LAYOUTRTL         0x00400000L
#endif

//
//  This is the only window message defined by our resize dialog control class,
//  and it's fully internal.  We send this to each resize control to take care
//  of its buddy.
//

#define WM_RESIZEPARENT WM_USER

//
//  This is the only window message defined by our resize dialog data class,
//  and it's fully internal.  We send this to locate the user data that was
//  given to the control by the dialog manager.
//

#define WM_GETDIALOGMETADATA WM_USER

//
//  The following structure is allocated and stored uniquely for each
//  resizeable dialog that is currently active.  It describes the state
//  of the dialog when it was created.
//

#pragma pack(push, 2)
typedef struct _RESIZE_DIALOG_INFO {
    RECT  InitialClientRect;
    RECT  InitialWindowRect;
    HDWP  hDwp;
    ULONG NumberResizeControlsPresent;
} RESIZE_DIALOG_INFO, *PRESIZE_DIALOG_INFO;

//
//  This describes the data being passed into our resize metadata control
//  from the dialog manager as part of its creation (only on Windows NT and
//  successor systems.)  On Windows 95 and its successors, we lose all the
//  information we need to perform layout management, and this module is
//  effectively useless.
//

typedef struct _RESIZE_DIALOG_DATA_CREATION_INFO {
    USHORT SizeOfData;
    USHORT MaximumWidthPercent;
    USHORT MaximumHeightPercent;
} RESIZE_DIALOG_DATA_CREATION_INFO, *PRESIZE_DIALOG_DATA_CREATION_INFO;

//
//  This structure is attached to each resize metadata control.  It saves
//  off the bounds of the size that the dialog can accept.
//

typedef struct _RESIZE_DIALOG_DATA_WINDOW_EXTRA {
    USHORT MaximumWidthPercent;
    USHORT MaximumHeightPercent;
} RESIZE_DIALOG_DATA_WINDOW_EXTRA, *PRESIZE_DIALOG_DATA_WINDOW_EXTRA;

//
//  This structure is attached to each resize helper control.  It saves off
//  the initial size of its buddy and the amount of adjustment to apply to
//  the buddy when a resize occurs.
//

typedef struct _RESIZE_DIALOG_CONTROL_WINDOW_EXTRA {
    SMALL_RECT AdjustmentToBuddyRect;
    RECT InitialBuddyRect;
    BOOLEAN BuddyInitialized;
    BOOLEAN AlignmentPadding;
} RESIZE_DIALOG_CONTROL_WINDOW_EXTRA, *PRESIZE_DIALOG_CONTROL_WINDOW_EXTRA;
#pragma pack(pop)

//
//  This describes the data being passed into our resize helper control from
//  the dialog manager as part of its creation (only on Windows NT and
//  successor systems.)  On Windows 95 and its successors, we lose all the
//  information we need to perform layout management, and this module is
//  effectively useless.
//

#pragma pack( push )
#pragma pack( 2 )
typedef struct _RESIZE_DIALOG_CONTROL_CREATION_INFO {
    USHORT SizeOfData;
    SMALL_RECT AdjustmentToBuddyRect;
} RESIZE_DIALOG_CONTROL_CREATION_INFO, *PRESIZE_DIALOG_CONTROL_CREATION_INFO;
#pragma pack( pop )

BOOL CALLBACK
ProcessResizeOnChildren( HWND hChildWnd, LPARAM lParam );

BOOL CALLBACK
FindMetadataFromChildren( HWND hChildWnd, LPARAM lParam );

#ifdef DFC_SCROLL

//
//  This will display a sizing grip at the appropriate location on the dialog.
//
BOOL
RenderSizingGrip( HWND hDlg )
{
    RECT SizeGripArea;
    PAINTSTRUCT PaintStruct;
    HDC hDC;
    DWORD SizeBoxSize;

    //
    //  If the dialog isn't resizable, don't render the grip.
    //

    if ((GetWindowLong( hDlg, GWL_STYLE ) & WS_THICKFRAME) == 0) {
        return TRUE;
    }

    GetClientRect( hDlg, &SizeGripArea );

    SizeBoxSize = GetSystemMetrics( SM_CXHSCROLL );

    SizeGripArea.left = SizeGripArea.right - SizeBoxSize;
    SizeGripArea.top = SizeGripArea.bottom - SizeBoxSize;

    InvalidateRect( hDlg, &SizeGripArea, TRUE );

    hDC = BeginPaint( hDlg, &PaintStruct );

    DrawFrameControl( hDC, &SizeGripArea, DFC_SCROLL, DFCS_SCROLLSIZEGRIP );

    EndPaint( hDlg, &PaintStruct );

    return TRUE;
}

//
//  This will force the sizing grip to be redisplayed on resize
//
BOOL
InvalidateSizingGrip( HWND hWnd, PRECT NewSize )
{
    RECT SizeGripArea;
    DWORD SizeBoxSize;

    //
    //  First invalidate the old location of the grip.
    //

    GetClientRect( hWnd, &SizeGripArea );

    SizeBoxSize = GetSystemMetrics( SM_CXHSCROLL );

    SizeGripArea.left = SizeGripArea.right - SizeBoxSize;
    SizeGripArea.top = SizeGripArea.bottom - SizeBoxSize;

    InvalidateRect( hWnd, &SizeGripArea, FALSE );

    //
    //  Now invalidate the new location of the grip.
    //

    SizeGripArea = *NewSize;

    SizeGripArea.left = SizeGripArea.right - SizeBoxSize;
    SizeGripArea.top = SizeGripArea.bottom - SizeBoxSize;

    InvalidateRect( hWnd, &SizeGripArea, FALSE );

    return TRUE;
}

//
//  This will check if we're within the sizing grip, so that the
//  resize action will be performed if the user attempts to drag
//
BOOL
IsWithinSizingGrip( HWND hWnd, DWORD OriginalPoint )
{
    RECT SizeGripArea;
    DWORD SizeBoxSize;
    POINT MousePoint;

    //
    //  If the dialog isn't resizable, we have no grip.
    //

    if ((GetWindowLong( hWnd, GWL_STYLE ) & WS_THICKFRAME) == 0) {
        return FALSE;
    }

    MousePoint.x = GET_X_LPARAM( OriginalPoint );
    MousePoint.y = GET_Y_LPARAM( OriginalPoint );

    ScreenToClient( hWnd, &MousePoint );

    GetClientRect( hWnd, &SizeGripArea );

    SizeBoxSize = GetSystemMetrics( SM_CXHSCROLL );

    SizeGripArea.left = SizeGripArea.right - SizeBoxSize;
    SizeGripArea.top = SizeGripArea.bottom - SizeBoxSize;

    //
    //  We're in the right spot if the mouse is over the lower-right half
    //  of the sizing grip rectangle.  The first two checks place us in
    //  the rectangle, the final is to check if we're in the lower-right
    //  half.
    //

    if (MousePoint.x > SizeGripArea.left && MousePoint.x <= SizeGripArea.right &&
        MousePoint.y > SizeGripArea.top && MousePoint.y <= SizeGripArea.bottom &&
        (DWORD)(MousePoint.x + MousePoint.y - SizeGripArea.left - SizeGripArea.top) > SizeBoxSize) {

        if (GetWindowLong( hWnd, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL) {
            SetWindowLongPtr( hWnd, DWLP_MSGRESULT, HTBOTTOMLEFT );
        } else {
            SetWindowLongPtr( hWnd, DWLP_MSGRESULT, HTBOTTOMRIGHT );
        }
        return TRUE;
    }

    return FALSE;
}

#else

#define IsWithinSizingGrip(a, b) (FALSE)
#define InvalidateSizingGrip(a, b) (FALSE)
#define RenderSizingGrip(a) (TRUE)

#endif

//
//  This code is called by the dialog when processing its messages.  It
//  performs dialog-level operations. Returns TRUE to indicate that it
//  has processed a message and the caller should not continue; FALSE
//  indicates no processing or that the caller may continue
//

BOOL CALLBACK
ResizeDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    PRESIZE_DIALOG_INFO DialogInfo;

    UNREFERENCED_PARAMETER(wParam);

    switch( uMsg ) {

        //
        //  We're done and need to clean up any state.
        //

        case WM_DESTROY:

            DialogInfo = (PRESIZE_DIALOG_INFO)GetWindowLongPtr( hDlg, DWLP_USER );

            if (DialogInfo != NULL) {
                HeapFree( GetProcessHeap(), 0, DialogInfo );
            }

            SetWindowLongPtr( hDlg, DWLP_USER, 0 );

            return FALSE;

        //
        //  We have to make sure we don't resize smaller than the initial
        //  size.  The layout management is concerned with how to allocate
        //  additional size - it won't work well if that additional size
        //  is less than zero.
        //

        case WM_GETMINMAXINFO:
            {
                LPMINMAXINFO MinMaxInfo = (LPMINMAXINFO)lParam;
                PRESIZE_DIALOG_DATA_WINDOW_EXTRA ExtraData = NULL;
                DialogInfo = (PRESIZE_DIALOG_INFO)GetWindowLongPtr( hDlg, DWLP_USER );

                EnumChildWindows( hDlg, FindMetadataFromChildren, (LPARAM)&ExtraData );

                if (ExtraData != NULL) {

                    if (ExtraData->MaximumWidthPercent != 0) {

                        MinMaxInfo->ptMaxTrackSize.x = (DialogInfo->InitialWindowRect.right - DialogInfo->InitialWindowRect.left) * ExtraData->MaximumWidthPercent / 100;

                    }

                    if (ExtraData->MaximumHeightPercent != 0) {

                        MinMaxInfo->ptMaxTrackSize.y = (DialogInfo->InitialWindowRect.bottom - DialogInfo->InitialWindowRect.top) * ExtraData->MaximumHeightPercent / 100;

                    }
                }
                MinMaxInfo->ptMinTrackSize.x = DialogInfo->InitialWindowRect.right - DialogInfo->InitialWindowRect.left;
                MinMaxInfo->ptMinTrackSize.y = DialogInfo->InitialWindowRect.bottom - DialogInfo->InitialWindowRect.top;
                return TRUE;
            }

        //
        //  Display and give effect to the sizing grip
        //

        case WM_PAINT:
            if (GetUpdateRect( hDlg, NULL, FALSE )) {
                RenderSizingGrip( hDlg );
            }
            return FALSE;

        case WM_NCHITTEST:
            return IsWithinSizingGrip( hDlg, (DWORD)lParam );

#ifdef WM_SIZING
        case WM_SIZING:
            InvalidateSizingGrip( hDlg, (PRECT)lParam );
            return FALSE;
#endif

        //
        //  Save off the initial window size and client area.  We use the
        //  initial window size to ensure the window can't be shrunk
        //  smaller than it, and we use the initial client size to
        //  determine how much the window is growing.
        //

        case WM_INITDIALOG:
            DialogInfo = (PRESIZE_DIALOG_INFO)HeapAlloc( GetProcessHeap(), 0, sizeof(*DialogInfo) );
            
            if (DialogInfo == NULL) {
                EndDialog( hDlg, -1 );
                return TRUE;
            }
            
            GetClientRect( hDlg, &DialogInfo->InitialClientRect );
            GetWindowRect( hDlg, &DialogInfo->InitialWindowRect );

            DialogInfo->NumberResizeControlsPresent = 0;

            SetWindowLongPtr( hDlg, DWLP_USER, (LONG_PTR)DialogInfo );
            break;

        //
        //  The user changed the size of the window.  Walk through all
        //  the resize helper controls and tell them this happened, and
        //  how big we were when created.  From there, the helper controls
        //  can resize their associated buddy controls appropriately.
        //

        case WM_SIZE:

            DialogInfo = (PRESIZE_DIALOG_INFO)GetWindowLongPtr( hDlg, DWLP_USER );

            RenderSizingGrip( hDlg );

            //
            //  If we "know" how many controls are present, use that.  If
            //  we don't know, start with a sensible default.
            //

            if (DialogInfo->NumberResizeControlsPresent != 0) {
                DialogInfo->hDwp = BeginDeferWindowPos( DialogInfo->NumberResizeControlsPresent );
            } else {
                DialogInfo->hDwp = BeginDeferWindowPos( 20 );
            }

            //
            //  We're enumerating again, and recalculating the current
            //  number of resize controls.
            //

            DialogInfo->NumberResizeControlsPresent = 0;

            EnumChildWindows( hDlg, ProcessResizeOnChildren, (LPARAM)DialogInfo );

            //
            //  It's possible that controls have been added or our initial
            //  guess was wrong, and we couldn't dynamically add space to
            //  accommodate the new controls.  In that case, start over
            //  and don't use the DeferWindowPos optimization.
            //

            if (DialogInfo->hDwp) {
                EndDeferWindowPos( DialogInfo->hDwp );
                DialogInfo->hDwp = NULL;
            } else {
                DialogInfo->NumberResizeControlsPresent = 0;
                EnumChildWindows( hDlg, ProcessResizeOnChildren, (LPARAM)DialogInfo );
            }
            return FALSE;

    }
    return FALSE;
}

//
//  We use this to walk through all the controls on the dialog and send the
//  appropriate messages to our resize helper controls to fix things up.
//

BOOL CALLBACK
FindMetadataFromChildren( HWND hChildWnd, LPARAM lParam )
{
    WCHAR szText[100];
    int CharsCopied;

    //
    //  GetClassName expects a count of characters, so we dance in case
    //  we're Unicode.
    //

    if (IsWindowUnicode( hChildWnd )) {

        CharsCopied = GetClassNameW( hChildWnd, (PWCHAR)szText, sizeof( szText ) / sizeof( WCHAR ));

        //
        //  If we couldn't get this into our buffer, assume it's not our
        //  class, but keep enumerating.
        //

        if (CharsCopied == 0 || CharsCopied >= (sizeof( szText ) / sizeof( WCHAR ))) {
            return TRUE;
        }

        //
        //  We only need to find one per-dialog metadata class.  If we
        //  find it, we're done.
        //

        if (wcscmp( (PWCHAR)szText, DIALOGRESIZEDATACLASSW ) == 0) {
            SendMessage( hChildWnd, WM_GETDIALOGMETADATA, 0, lParam );
            return FALSE;
        }

    } else {

        CharsCopied = GetClassNameA( hChildWnd, (PCHAR)szText, sizeof( szText ) / sizeof( CHAR ));

        //
        //  If we couldn't get this into our buffer, assume it's not our
        //  class, but keep enumerating.
        //

        if (CharsCopied == 0 || CharsCopied >= (sizeof( szText ) / sizeof( CHAR ))) {
            return TRUE;
        }

        //
        //  We only need to find one per-dialog metadata class.  If we
        //  find it, we're done.
        //

        if (strcmp( (PCHAR)szText, DIALOGRESIZEDATACLASSA ) == 0) {
            SendMessage( hChildWnd, WM_GETDIALOGMETADATA, 0, lParam );
            return FALSE;
        }
    }

    return TRUE;
}

//
//  This control exists once per resizeable dialog and specifies metadata
//  about how the dialog can be resized.
//

LRESULT CALLBACK
ResizeDialogDataWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    PRESIZE_DIALOG_DATA_WINDOW_EXTRA ExtraData;

    switch( uMsg ) {
        case WM_CREATE:
        {
            LPCREATESTRUCT CreateStruct;
            PRESIZE_DIALOG_DATA_CREATION_INFO CreationInfo;

            //
            //  Allocate memory and save off the additional parameters
            //  defined for the resize metadata control.  These define
            //  how much the dialog can be resized by.
            //

            CreateStruct = (LPCREATESTRUCT)lParam;
            CreationInfo = (PRESIZE_DIALOG_DATA_CREATION_INFO)CreateStruct->lpCreateParams;

            ExtraData = (PRESIZE_DIALOG_DATA_WINDOW_EXTRA)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ExtraData) );
            if (ExtraData == NULL) {
                return -1;
            }

            //
            //  A dialog metadata control takes two WORDs as arguments to
            //  define how much the dialog should be resized.  Accordingly,
            //  if we have less than 2 * sizeof(WORD), we don't have enough
            //  data to operate.  Windows 95 and successor systems won't pass
            //  us this information through the dialog template, so if we
            //  have nothing, we don't allow the dialog to be resized.
            //

            if (CreationInfo != NULL && CreationInfo->SizeOfData >= (sizeof(WORD) * 2)) {

                //
                //  Record the amount to adjust the buddy control, and
                //  attach it to our window data.
                //

                ExtraData->MaximumWidthPercent = CreationInfo->MaximumWidthPercent;
                ExtraData->MaximumHeightPercent = CreationInfo->MaximumHeightPercent;

                //
                //  For sanity, don't allow a maximum size which is smaller
                //  than the minimum size.
                //

                if (ExtraData->MaximumWidthPercent != 0 && ExtraData->MaximumWidthPercent < 100) {
                    ExtraData->MaximumWidthPercent = 100;
                }

                if (ExtraData->MaximumHeightPercent != 0 && ExtraData->MaximumHeightPercent < 100) {
                    ExtraData->MaximumHeightPercent = 100;
                }

            } else {

                //
                //  Don't resize anything.
                //

                ExtraData->MaximumWidthPercent = 100;
                ExtraData->MaximumHeightPercent = 100;
            }

            SetWindowLongPtr( hWnd, 0, (LONG_PTR)ExtraData );
            break;
        }

        case WM_DESTROY:
            
            //
            //  Our resize helper control is being destroyed.  Tear down
            //  any data we're keeping to assist with resize operations.
            //

            ExtraData = (PRESIZE_DIALOG_DATA_WINDOW_EXTRA)GetWindowLongPtr( hWnd, 0 );
            if (ExtraData != NULL) {
                SetWindowLongPtr( hWnd, 0, 0 );
                HeapFree( GetProcessHeap(), 0, ExtraData );
            }
            break;

        case WM_GETDIALOGMETADATA:
        {
            ExtraData = (PRESIZE_DIALOG_DATA_WINDOW_EXTRA)GetWindowLongPtr( hWnd, 0 );
            *(PRESIZE_DIALOG_DATA_WINDOW_EXTRA *)lParam = ExtraData;
            return TRUE;
        }
    }
    return DefWindowProc( hWnd, uMsg, wParam, lParam );
}

//
//  We use this to walk through all the controls on the dialog and send the
//  appropriate messages to our resize helper controls to fix things up.
//

BOOL CALLBACK
ProcessResizeOnChildren( HWND hChildWnd, LPARAM lParam )
{
    WCHAR szText[100];
    int CharsCopied;

    //
    //  GetClassName expects a count of characters, so we dance in case
    //  we're Unicode.
    //

    if (IsWindowUnicode( hChildWnd )) {

        CharsCopied = GetClassNameW( hChildWnd, (PWCHAR)szText, sizeof( szText ) / sizeof( WCHAR ));

        //
        //  If we couldn't get this into our buffer, assume it's not our
        //  class, but keep enumerating.
        //

        if (CharsCopied == 0 || CharsCopied >= (sizeof( szText ) / sizeof( WCHAR ))) {
            return TRUE;
        }

        if (wcscmp( (PWCHAR)szText, DIALOGRESIZECONTROLCLASSW ) == 0) {
            SendMessage( hChildWnd, WM_RESIZEPARENT, 0, lParam );
        }

    } else {

        CharsCopied = GetClassNameA( hChildWnd, (PCHAR)szText, sizeof( szText ) / sizeof( CHAR ));

        //
        //  If we couldn't get this into our buffer, assume it's not our
        //  class, but keep enumerating.
        //

        if (CharsCopied == 0 || CharsCopied >= (sizeof( szText ) / sizeof( CHAR ))) {
            return TRUE;
        }

        if (strcmp( (PCHAR)szText, DIALOGRESIZECONTROLCLASSA ) == 0) {
            SendMessage( hChildWnd, WM_RESIZEPARENT, 0, lParam );
        }
    }

    return TRUE;
}

//
//  The following code deals with how to process resize information for
//  controls on a dialog.
//

LRESULT CALLBACK
ResizeDialogControlWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HWND hWndParent = GetParent( hWnd );

    PRESIZE_DIALOG_CONTROL_WINDOW_EXTRA ExtraData;

    switch( uMsg ) {
        case WM_CREATE:
        {
            LPCREATESTRUCT CreateStruct;
            PRESIZE_DIALOG_CONTROL_CREATION_INFO CreationInfo;

            //
            //  Allocate memory and save off the additional parameters
            //  defined for the resize helper control.  These define how
            //  much of the additional space to allocate to our buddy
            //  control. 
            //

            CreateStruct = (LPCREATESTRUCT)lParam;
            CreationInfo = (PRESIZE_DIALOG_CONTROL_CREATION_INFO)CreateStruct->lpCreateParams;

            ExtraData = (PRESIZE_DIALOG_CONTROL_WINDOW_EXTRA)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ExtraData) );
            if (ExtraData == NULL) {
                return -1;
            }

            //
            //  A dialog resize helper takes four WORDs as arguments
            //  to define how the buddy control should be resized.
            //  Accordingly, if we have less than 4 * sizeof(WORD),
            //  we don't have enough data to operate.  Windows 95 and
            //  successor systems won't pass us this information
            //  through the dialog template, so if we have nothing, we
            //  do nothing but allow the dialog to load.
            //

            if (CreationInfo != NULL && CreationInfo->SizeOfData >= sizeof(CreationInfo->AdjustmentToBuddyRect)) {

                //
                //  Record the amount to adjust the buddy control, and
                //  attach it to our window data.
                //

                ExtraData->AdjustmentToBuddyRect = CreationInfo->AdjustmentToBuddyRect;

            } else {

                //
                //  Don't resize anything.
                //

                ExtraData->AdjustmentToBuddyRect.Left = 0;
                ExtraData->AdjustmentToBuddyRect.Top = 0;
                ExtraData->AdjustmentToBuddyRect.Right = 0;
                ExtraData->AdjustmentToBuddyRect.Bottom = 0;
            }

            SetWindowLongPtr( hWnd, 0, (LONG_PTR)ExtraData );
            break;
        }

        case WM_DESTROY:
            
            //
            //  Our resize helper control is being destroyed.  Tear down
            //  any data we're keeping to assist with resize operations.
            //

            ExtraData = (PRESIZE_DIALOG_CONTROL_WINDOW_EXTRA)GetWindowLongPtr( hWnd, 0 );
            if (ExtraData != NULL) {
                SetWindowLongPtr( hWnd, 0, 0 );
                HeapFree( GetProcessHeap(), 0, ExtraData );
            }
            break;

        case WM_RESIZEPARENT:
        {
            PRESIZE_DIALOG_INFO DialogInfo = (PRESIZE_DIALOG_INFO)lParam;
            HWND hWndBuddy = GetNextWindow( hWnd, GW_HWNDNEXT );
            PRECT InitialParentRect;
            RECT CurrentParentRect;

            DWORD IncreaseHorizontal;
            DWORD IncreaseVertical;

            DWORD NewLeft;
            DWORD NewTop;
            DWORD NewWidth;
            DWORD NewHeight;

            //
            //  Initialize our brains.
            //

            ExtraData = (PRESIZE_DIALOG_CONTROL_WINDOW_EXTRA)GetWindowLongPtr( hWnd, 0 );
            InitialParentRect = &DialogInfo->InitialClientRect;

            //
            //  Count that we were here so the resizer has a good idea of
            //  how many controls to expect next time.
            //

            DialogInfo->NumberResizeControlsPresent++;

            //
            //  If this is the first time we've been sized, it must be for
            //  initial placement.  In that case, save off the initial
            //  location and size of the buddy control so we can transform
            //  it later.
            //

            if (!ExtraData->BuddyInitialized) {
                RECT buddyrect;

                //
                //  GetWindowRect returns coordinates relative to the top
                //  left of the display.  We need to transform this into
                //  coordinates relative to the top left of the dialog.
                //

                GetWindowRect( hWndBuddy, &buddyrect );

                MapWindowPoints( NULL, hWndParent, (LPPOINT)&buddyrect, 2 );

                ExtraData->InitialBuddyRect = buddyrect;

                ExtraData->BuddyInitialized = TRUE;
            }

            //
            //  Find out how big the dialog now is.
            //

            GetClientRect( hWndParent, &CurrentParentRect );

            //
            //  Now calculate how much the dialog has grown by since it
            //  was created.
            //

            IncreaseHorizontal = (CurrentParentRect.right - InitialParentRect->right);
            IncreaseVertical = (CurrentParentRect.bottom - InitialParentRect->bottom);

            //
            //  And from there, calculate where our buddy control belongs.
            //  We take the initial positions and add the adjustment as a percentage.
            //

            NewLeft = ExtraData->InitialBuddyRect.left + IncreaseHorizontal * ExtraData->AdjustmentToBuddyRect.Left / 100;
            NewTop = ExtraData->InitialBuddyRect.top + IncreaseVertical * ExtraData->AdjustmentToBuddyRect.Top / 100;
            NewWidth = (ExtraData->InitialBuddyRect.right - ExtraData->InitialBuddyRect.left) + IncreaseHorizontal * ExtraData->AdjustmentToBuddyRect.Right / 100;
            NewHeight = (ExtraData->InitialBuddyRect.bottom - ExtraData->InitialBuddyRect.top) + IncreaseVertical * ExtraData->AdjustmentToBuddyRect.Bottom / 100;

            //
            //  We're going to be moving and resizing our buddy, so make sure
            //  it repaints itself.
            //

            InvalidateRect( hWndBuddy, NULL, TRUE );

            //
            //  Now position the buddy control.  We will typically optimize this
            //  via DeferWindowPos, which will move all the controls when we're
            //  done; but if we can't do that, we'll move it here.
            //

            if (DialogInfo->hDwp != NULL) {
                DialogInfo->hDwp = DeferWindowPos( DialogInfo->hDwp,
                    hWndBuddy,
                    NULL,
                    NewLeft,
                    NewTop,
                    NewWidth,
                    NewHeight,
                    SWP_NOZORDER | SWP_NOACTIVATE );
            }

            //
            //  If the DeferWindowPos structure was not set up, or if we just
            //  tore it down above by adding more controls than it could deal
            //  with, move manually here.
            //

            if (DialogInfo->hDwp == NULL) {

                MoveWindow( hWndBuddy,
                    NewLeft,
                    NewTop,
                    NewWidth,
                    NewHeight,
                    TRUE );
            }

            break;
        }

    }
    return DefWindowProc( hWnd, uMsg, wParam, lParam );
}


BOOL
ResizeDialogInitialize( HINSTANCE hInst )
{
    WNDCLASSW ResizeDialogClassW;
    WNDCLASSA ResizeDialogClassA;

    //
    //  Here we register our resize helper control class - twice.
    //  Once for unicode, once for non-unicode systems.
    //  This control is used to define how buddy controls should
    //  be manipulated when resizes occur.
    //

    ZeroMemory( &ResizeDialogClassW, sizeof( ResizeDialogClassW ));

    ResizeDialogClassW.style = 0;
    ResizeDialogClassW.lpfnWndProc = ResizeDialogControlWindowProc;
    ResizeDialogClassW.cbClsExtra = 0;
    ResizeDialogClassW.cbWndExtra = sizeof(PVOID);
    ResizeDialogClassW.hInstance = hInst;
    ResizeDialogClassW.hIcon = NULL;
    ResizeDialogClassW.hCursor = NULL;
    ResizeDialogClassW.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    ResizeDialogClassW.lpszMenuName = NULL;
    ResizeDialogClassW.lpszClassName = DIALOGRESIZECONTROLCLASSW;

    RegisterClassW( &ResizeDialogClassW );

    ZeroMemory( &ResizeDialogClassA, sizeof( ResizeDialogClassA ));

    ResizeDialogClassA.style = 0;
    ResizeDialogClassA.lpfnWndProc = ResizeDialogControlWindowProc;
    ResizeDialogClassA.cbClsExtra = 0;
    ResizeDialogClassA.cbWndExtra = sizeof(PVOID);
    ResizeDialogClassA.hInstance = hInst;
    ResizeDialogClassA.hIcon = NULL;
    ResizeDialogClassA.hCursor = NULL;
    ResizeDialogClassA.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    ResizeDialogClassA.lpszMenuName = NULL;
    ResizeDialogClassA.lpszClassName = DIALOGRESIZECONTROLCLASSA;

    RegisterClassA( &ResizeDialogClassA );

    ZeroMemory( &ResizeDialogClassW, sizeof( ResizeDialogClassW ));

    ResizeDialogClassW.style = 0;
    ResizeDialogClassW.lpfnWndProc = ResizeDialogDataWindowProc;
    ResizeDialogClassW.cbClsExtra = 0;
    ResizeDialogClassW.cbWndExtra = sizeof(PVOID);
    ResizeDialogClassW.hInstance = hInst;
    ResizeDialogClassW.hIcon = NULL;
    ResizeDialogClassW.hCursor = NULL;
    ResizeDialogClassW.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    ResizeDialogClassW.lpszMenuName = NULL;
    ResizeDialogClassW.lpszClassName = DIALOGRESIZEDATACLASSW;

    RegisterClassW( &ResizeDialogClassW );

    ZeroMemory( &ResizeDialogClassA, sizeof( ResizeDialogClassA ));

    ResizeDialogClassA.style = 0;
    ResizeDialogClassA.lpfnWndProc = ResizeDialogDataWindowProc;
    ResizeDialogClassA.cbClsExtra = 0;
    ResizeDialogClassA.cbWndExtra = sizeof(PVOID);
    ResizeDialogClassA.hInstance = hInst;
    ResizeDialogClassA.hIcon = NULL;
    ResizeDialogClassA.hCursor = NULL;
    ResizeDialogClassA.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    ResizeDialogClassA.lpszMenuName = NULL;
    ResizeDialogClassA.lpszClassName = DIALOGRESIZEDATACLASSA;

    RegisterClassA( &ResizeDialogClassA );

    return TRUE;
}



================================================
FILE: src/Resize.h
================================================

#define DIALOGRESIZECONTROLCLASSW L"DialogResizeControlClassW"
#define DIALOGRESIZECONTROLCLASSA "DialogResizeControlClassA"

#if defined(UNICODE) || defined(_UNICODE)
#define DIALOGRESIZECONTROLCLASS DIALOGRESIZECONTROLCLASSW
#else
#define DIALOGRESIZECONTROLCLASS DIALOGRESIZECONTROLCLASSA
#endif

#define DIALOGRESIZEDATACLASSW L"DialogResizeDataClassW"
#define DIALOGRESIZEDATACLASSA "DialogResizeDataClassA"

#if defined(UNICODE) || defined(_UNICODE)
#define DIALOGRESIZEDATACLASS DIALOGRESIZEDATACLASSW
#else
#define DIALOGRESIZEDATACLASS DIALOGRESIZEDATACLASSA
#endif

#ifndef RC_INVOKED

BOOL CALLBACK
ResizeDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

BOOL
ResizeDialogInitialize(HINSTANCE hInst);

#else

#define DIALOGRESIZE CONTROL "", -1, DIALOGRESIZEDATACLASS, NOT WS_VISIBLE, 0, 0, 0, 0, 0 
#define DIALOGRESIZECONTROL CONTROL "", -1, DIALOGRESIZECONTROLCLASS, NOT WS_VISIBLE, 0, 0, 0, 0, 0 

#endif



================================================
FILE: src/Winfile.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Label="Globals">
    <ProjectGuid>{028400E7-500A-4FB9-877F-F6C7AE24F109}</ProjectGuid>
    <RootNamespace>Winfile</RootNamespace>
    <Keyword>Win32Proj</Keyword>
  </PropertyGroup>
  <Import Project="..\build\Winfile.default.props" />
  <PropertyGroup Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
  </PropertyGroup>
  <Import Project="..\build\Winfile.props" />
  <ItemDefinitionGroup Label="Globals">
    <ClCompile>
      <ControlFlowGuard>Guard</ControlFlowGuard>
      <DisableSpecificWarnings>4706;4152;%(DisableSpecificWarnings)</DisableSpecificWarnings>
      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>LFN;FASTMOVE;UNICODE;_UNICODE;USELASTDOT;MEMDOUBLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>LFN;FASTMOVE;UNICODE;_UNICODE;USELASTDOT;MEMDOUBLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
    <Link>
      <AdditionalDependencies>kernel32.lib;gdi32.lib;user32.lib;advapi32.lib;oleaut32.lib;ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;version.lib</AdditionalDependencies>
      <SubSystem>Windows</SubSystem>
      <StackReserveSize>15000000</StackReserveSize>
    </Link>
  </ItemDefinitionGroup>
  <PropertyGroup>
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">AllRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">AllRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PreprocessorDefinitions>DBG=1;DEBUG=1;WINVER=0x0601;_WIN32_WINNT=0x601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>DBG=1;DEBUG=1;WINVER=0x0601;_WIN32_WINNT=0x601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
    <Link>
      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugXPStatic|Win32'">
    <ClCompile>
      <PreprocessorDefinitions>DBG=1;DEBUG=1;STRSAFE_NO_DEPRECATE=1;WINVER=0x0501;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>DBG=1;DEBUG=1;STRSAFE_NO_DEPRECATE=1;WINVER=0x0501;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
    <Link>
      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
    <ClCompile>
      <PreprocessorDefinitions>DBG=1;DEBUG=1;WINVER=0x0A00;_WIN32_WINNT=0xA00;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>DBG=1;DEBUG=1;WINVER=0x0A00;_WIN32_WINNT=0xA00;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
    <Link>
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <PreprocessorDefinitions>WINVER=0x0601;_WIN32_WINNT=0x601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>WINVER=0x0601;_WIN32_WINNT=0x601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
    <Link>
      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseXPStatic|Win32'">
    <ClCompile>
      <PreprocessorDefinitions>STRSAFE_NO_DEPRECATE=1;WINVER=0x0501;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>STRSAFE_NO_DEPRECATE=1;WINVER=0x0501;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
    <Link>
      <ImageHasSafeExceptionHandlers>true</ImageHasSafeExceptionHandlers>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
    <ClCompile>
      <PreprocessorDefinitions>WINVER=0x0A00;_WIN32_WINNT=0xA00;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>WINVER=0x0A00;_WIN32_WINNT=0xA00;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
    <Link>
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <PreprocessorDefinitions>DBG=1;DEBUG=1;WINVER=0x0601;_WIN32_WINNT=0x601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>DBG=1;DEBUG=1;WINVER=0x0601;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <PreprocessorDefinitions>WINVER=0x0601;_WIN32_WINNT=0x601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>WINVER=0x0601;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClInclude Include="dbg.h" />
    <ClInclude Include="fmifs.h" />
    <ClInclude Include="lfn.h" />
    <ClInclude Include="BagOValues.h" />
    <ClInclude Include="mpr.h" />
    <ClInclude Include="numfmt.h" />
    <ClInclude Include="res.h" />
    <ClInclude Include="resize.h" />
    <ClInclude Include="spinlock.h" />
    <ClInclude Include="suggest.h" />
    <ClInclude Include="treectl.h" />
    <ClInclude Include="wfcopy.h" />
    <ClInclude Include="wfdlgs.h" />
    <ClInclude Include="wfdocb.h" />
    <ClInclude Include="wfdrop.h" />
    <ClInclude Include="wfext.h" />
    <ClInclude Include="wfexti.h" />
    <ClInclude Include="wfgwl.h" />
    <ClInclude Include="wfhelp.h" />
    <ClInclude Include="wfinfo.h" />
    <ClInclude Include="wfmem.h" />
    <ClInclude Include="winexp.h" />
    <ClInclude Include="winfile.h" />
    <ClInclude Include="wnetcaps.h" />
  </ItemGroup>
  <ItemGroup>
    <None Include="lang\res_pl-PL.rc" />
    <None Include="lang\res_de-DE.rc" />
    <None Include="lang\res_tr-TR.rc" />
    <ResourceCompile Include="res.rc">
      <Culture>0x0409</Culture>
      <ShowProgress Condition="'$(Configuration)'=='Debug'">true</ShowProgress>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32_LEAN_AND_MEAN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">WIN32_LEAN_AND_MEAN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">WIN32_LEAN_AND_MEAN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32_LEAN_AND_MEAN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">WIN32_LEAN_AND_MEAN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">WIN32_LEAN_AND_MEAN=1;;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ResourceCompile>
  </ItemGroup>
  <ItemGroup>
    <None Include="lang\res_en-US.rc" />
    <None Include="lang\res_zh-CN.rc" />
    <None Include="lang\res_ja-JP.rc" />
    <None Include="lang\res_he-IL.rc" />
    <None Include="lang\res_pt-PT.rc" />
    <None Include="lang\res_ko-KR.rc" />
    <None Include="lang\suggest_de-DE.db" />
    <None Include="lang\suggest_en-US.db" />
    <None Include="lang\suggest_pl-PL.db" />
    <None Include="lang\suggest_pt-PT.db" />
    <None Include="lang\suggest_tr-TR.db" />
    <None Include="lang\suggest_zh-CN.db" />
    <None Include="lang\suggest_ja-JP.db" />
    <None Include="lang\suggest_he-IL.db" />
    <None Include="lang\suggest_ko-KR.db" />
    <None Include="lang\winfile_de-DE.dlg" />
    <None Include="lang\winfile_en-US.dlg" />
    <None Include="lang\winfile_pl-PL.dlg" />
    <None Include="lang\winfile_pt-PT.dlg" />
    <None Include="lang\winfile_tr-TR.dlg" />
    <None Include="lang\winfile_zh-CN.dlg" />
    <None Include="lang\winfile_ja-JP.dlg" />
    <None Include="lang\winfile_he-IL.dlg" />
    <None Include="lang\winfile_ko-KR.dlg" />
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="dbg.c" />
    <ClCompile Include="lfn.c" />
    <ClCompile Include="lfnmisc.c" />
    <ClCompile Include="numfmt.c" />
    <ClCompile Include="resize.c" />
    <ClCompile Include="suggest.c" />
    <ClCompile Include="tbar.c" />
    <ClCompile Include="treectl.c" />
    <ClCompile Include="wfassoc.c" />
    <ClCompile Include="wfchgnot.c" />
    <ClCompile Include="wfcomman.c" />
    <ClCompile Include="wfcopy.c" />
    <ClCompile Include="wfdir.c" />
    <ClCompile Include="wfdirrd.c" />
    <ClCompile Include="wfdirsrc.c" />
    <ClCompile Include="wfdlgs.c" />
    <ClCompile Include="wfdlgs2.c" />
    <ClCompile Include="wfdlgs3.c" />
    <ClCompile Include="wfdos.c" />
    <ClCompile Include="wfdrives.c" />
    <ClCompile Include="wfdrop.c" />
    <ClCompile Include="wfext.c" />
    <ClCompile Include="wffile.c" />
    <ClCompile Include="wfgoto.cpp" />
    <ClCompile Include="wfinfo.c" />
    <ClCompile Include="wfinit.c" />
    <ClCompile Include="wfloc.c" />
    <ClCompile Include="wfmem.c" />
    <ClCompile Include="wfprint.c" />
    <ClCompile Include="wfsearch.c" />
    <ClCompile Include="wftree.c" />
    <ClCompile Include="wfutil.c" />
    <ClCompile Include="winfile.c" />
    <ClCompile Include="wnetcaps.c" />
  </ItemGroup>
  <ItemGroup>
    <Manifest Include="winfile.exe.manifest" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>


================================================
FILE: src/Winfile.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Manifest Include="winfile.exe.manifest" />
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="dbg.c" />
    <ClCompile Include="lfn.c" />
    <ClCompile Include="lfnmisc.c" />
    <ClCompile Include="numfmt.c" />
    <ClCompile Include="suggest.c" />
    <ClCompile Include="tbar.c" />
    <ClCompile Include="treectl.c" />
    <ClCompile Include="wfassoc.c" />
    <ClCompile Include="wfchgnot.c" />
    <ClCompile Include="wfcomman.c" />
    <ClCompile Include="wfcopy.c" />
    <ClCompile Include="wfdir.c" />
    <ClCompile Include="wfdirrd.c" />
    <ClCompile Include="wfdirsrc.c" />
    <ClCompile Include="wfdlgs.c" />
    <ClCompile Include="wfdlgs2.c" />
    <ClCompile Include="wfdlgs3.c" />
    <ClCompile Include="wfdos.c" />
    <ClCompile Include="wfdrives.c" />
    <ClCompile Include="wfdrop.c" />
    <ClCompile Include="wfext.c" />
    <ClCompile Include="wffile.c" />
    <ClCompile Include="wfgoto.cpp" />
    <ClCompile Include="wfinfo.c" />
    <ClCompile Include="wfinit.c" />
    <ClCompile Include="wfmem.c" />
    <ClCompile Include="wfprint.c" />
    <ClCompile Include="wfsearch.c" />
    <ClCompile Include="wftree.c" />
    <ClCompile Include="wfutil.c" />
    <ClCompile Include="winfile.c" />
    <ClCompile Include="wnetcaps.c" />
    <ClCompile Include="wfloc.c" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="dbg.h" />
    <ClInclude Include="fmifs.h" />
    <ClInclude Include="lfn.h" />
    <ClInclude Include="BagOValues.h" />
    <ClInclude Include="mpr.h" />
    <ClInclude Include="numfmt.h" />
    <ClInclude Include="spinlock.h" />
    <ClInclude Include="suggest.h" />
    <ClInclude Include="treectl.h" />
    <ClInclude Include="wfcopy.h" />
    <ClInclude Include="wfdlgs.h" />
    <ClInclude Include="wfdocb.h" />
    <ClInclude Include="wfdrop.h" />
    <ClInclude Include="wfext.h" />
    <ClInclude Include="wfexti.h" />
    <ClInclude Include="wfgwl.h" />
    <ClInclude Include="wfhelp.h" />
    <ClInclude Include="wfinfo.h" />
    <ClInclude Include="wfmem.h" />
    <ClInclude Include="winexp.h" />
    <ClInclude Include="winfile.h" />
    <ClInclude Include="wnetcaps.h" />
    <ClInclude Include="res.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="res.rc" />
  </ItemGroup>
  <ItemGroup>
    <None Include="lang\res_en-US.rc">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\res_zh-CN.rc">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_en-US.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_zh-CN.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_en-US.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_zh-CN.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_ja-JP.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_ja-JP.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\res_ja-JP.rc">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_pl-PL.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_pl-PL.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\res_pl-PL.rc">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_he-IL.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_he-IL.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\res_he-IL.rc">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_de-DE.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\res_de-DE.rc">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_de-DE.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\res_tr-TR.rc">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_tr-TR.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_tr-TR.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\res_pt-PT.rc">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_pt-PT.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_pt-PT.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\suggest_ko-KR.db">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\winfile_ko-KR.dlg">
      <Filter>lang</Filter>
    </None>
    <None Include="lang\res_ko-KR.rc">
      <Filter>lang</Filter>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Filter Include="lang">
      <UniqueIdentifier>{a74d83f3-58ec-46d3-bb3d-fadca6ac5743}</UniqueIdentifier>
    </Filter>
  </ItemGroup>
</Project>


================================================
FILE: src/dbg.c
================================================
/********************************************************************

   dbg.c

   Debugging utilities

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#include "winfile.h"
#include "dbg.h"

#if DBG

TCHAR szAsrtFmt[] = TEXT("Assertion Failure in %s at %d\n");
TCHAR szFmt[300];
unsigned long TraceFlags = 
      BF_START
//     | BF_PROCTRACE
//     | BF_PARMTRACE
//     | BF_MSGTRACE
//     | BF_DEFMSGTRACE
    ;     // set these to print on TRACEs

unsigned long BreakFlags = 0
    // | BF_START
    ;     // set these to break on TRACEs

VOID DbgAssert(
LPTSTR file,
int line)
{
    wsprintf(szFmt,szAsrtFmt,file,line);
    OutputDebugString(szFmt);
//    DbgPrint(szAsrtFmt, file, line);
    DebugBreak();
}


VOID DbgTrace(
DWORD tf,
LPTSTR lpstr)
{
    if (tf & TraceFlags) {
        wsprintf(szFmt,TEXT("%s\n"),lpstr);
        OutputDebugString(szFmt);
//        DbgPrint("%s\n", lpstr);
        if (tf & BreakFlags) {
            DebugBreak();
        }
    }
}


VOID DbgBreak(
DWORD bf,
LPTSTR file,
int line)
{
    if (bf & BreakFlags) {
        wsprintf(szFmt,TEXT("BREAK at %s:%d\n"), file, line);
        OutputDebugString(szFmt);
//        DbgPrint("BREAK at %s:%d\n", file, line);
        DebugBreak();
    }
}


VOID DbgPrint1(
DWORD tf,
LPTSTR fmt,
LPTSTR p1)
{
    if (tf & TraceFlags) {
        wsprintf(szFmt,fmt, p1);
        OutputDebugString(szFmt);
//        DbgPrint("%d",GetTickCount());
        OutputDebugString(TEXT("\n"));
//        DbgPrint(fmt, p1);
//        DbgPrint("\n");
    }
    if (tf & BreakFlags) {
        DebugBreak();
    }
}


VOID DbgEnter(
LPTSTR funName)
{
    DbgPrint1(BF_PROCTRACE, TEXT("> %s "), funName);
}

VOID DbgLeave(
LPTSTR funName)
{
    DbgPrint1(BF_PROCTRACE, TEXT(" <%s "), funName);
}


VOID DbgTraceMessage(
LPTSTR funName,
LPTSTR msgName)
{
    if (BF_MSGTRACE & TraceFlags) {
        wsprintf(szFmt,TEXT("MSG: %s - %s\n"), funName, msgName);
        OutputDebugString(szFmt);
//        DbgPrint("MSG: %s - %s\n", funName, msgName);
    }
    if (BF_MSGTRACE & BreakFlags) {
        DebugBreak();
    }
}

VOID DbgTraceDefMessage(
LPTSTR funName,
WORD msgId)
{
    if (BF_DEFMSGTRACE & TraceFlags) {
        wsprintf(szFmt,TEXT("MSG: %s - default(0x%x)\n"), funName, msgId);
        OutputDebugString(szFmt);
//        DbgPrint("MSG: %s - default(0x%x)\n", funName, msgId);
    }
    if (BF_DEFMSGTRACE & BreakFlags) {
        DebugBreak();
    }
}

#endif // DBG


================================================
FILE: src/dbg.h
================================================
/********************************************************************

   dbg.h

   Debugging utilities header

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#if DBG

extern TCHAR szAsrtFmt[];
extern unsigned long BreakFlags;
extern unsigned long TraceFlags;

DWORD DbgPrint( LPTSTR Format, ...);
VOID DbgAssert(LPTSTR file, int line);
VOID DbgTrace(DWORD tf, LPTSTR lpstr);
VOID DbgBreak(DWORD bf, LPTSTR file, int line);
VOID DbgPrint1(DWORD tf, LPTSTR fmt, LPTSTR p1);
VOID DbgEnter(LPTSTR funName);
VOID DbgLeave(LPTSTR funName);
VOID DbgTraceMessage(LPTSTR funName, LPTSTR msgName);
VOID DbgTraceDefMessage(LPTSTR funName, WORD msgId);

// BreakFlags flags

#define BF_SPECIAL              0x00800000

#define BF_WM_CREATE            0x02000000
#define BF_DEFMSGTRACE          0x04000000
#define BF_MSGTRACE             0x08000000

#define BF_PARMTRACE            0x20000000
#define BF_PROCTRACE            0x40000000
#define BF_START                0x80000000

#define ASSERT(fOk)             if (!(fOk)) DbgAssert(TEXT(__FILE__), __LINE__)
#define FBREAK(bf)              DbgBreak(bf, TEXT(__FILE__), __LINE__)
#define TRACE(tf, lpstr)        DbgTrace(tf, lpstr)
#define PRINT(tf, fmt, p1)      DbgPrint1(tf, fmt, (LPTSTR)(p1))
#define MSG(funName, msgName)   DbgTraceMessage(funName, msgName)
#define DEFMSG(funName, wMsgId) DbgTraceDefMessage(funName, wMsgId)

#define ENTER(funName)          DbgEnter(funName)
#define LEAVE(funName)          DbgLeave(funName)


#else // !DBG

#define ASSERT(fOk)
#define FBREAK(bf)
#define TRACE(tf, lpstr)
#define PRINT(tf, fmt, p1)
#define MSG(funName, msgName)
#define DEFMSG(funName, wMsgId)
#define ENTER(funName)
#define LEAVE(funName)

#endif // DBG


================================================
FILE: src/fmifs.h
================================================
/********************************************************************

   fmifs.h

   This header file contains the specification of the interface
   between the file manager and fmifs.dll for the purposes of
   accomplishing IFS functions.

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

#if !defined( _FMIFS_DEFN_ )

#define _FMIFS_DEFN_


//
// These are the defines for 'PacketType'.
//

typedef enum _FMIFS_PACKET_TYPE {
    FmIfsPercentCompleted,
    FmIfsFormatReport,
    FmIfsInsertDisk,
    FmIfsIncompatibleFileSystem,
    FmIfsFormattingDestination,
    FmIfsIncompatibleMedia,
    FmIfsAccessDenied,
    FmIfsMediaWriteProtected,
    FmIfsCantLock,
    FmIfsCantQuickFormat,
    FmIfsIoError,
    FmIfsFinished,
    FmIfsBadLabel,
#if defined( DBLSPACE_ENABLED )
    FmIfsDblspaceCreateFailed,
    FmIfsDblspaceMountFailed,
    FmIfsDblspaceDriveLetterFailed,
    FmIfsDblspaceCreated,
    FmIfsDblspaceMounted,
#endif // DBLSPACE_ENABLED
    FmIfsCheckOnReboot,
    FmIfsTextMessage,
    FmIfsHiddenStatus
} FMIFS_PACKET_TYPE, *PFMIFS_PACKET_TYPE;

typedef struct _FMIFS_PERCENT_COMPLETE_INFORMATION {
    ULONG   PercentCompleted;
} FMIFS_PERCENT_COMPLETE_INFORMATION, *PFMIFS_PERCENT_COMPLETE_INFORMATION;

typedef struct _FMIFS_FORMAT_REPORT_INFORMATION {
    ULONG   KiloBytesTotalDiskSpace;
    ULONG   KiloBytesAvailable;
} FMIFS_FORMAT_REPORT_INFORMATION, *PFMIFS_FORMAT_REPORT_INFORMATION;

// The packet for FmIfsDblspaceCreated is a Unicode string
// giving the name of the Compressed Volume File; it is not
// necessarily zero-terminated.
//

#define DISK_TYPE_GENERIC           0
#define DISK_TYPE_SOURCE            1
#define DISK_TYPE_TARGET            2
#define DISK_TYPE_SOURCE_AND_TARGET 3

typedef struct _FMIFS_INSERT_DISK_INFORMATION {
    ULONG   DiskType;
} FMIFS_INSERT_DISK_INFORMATION, *PFMIFS_INSERT_DISK_INFORMATION;

typedef struct _FMIFS_IO_ERROR_INFORMATION {
    ULONG   DiskType;
    ULONG   Head;
    ULONG   Track;
} FMIFS_IO_ERROR_INFORMATION, *PFMIFS_IO_ERROR_INFORMATION;

typedef struct _FMIFS_FINISHED_INFORMATION {
    BOOLEAN Success;
} FMIFS_FINISHED_INFORMATION, *PFMIFS_FINISHED_INFORMATION;

typedef struct _FMIFS_CHECKONREBOOT_INFORMATION {
    OUT BOOLEAN QueryResult; // TRUE for "yes", FALSE for "no"
} FMIFS_CHECKONREBOOT_INFORMATION, *PFMIFS_CHECKONREBOOT_INFORMATION;

typedef enum _TEXT_MESSAGE_TYPE {
    MESSAGE_TYPE_PROGRESS,
    MESSAGE_TYPE_RESULTS,
    MESSAGE_TYPE_FINAL
} TEXT_MESSAGE_TYPE, *PTEXT_MESSAGE_TYPE;

typedef struct _FMIFS_TEXT_MESSAGE {
    IN TEXT_MESSAGE_TYPE    MessageType;
    IN PSTR                 Message;
} FMIFS_TEXT_MESSAGE, *PFMIFS_TEXT_MESSAGE;




//
// This is a list of supported floppy media types for format.
//

typedef enum _FMIFS_MEDIA_TYPE {
    FmMediaUnknown,
    FmMediaF5_160_512,      // 5.25", 160KB,  512 bytes/sector
    FmMediaF5_180_512,      // 5.25", 180KB,  512 bytes/sector
    FmMediaF5_320_512,      // 5.25", 320KB,  512 bytes/sector
    FmMediaF5_320_1024,     // 5.25", 320KB,  1024 bytes/sector
    FmMediaF5_360_512,      // 5.25", 360KB,  512 bytes/sector
    FmMediaF3_720_512,      // 3.5",  720KB,  512 bytes/sector
    FmMediaF5_1Pt2_512,     // 5.25", 1.2MB,  512 bytes/sector
    FmMediaF3_1Pt44_512,    // 3.5",  1.44MB, 512 bytes/sector
    FmMediaF3_2Pt88_512,    // 3.5",  2.88MB, 512 bytes/sector
    FmMediaF3_20Pt8_512,    // 3.5",  20.8MB, 512 bytes/sector
    FmMediaRemovable,       // Removable media other than floppy
    FmMediaFixed,
    FmMediaF3_120M_512      // 3.5", 120M Floppy
} FMIFS_MEDIA_TYPE, *PFMIFS_MEDIA_TYPE;

//
// The structure below defines information to be passed into ChkdskEx.
// When new fields are added, the version number will have to be upgraded
// so that only new code will reference those new fields.
//
typedef struct {
    UCHAR   Major;      // initial version is 1.0
    UCHAR   Minor;
    ULONG   Flags;
    PWSTR   PathToCheck;
} FMIFS_CHKDSKEX_PARAM, *PFMIFS_CHKDSKEX_PARAM;

//
// Internal definitions for Flags field in FMIFS_CHKDSKEX_PARAM
//
#define FMIFS_CHKDSK_RECOVER_FREE_SPACE       0x00000002UL
#define FMIFS_CHKDSK_RECOVER_ALLOC_SPACE      0x00000004UL

//
// External definitions for Flags field in FMIFS_CHKDSKEX_PARAM
//

// FMIFS_CHKDSK_VERBOSE
//  - For FAT, chkdsk will print every filename being processed
//  - For NTFS, chkdsk will print clean up messages
// FMIFS_CHKDSK_RECOVER
//  - Perform sector checking on free and allocated space
// FMIFS_CHKDSK_EXTEND
//  - For NTFS, chkdsk will extend a volume
// FMIFS_CHKDSK_DOWNGRADE (for NT 5 or later but obsolete anyway)
//  - For NTFS, this downgrade a volume from most recent NTFS version
// FMIFS_CHKDSK_ENABLE_UPGRADE (for NT 5 or later but obsolete anyway)
//  - For NTFS, this upgrades a volume to most recent NTFS version
// FMIFS_CHKDSK_CHECK_IF_DIRTY
//  - Perform consistency check only if the volume is dirty
// FMIFS_CHKDSK_FORCE (for NT 5 or later)
//  - Forces the volume to dismount first if necessary
// FMIFS_CHKDSK_SKIP_INDEX_SCAN
//  - Skip the scanning of each index entry
// FMIFS_CHKDSK_SKIP_CYCLE_SCAN
//  - Skip the checking of cycles within the directory tree


#define FMIFS_CHKDSK_VERBOSE                  0x00000001UL
#define FMIFS_CHKDSK_RECOVER                  (FMIFS_CHKDSK_RECOVER_FREE_SPACE | \
                                               FMIFS_CHKDSK_RECOVER_ALLOC_SPACE)
#define FMIFS_CHKDSK_EXTEND                   0x00000008UL
#define FMIFS_CHKDSK_DOWNGRADE                0x00000010UL
#define FMIFS_CHKDSK_ENABLE_UPGRADE           0x00000020UL
#define FMIFS_CHKDSK_CHECK_IF_DIRTY           0x00000080UL
#define FMIFS_CHKDSK_FORCE                    0x00000100UL
#define FMIFS_CHKDSK_SKIP_INDEX_SCAN          0x00000200UL
#define FMIFS_CHKDSK_SKIP_CYCLE_SCAN          0x00000400UL

//
// Function types/interfaces.
//

typedef BOOLEAN
(*FMIFS_CALLBACK)(
    IN  FMIFS_PACKET_TYPE   PacketType,
    IN  ULONG               PacketLength,
    IN  PVOID               PacketData
    );

typedef
VOID
(*PFMIFS_FORMAT_ROUTINE)(
    IN  PWSTR               DriveName,
    IN  FMIFS_MEDIA_TYPE    MediaType,
    IN  PWSTR               FileSystemName,
    IN  PWSTR               Label,
    IN  BOOLEAN             Quick,
    IN  FMIFS_CALLBACK      Callback
    );

typedef
VOID
(*PFMIFS_FORMATEX_ROUTINE)(
    IN  PWSTR               DriveName,
    IN  FMIFS_MEDIA_TYPE    MediaType,
    IN  PWSTR               FileSystemName,
    IN  PWSTR               Label,
    IN  BOOLEAN             Quick,
    IN  ULONG               ClusterSize,
    IN  FMIFS_CALLBACK      Callback
    );

typedef
BOOLEAN
(*PFMIFS_ENABLECOMP_ROUTINE)(
    IN  PWSTR               DriveName,
    IN  USHORT              CompressionFormat
    );


typedef
VOID
(*PFMIFS_CHKDSK_ROUTINE)(
    IN  PWSTR               DriveName,
    IN  PWSTR               FileSystemName,
    IN  BOOLEAN             Fix,
    IN  BOOLEAN             Verbose,
    IN  BOOLEAN             OnlyIfDirty,
    IN  BOOLEAN             Recover,
    IN  PWSTR               PathToCheck,
    IN  BOOLEAN             Extend,
    IN  FMIFS_CALLBACK      Callback
    );

typedef
VOID
(*PFMIFS_CHKDSKEX_ROUTINE)(
    IN  PWSTR                   DriveName,
    IN  PWSTR                   FileSystemName,
    IN  BOOLEAN                 Fix,
    IN  PFMIFS_CHKDSKEX_PARAM   Param,
    IN  FMIFS_CALLBACK          Callback
    );

typedef
VOID
(*PFMIFS_EXTEND_ROUTINE)(
    IN  PWSTR               DriveName,
    IN  BOOLEAN             Verify,
    IN  FMIFS_CALLBACK      Callback
    );


typedef
VOID
(*PFMIFS_DISKCOPY_ROUTINE)(
    IN  PWSTR           SourceDrive,
    IN  PWSTR           DestDrive,
    IN  BOOLEAN         Verify,
    IN  FMIFS_CALLBACK  Callback
    );

typedef
BOOLEAN
(*PFMIFS_SETLABEL_ROUTINE)(
    IN  PWSTR   DriveName,
    IN  PWSTR   Label
    );

typedef
BOOLEAN
(*PFMIFS_QSUPMEDIA_ROUTINE)(
    IN  PWSTR               DriveName,
    OUT PFMIFS_MEDIA_TYPE   MediaTypeArray  OPTIONAL,
    IN  ULONG               NumberOfArrayEntries,
    OUT PULONG              NumberOfMediaTypes
    );


typedef
VOID
(*PFMIFS_DOUBLESPACE_CREATE_ROUTINE)(
    IN PWSTR           HostDriveName,
    IN ULONG           Size,
    IN PWSTR           Label,
    IN PWSTR           NewDriveName,
    IN FMIFS_CALLBACK  Callback
    );

#if defined( DBLSPACE_ENABLED )
typedef
VOID
(*PFMIFS_DOUBLESPACE_DELETE_ROUTINE)(
    IN PWSTR           DblspaceDriveName,
    IN FMIFS_CALLBACK  Callback
    );

typedef
VOID
(*PFMIFS_DOUBLESPACE_MOUNT_ROUTINE)(
    IN PWSTR           HostDriveName,
    IN PWSTR           CvfName,
    IN PWSTR           NewDriveName,
    IN FMIFS_CALLBACK  Callback
    );

typedef
VOID
(*PFMIFS_DOUBLESPACE_DISMOUNT_ROUTINE)(
    IN PWSTR           DblspaceDriveName,
    IN FMIFS_CALLBACK  Callback
    );

typedef
BOOLEAN
(*PFMIFS_DOUBLESPACE_QUERY_INFO_ROUTINE)(
    IN  PWSTR       DosDriveName,
    OUT PBOOLEAN    IsRemovable,
    OUT PBOOLEAN    IsFloppy,
    OUT PBOOLEAN    IsCompressed,
    OUT PBOOLEAN    Error,
    OUT PWSTR       NtDriveName,
    IN  ULONG       MaxNtDriveNameLength,
    OUT PWSTR       CvfFileName,
    IN  ULONG       MaxCvfFileNameLength,
    OUT PWSTR       HostDriveName,
    IN  ULONG       MaxHostDriveNameLength
    );

typedef
BOOLEAN
(*PFMIFS_DOUBLESPACE_SET_AUTMOUNT_ROUTINE)(
    IN  BOOLEAN EnableAutomount
    );

#endif // DBLSPACE_ENABLED


VOID
Format(
    IN  PWSTR               DriveName,
    IN  FMIFS_MEDIA_TYPE    MediaType,
    IN  PWSTR               FileSystemName,
    IN  PWSTR               Label,
    IN  BOOLEAN             Quick,
    IN  FMIFS_CALLBACK      Callback
    );

VOID
FormatEx(
    IN  PWSTR               DriveName,
    IN  FMIFS_MEDIA_TYPE    MediaType,
    IN  PWSTR               FileSystemName,
    IN  PWSTR               Label,
    IN  BOOLEAN             Quick,
    IN  ULONG               ClusterSize,
    IN  FMIFS_CALLBACK      Callback
    );

BOOLEAN
EnableVolumeCompression(
    IN  PWSTR               DriveName,
    IN  USHORT              CompressionFormat
    );

VOID
Chkdsk(
    IN  PWSTR               DriveName,
    IN  PWSTR               FileSystemName,
    IN  BOOLEAN             Fix,
    IN  BOOLEAN             Verbose,
    IN  BOOLEAN             OnlyIfDirty,
    IN  BOOLEAN             Recover,
    IN  PWSTR               PathToCheck,
    IN  BOOLEAN             Extend,
    IN  FMIFS_CALLBACK      Callback
    );

VOID
ChkdskEx(
    IN  PWSTR                   DriveName,
    IN  PWSTR                   FileSystemName,
    IN  BOOLEAN                 Fix,
    IN  PFMIFS_CHKDSKEX_PARAM   Param,
    IN  FMIFS_CALLBACK          Callback
    );

VOID
Extend(
    IN  PWSTR               DriveName,
    IN  BOOLEAN             Verify,
    IN  FMIFS_CALLBACK      Callback
    );

VOID
DiskCopy(
    IN  PWSTR           SourceDrive,
    IN  PWSTR           DestDrive,
    IN  BOOLEAN         Verify,
    IN  FMIFS_CALLBACK  Callback
    );

BOOLEAN
SetLabel(
    IN  PWSTR   DriveName,
    IN  PWSTR   Label
    );

BOOLEAN
QuerySupportedMedia(
    IN  PWSTR               DriveName,
    OUT PFMIFS_MEDIA_TYPE   MediaTypeArray  OPTIONAL,
    IN  ULONG               NumberOfArrayEntries,
    OUT PULONG              NumberOfMediaTypes
    );

VOID
DoubleSpaceCreate(
    IN PWSTR           HostDriveName,
    IN ULONG           Size,
    IN PWSTR           Label,
    IN PWSTR           NewDriveName,
    IN FMIFS_CALLBACK  Callback
    );

#if defined( DBLSPACE_ENABLED )

VOID
DoubleSpaceDelete(
    IN PWSTR           DblspaceDriveName,
    IN FMIFS_CALLBACK  Callback
    );

VOID
DoubleSpaceMount(
    IN PWSTR           HostDriveName,
    IN PWSTR           CvfName,
    IN PWSTR           NewDriveName,
    IN FMIFS_CALLBACK  Callback
    );

VOID
DoubleSpaceDismount(
    IN PWSTR           DblspaceDriveName,
    IN FMIFS_CALLBACK  Callback
    );

// Miscellaneous prototypes:
//
BOOLEAN
FmifsQueryDriveInformation(
    IN  PWSTR       DosDriveName,
    OUT PBOOLEAN    IsRemovable,
    OUT PBOOLEAN    IsFloppy,
    OUT PBOOLEAN    IsCompressed,
    OUT PBOOLEAN    Error,
    OUT PWSTR       NtDriveName,
    IN  ULONG       MaxNtDriveNameLength,
    OUT PWSTR       CvfFileName,
    IN  ULONG       MaxCvfFileNameLength,
    OUT PWSTR       HostDriveName,
    IN  ULONG       MaxHostDriveNameLength
    );

BOOLEAN
FmifsSetAutomount(
    IN  BOOLEAN EnableAutomount
    );

#endif


#endif // _FMIFS_DEFN_


================================================
FILE: src/lang/res_de-DE.rc
================================================
/********************************************************************

   res_de-DE.rc

   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the MIT License.

********************************************************************/

LANGUAGE LANG_GERMAN, SUBLANG_GERMAN

FRAMEMENU MENU
BEGIN
    POPUP       "&Datei"
    BEGIN
    MENUITEM    "Ö&ffnen\tEingabetaste",                          IDM_OPEN
    MENUITEM    "Bearbeiten\tF12",                                IDM_EDIT
    MENUITEM    "&Verschieben...\tF7",                            IDM_MOVE
    MENUITEM    "&Kopieren...\tF8",                               IDM_COPY
    MENUITEM    "S&ymlink...\tF11",                               IDM_SYMLINK
    MENUITEM    "H&ardlink...\tUmschalt+F11",                     IDM_HARDLINK
    MENUITEM    "&In Zwischenablage...\tStrg+C",                  IDM_COPYTOCLIPBOARD
    MENUITEM    "Ausschneiden in Zwischenablage...\tStrg+X",      IDM_CUTTOCLIPBOARD
    MENUITEM    "&Einfügen\tStrg+V",                              IDM_PASTE
    MENUITEM    "&Löschen...\tEntf",                              IDM_DELETE
    MENUITEM    "&Umbenennen...\tF2",                             IDM_RENAME
    MENUITEM    "Ei&genschaften...\tAlt+Eingabetaste",            IDM_ATTRIBS
    MENUITEM    SEPARATOR
    MENUITEM    "K&omprimieren...",                               IDM_COMPRESS
    MENUITEM    "Deko&mprimieren...",                             IDM_UNCOMPRESS
    MENUITEM    SEPARATOR
    MENUITEM    "&Ausführen...",                                  IDM_RUN
    MENUITEM    "&Drucken...",                                    IDM_PRINT
    MENUITEM    "Zuord&nen...",                                   IDM_ASSOCIATE
    MENUITEM    SEPARATOR
    MENUITEM    "Ver&zeichnis erstellen...\tUmschalt+Strg+N",     IDM_MAKEDIR
    MENUITEM    "&Suchen...\tStrg+F",                             IDM_SEARCH
    MENUITEM    "Dateien aus&wählen...",                          IDM_SELECT
    POPUP       "Starte (&.)"
    BEGIN
    MENUITEM    "&Bash Shell...\tStrg+B",                         IDM_STARTBASHSHELL
    MENUITEM    "&Cmd Shell...\tStrg+K",                          IDM_STARTCMDSHELL
    MENUITEM    "&PowerShell...\tStrg+P",                         IDM_STARTPOWERSHELL
    MENUITEM    "&Explorer...\tStrg+E",                           IDM_STARTEXPLORER
    END
    MENUITEM    "&Gehe ins Verzeichnis...\tStrg+G",               IDM_GOTODIR
    MENUITEM    SEPARATOR
    MENUITEM    "&Beenden",                                       IDM_EXIT
    END
    POPUP       "Da&tenträger"
    BEGIN
    MENUITEM    "Datenträger &kopieren...",                       IDM_DISKCOPY
    MENUITEM    "Datenträger &benennen...",                       IDM_LABEL
    MENUITEM    SEPARATOR
    MENUITEM    "Datenträger &formatieren...",                    IDM_FORMAT
    MENUITEM    SEPARATOR
    MENUITEM    "Laufwerk aus&wählen...",                         IDM_DRIVESMORE
    END
    POPUP       "&Verzeichnisse"
    BEGIN
    MENUITEM    "&Nächste Ebene einblenden\t+",                   IDM_EXPONE
    MENUITEM    "&Zweig einblenden\t*",                           IDM_EXPSUB
    MENUITEM    "Alle &Ebenen einblenden\tStrg+*",            IDM_EXPALL
    MENUITEM    "Zweig &ausblenden\t-",                           IDM_COLLAPSE
    MENUITEM    SEPARATOR
    MENUITEM    "&Verzweigungen kennzeichnen",                    IDM_ADDPLUSES
    END
    POPUP       "&Ansicht"
    BEGIN
    MENUITEM    "Struktur &und Verzeichnis",                      IDM_BOTH
    MENUITEM    "Nur &Struktur",                                  IDM_TREEONLY
    MENUITEM    "Nur &Verzeichnis",                               IDM_DIRONLY
    MENUITEM    SEPARATOR
    MENUITEM    "Tei&len",                                        IDM_SPLIT
    MENUITEM    SEPARATOR
    MENUITEM    "&Name",                                          IDM_VNAME
    MENUITEM    "Alle &Dateiangaben",                             IDM_VDETAILS, CHECKED
    MENUITEM    "&Bestimmte Dateiangaben...",                     IDM_VOTHER
    MENUITEM    SEPARATOR
    MENUITEM    "Nach N&ame",                                     IDM_BYNAME
    MENUITEM    "Nach &Typ",                                      IDM_BYTYPE
    MENUITEM    "Nach &Größe",                                    IDM_BYSIZE
    MENUITEM    "Nach Datu&m",                                    IDM_BYDATE
    MENUITEM    "Nach Datum v&orwärts",                           IDM_BYFDATE
    MENUITEM    SEPARATOR
    MENUITEM    "Angaben aus&wählen...",                          IDM_VINCLUDE
    END
    POPUP       "&Optionen"
    BEGIN
    MENUITEM    "&Bestätigen...",                                 IDM_CONFIRM
    MENUITEM    "Schrift&art...",                                 IDM_FONT
    MENUITEM    "Symbolleiste &definieren...",                    IDM_TOOLBARCUST
    MENUITEM    "Zusätzliche E&instellungen...",                 IDM_PREF
    MENUITEM    SEPARATOR
    MENUITEM    "Sy&mbolleiste",                                  IDM_TOOLBAR
    MENUITEM    "Lauf&werkleiste",                                IDM_DRIVEBAR
    MENUITEM    "Status&leiste",                                  IDM_STATUSBAR
    MENUITEM    SEPARATOR
    MENUITEM    "&Symbol nach Programmstart",                     IDM_MINONRUN
    MENUITEM    "Beim Starten &Goto-Index erstellen",             IDM_INDEXONLAUNCH
    MENUITEM    "&Einstellungen beim Beenden speichern",          IDM_SAVESETTINGS
    MENUITEM    SEPARATOR
    MENUITEM    "Einstellungen jetzt speicher&n",                 IDM_SAVENOW
    END
    POPUP       "&Sicherheit"
    BEGIN
    MENUITEM    "&Berechtigungen...",                             IDM_PERMISSIONS
    MENUITEM    "Über&wachen...",                                 IDM_AUDITING
    MENUITEM    "Besi&tzer...",                                   IDM_OWNER
    END
    POPUP       "&Fenster"
    BEGIN
    MENUITEM    "Neues &Fenster\tStrg+Umschalt Enter",            IDM_NEWWINDOW
    MENUITEM    "Über&lappend\tUmschalt+F5",                      IDM_CASCADE
    MENUITEM    "&Untereinander",                                 IDM_TILEHORIZONTALLY
    MENUITEM    "&Nebeneinander\tUmschalt+F4",                    IDM_TILE
    MENUITEM    "&Symbole anordnen",                              IDM_ARRANGE
    MENUITEM    "&Aktualisieren\tF5",                             IDM_REFRESH
    END
    POPUP       "&Hilfe"
    BEGIN
    MENUITEM    "&Hilfethemen",                                   IDM_HELPINDEX
    MENUITEM    "&Suchen...",                                     IDM_HELPKEYS
    MENUITEM    "&Hilfe &verwenden",                              IDM_HELPHELP
    MENUITEM    SEPARATOR
    MENUITEM    "&Über Datei-Manager",                            IDM_ABOUT
    END
END

CTXMENU MENU
BEGIN
  POPUP "Dummy Popup"
  BEGIN
  MENUITEM    "&Neues Fenster\tStrg+Umschalt Eingabetaste",       IDM_NEWWINDOW
  MENUITEM    "Öffnen\tEnter",                                    IDM_OPEN
  MENUITEM    "Bearbeiten\tF12",                                  IDM_EDIT
  MENUITEM    "&Verschieben...\tF7",                              IDM_MOVE
  MENUITEM    "&Kopieren...\tF8",                                 IDM_COPY
  MENUITEM    "S&ymlinken...\tF11",                               IDM_SYMLINK
  MENUITEM    "H&ardlinken...\tUmschalt+F11",                     IDM_HARDLINK
  MENUITEM    "&In Zwischenablage...\tStrg+C",                    IDM_COPYTOCLIPBOARD
  MENUITEM    "Ausschneiden in Zwischenablage...\tStrg+X",        IDM_CUTTOCLIPBOARD
  MENUITEM    "&Einfügen\tStrg+V",                                IDM_PASTE
  MENUITEM    "&Löschen...\tEntf",                                IDM_DELETE
  MENUITEM    "&Umbenennen...\tF2",                               IDM_RENAME
  MENUITEM    "&Eigenschaften...\tAlt+Eingabetaste",              IDM_ATTRIBS
  MENUITEM    "&Ausführen...",                                    IDM_RUN
  MENUITEM    "Starte Bash Shell...",                             IDM_STARTBASHSHELL
  MENUITEM    "Starte Cmd She&ll...",                             IDM_STARTCMDSHELL
  MENUITEM    "Starte Po&werShell...",                            IDM_STARTPOWERSHELL
  MENUITEM    "Starte E&xplorer...",                              IDM_STARTEXPLORER
  MENUITEM    "&Gehe ins Verzeichnis...",                         IDM_GOTODIR
  END
END

#define SUGGEST(id,err,flags,str) id+IDS_SUGGESTBEGIN str
/*              0....5....1....56...2....5....3.2..5....4....5....5....6....5....7....5....8....5....9....5....0....5....1....5....2....5..8 */
STRINGTABLE
BEGIN
//    IDS_ENDSESSION          "Exit Windows"                                                          /* 32 */
//    IDS_ENDSESSIONMSG       "This will end your Windows session."                                   /* 128 */

    IDS_COPYDISK            "Datenträger kopieren"                                                    /* 32 */
    IDS_INSERTDEST          "Legen Sie den Zieldatenträger ein."                                      /* 128 */
    IDS_INSERTSRC           "Legen Sie den Quelldatenträger ein."                                     /* 128 */
    IDS_INSERTSRCDEST       "Legen Sie den Quell- und den Zieldatenträger ein."                       /* 128 */
    IDS_FORMATTINGDEST      "Formatiert den Zieldatenträger."                                         /* 128 */

    IDS_COPYDISKERR         "Fehler beim Kopieren"                                                    /* 32 */
    IDS_COPYDISKERRMSG      "Das Kopieren des Datenträgers ist nicht möglich."                        /* 128 */
    IDS_COPYSRCDESTINCOMPAT "Das Quell- und das Ziellaufwerk sind zueinander inkompatibel."           /* 128 */

    IDS_PERCENTCOMP         "%d %% bearbeitet"                                                        /* 32 */
    IDS_CREATEROOT          "Das Stammverzeichnis wird angelegt..."                                   /* 32 */
    IDS_COPYSYSFILES        "Die Systemdateien werden kopiert..."                                     /* 32 */
    IDS_FORMATERR           "Fehler beim Formatieren"                                                 /* 32 */
    IDS_FORMATQUICKFAILURE  "Datei-Manager kann keinen Quick-Format durchführen.\n\nMit normaler Formatierung weitermachen?"
//    IDS_FORMATERRMSG      "Kann den Datenträger nicht formatieren."                                 /* 128 */
//    IDS_FORMATCURERR      "Sie können den aktuellen Datenträger nicht formatieren."                 /* 128 */
    IDS_FORMATCOMPLETE      "Formatieren abgeschlossen"                                               /* 32 */
    IDS_FORMATANOTHER       "%ld Bytes Speicherplatz insgesamt\n%ld Bytes Speicherplatz frei\n\nMöchten Sie eine weitere Diskette formatieren?"    /* 128 */

//    IDS_SYSDISK             "Erstelle Systemdatenträger"
//    IDS_SYSDISKRUSURE       "Sind Sie sicher, dass Sie Systemdateien auf die Festplatte im Laufwerk %c kopieren wollen?"
//    IDS_SYSDISKERR          "Fehler auf dem Systemdatenträger"
//    IDS_SYSDISKNOFILES      "Das MS-DOS-Startlaufwerk enthält keine Systemdateien oder ist nicht verfügbar."
//    IDS_SYSDISKSAMEDRIVE    "Systemdateien können nicht auf das MS-DOS-Startlaufwerk kopiert werden."
//    IDS_SYSDISKADDERR       "Kann keine Systemdateien zu dieser Platte hinzufügen.\n\nStellen Sie sicher, dass eine formatierte Platte im Laufwerk vorhanden ist und dass die Laufwerksklappe geschlossen ist."

    IDS_NETERR              "Netzwerkfehler"                                                          /* 32 */
    IDS_NETDISCONWINERR     "Dieses Laufwerk enthält die Windows-Systemdateien und kann nicht getrennt werden."                                                 /* 128 */
    IDS_NETDISCONOPEN       "Datei-Manager kann das Netzlaufwerk nicht trennen.\n\nEs sind noch Dateien auf dem Laufwerk geöffnet."

    IDS_ATTRIBERR           "Attribute können nicht geändert werden. "
    IDS_MAKEDIRERR          "Verzeichnis kann nicht erstellt werden. "

    IDS_LABELDISKERR        "Datenträger kann nicht benannt werden.\n\nStellen Sie sicher, daß der Datenträger nicht schreibgeschützt, kein Netzlaufwerk und die Bezeichnung gültig ist.\
                             Bezeichnungen dürfen die folgenden Zeichen nicht enthalten:\n[Leerzeichen] * ? / \\ | . , ; : + = [ ] ( ) & ^ < > "" "

    IDS_SEARCHNOMATCHES     "Es wurden keine entsprechenden Dateien gefunden."
    IDS_SEARCHREFRESH       "Der Inhalt des Laufwerks wurde geändert. Möchten Sie eine Aktualisierung des Suchergebnisses?"
    IDS_LABELACCESSDENIED   "Sie müssen als Administrator an die Arbeitsstation angemeldet sein, um diesen Vorgang auszuführen."

    IDS_DRIVETEMP           "Laufwerk %c:%c"

    IDS_EXECERRTITLE,       "Programmausführungsfehler"
    IDS_PRINTERRTITLE,      "Kann Datei nicht drucken"

    IDS_UNKNOWNMSG,         "Unerwarteter Fehler: %d."
    IDS_NOMEMORYMSG,        "Nicht genügend Arbeitsspeicher, um die ausgewählte Anwendung zu starten.\n\nSchließen Sie eine oder mehrere Anwendungen, und versuchen Sie es dann erneut."                   /* 128 */
    IDS_FILENOTFOUNDMSG,    "Datei bzw. Komponente nicht gefunden.\n\nÜberprüfen Sie, ob Pfad- und Dateiname richtig und alle Bibliotheken verfügbar sind."
    IDS_BADPATHMSG,         "Der angegebene Pfad ist ungültig."                                                                                           /* 128 */
//    IDS_MANYOPENFILESMSG,   "Zu viele Dateien werden derzeit verwendet.\n\nBeenden Sie eine oder mehrere Anwendungen oder erhöhen Sie den Wert des Wertes FILES in der CONFIG.SYS, und versuchen Sie es dann erneut."                                    /* 128 */
    IDS_NOASSOCMSG,         "Dieser Datendatei ist keine Anwendung zugeordnet.\n\nKlicken Sie im Menü 'Datei' auf den Befehl 'Zuordnen', um eine Zuordnung zu erstellen."       /* 128 */
    IDS_ASSOCINCOMPLETE,    "Die Datei kann nicht geöffnet oder gedruckt werden.\n\nVerwenden Sie die Anwendung, mit der die Datei erstellt wurde."
//    IDS_MULTIPLEDSMSG,      "Kann nicht mehr als eine Instanz der angegebenen Anwendung starten."                                                                /* 128 */
//    IDS_OS2APPMSG           "Die angegebene Anwendung ist kein Windows- or MS-DOS-Program."                                                            /* 128 */
//    IDS_NEWWINDOWSMSG       "Diese Anwendung benötigt eine neuere Version von Microsoft Windows."                                                          /* 128 */
//    IDS_PMODEONLYMSG        "Diese Anwendung benötigt Windows."                                                             /* 128 */
    IDS_DDEFAIL             "Ein Fehler ist während des Senden des Befehls zur Anwendung aufgetreten."                                                                /* 128 */
//    IDS_COMPRESSEDEXE       "Dies Anwendung oder einer ihrer Komponenten ist komprimiert.\n\nBenutzen sie das MS-DOS expand tool um die Datei vom Setup-Datenträger zu kopieren."
    IDS_INVALIDDLL          "Eine Bibliotheksdatei, die zum Betrieb der gewählten Anwendung benötigt wird ist defekt. Bitte installieren Sie die Anwendung erneut."
    IDS_SHAREERROR          "Diese Datei wird von einer anderen Anwendung verwendet."

    IDS_CREATELONGDIR       "Datei-Manager kann auf die Datei im Verzeichnis '%s' nicht zugreifen.\n\nMöchten Sie weitermachen?"
    IDS_CREATELONGDIRTITLE  "Erstelle Verzeichnis"

    IDS_MOUSECONFIRM,       "Mausaktion bestätigen"       /* 32 */
    IDS_COPYMOUSECONFIRM,   "Sind Sie sicher, daß Sie die ausgewählten Dateien oder Verzeichnisse nach %s kopieren möchten?"
    IDS_MOVEMOUSECONFIRM,   "Sind Sie sicher, daß Sie die ausgewählten Dateien oder Verzeichnisse nach %s verschieben möchten?"
    IDS_LINKMOUSECONFIRM,   "Sind Sie sicher, daß Sie die ausgewählten Dateien oder Verzeichnisse nach %s verlinken möchten?"
    IDS_EXECMOUSECONFIRM,   "Sind Sie sicher, daß Sie %s mit %s als Dokument ausführen möchten?"                                                          /* 128 */

    IDS_WINFILE,            "Datei-Manager"                  /* 32 */
    IDS_TREETITLE,          "Verzeichnisstruktur"                /* 32 */
    IDS_SEARCHTITLE,        "Suchergebnis: "              /* 32 */

    IDS_READING             "Lese Verzeichnis, bitte warten..."
    IDS_TOOMANYTITLE,       "Zu viele Dateien"                /* 32 */
    IDS_OOMTITLE,           "Datei-Manager - Zu wenig freier Speicherplatz"  /* 32 */
    IDS_OOMREADINGDIRMSG,   "Kann nicht das genze Verzeichnis lesen. Nur ein Teil wird angezeigt."                                              /* 128 */

//    IDS_PRINTFNF            "Die zu druckende Datei kan nicht gefunden werden. Stellen Sie sicher, dass sie den richtigen Pfad und Dateinamen angegeben haben."                                                                                  /* 128 */
    IDS_PRINTMEMORY         "Nicht genug Speicher zum Drucken.\n\nSchließen Sie eine oder mehrere Anwendungen und versuchen Sie es erneut."                                             /* 128 */
    IDS_PRINTDISK           "Nicht genug freier Speicherplatz zum Drucken.\n\nLöschen Sie eine oder mehrere Dateien um Speicherplatz frei zu machen und versuchen Sie es erneut."                        /* 128 */
    IDS_PRINTERROR          "Während des Druckens ist ein Fehler aufgetreten.\n\nStellen Sie sicher, dass der Drucker richtig konfiguriert und der richtige ausgewählt ist."             /* 128 */
    IDS_PRINTONLYONE        "Datei-Manager kann nicht mehrere Dateien drucken.\n\nWählen Sie eine Datei aus und versuchen Sie es erneut."                                               /* 128 */

    IDS_CURDIRIS,           "Aktuelles Verzeichnis: %s"                                                                                                    /* 128 */
    IDS_CURDIRSARE,         "Other: "
    IDS_COPY,               "Kopieren"                          /* 32 */
    IDS_RENAME,             "Umbenennen"                        /* 32 */
    IDS_FORMAT,             "Datenträger formatieren"                   /* 32 */
    IDS_FORMATSELDISK,      "Wählen Sie den Datenträger aus, den Sie formatieren möchten."                                                                                               /* 128 */
    IDS_SYMLINK,            "Symlinken"                       /* 32 */
    IDS_HARDLINK,           "Hardlinken"                      /* 32 */

    IDS_KK_COPYFROMSTR,     "&Von:"
    IDS_KK_COPYTOSTR,       "&Nach:"
    IDS_KK_RENAMEFROMSTR,   "&Von:"
    IDS_KK_RENAMETOSTR,     "&Nach:"
    IDS_KK_HARDLINKFROMSTR, "&Von:"
    IDS_KK_HARDLINKTOSTR,   "&Nach:"
    IDS_KK_SYMLINKFROMSTR,  "&Von:"
    IDS_KK_SYMLINKTOSTR,    "&Nach:"

//    IDS_MAKESYSDISK,      "Erstelle Systemdatenträger"  /* 32 */

    IDS_CREATINGMSG,        "Legt an:"                    /* 32 */
    IDS_REMOVINGDIRMSG,     "Löscht:"                     /* 32 */
    IDS_REMOVINGMSG,        "Löscht..."                   /* 32 */
    IDS_COPYINGMSG,         "Kopiert:"                    /* 32 */
    IDS_OPENINGMSG,         "Öffnet..."                   /* 32 */
    IDS_CLOSINGMSG,         "Schließt..."                 /* 32 */
    IDS_RENAMINGMSG,        "Benennt um..."               /* 32 */
    IDS_MOVINGMSG,          "Verschiebt..."               /* 32 */
    IDS_DELETINGMSG,        "Löscht..."                   /* 32 */
    IDS_PRINTINGMSG,        "Druckt: %s"                  /* 32 */

//    IDS_NOSUCHDRIVE,        "Datenträger %c existiert nicht."                                                                                            /* 128 */
    IDS_DRIVENOTREADY,      "In Laufwerk %c: ist kein Datenträger eingelegt.\n\nLegen Sie einen Datenträger ein, und versuchen Sie es erneut."
    IDS_UNFORMATTED,        "Der Datenträger in Laufwerk %c: ist nicht formatiert.\n\nMöchten Sie ihn jetzt formatieren?"

    IDS_STATUSMSG,          "%d Datei(en) (%s)"             /* 128 */
    IDS_STATUSMSG2,         "%d Datei(en) (%s) ausgewählt"          /* 128 */
    IDS_DRIVEFREE,          "%c: %s von  %s frei"            /* 128 */
    IDS_TREEABORT,          "Unvollständiger Verzeichnisbaum wird angezeigt"     /* 128 */
    IDS_DIRSREAD,           "%d Verzeichnisse gelesen"                   /* 32 */
    IDS_SEARCHMSG,          "%d Datei(en) gefunden"
    IDS_BYTES,              "%ld bytes"
    IDS_SBYTES,             "%s bytes"

    IDS_SELECTEDFILES,      "die ausgewählten Dateien"            /* 32 */

    /* These strings are used for generating error messages
     * from the Copy, Move, and Delete code. */

    IDS_COPYERROR + FUNC_COPY     "Fehler beim Kopieren einer Datei"
    IDS_COPYERROR + FUNC_MOVE     "Fehler beim Verschieben einer Datei"
    IDS_COPYERROR + FUNC_DELETE   "Fehler beim Löschen einer Datei"
    IDS_COPYERROR + FUNC_RENAME   "Fehler beim Umbenennen einer Datei"
    IDS_COPYERROR + FUNC_SETDRIVE "Fehler beim Auswählen des Laufwerks"
    IDS_COPYERROR + FUNC_EXPAND   "Fehler beim Lesen eines Verzeichnisses"
    IDS_COPYERROR + FUNC_LABEL    "Fehler beim Benennen des Datenträgers"
    IDS_COPYERROR + FUNC_LINK     "Fehler beim Erstellen eines Symbolischen Links"
    IDS_COPYERROR + FUNC_HARD     "Fehler beim Erstellen eines Hardlinks"
    IDS_COPYERROR + FUNC_JUNC     "Fehler beim Erstellen einer Junction"

    /* The first %s is replaced by a file name. The second %s is replaced
     * by one of the "reasons" below. */

    IDS_VERBS + FUNC_COPY       "%s kann nicht kopiert werden.\n%s"
    IDS_VERBS + FUNC_MOVE       "%s kann nicht verschoben werden.\n%s"
    IDS_VERBS + FUNC_DELETE     "%s kann nicht gelöscht werden.\n%s"
    IDS_VERBS + FUNC_RENAME     "%s kann nicht umbenannt werden.\n%s"
    IDS_VERBS + FUNC_LINK       "%s kann nicht symbolisch verlinkt werden.\n%s"
    IDS_VERBS + FUNC_HARD       "%s kann nicht verlinkt werden.\n%s"
    IDS_VERBS + FUNC_JUNC       "%s kann als Junction nicht erstellt werden.\n%s"
    IDS_ACTIONS + 1             "Verzeichnis %s kann nicht erzeugt werden.\n%s"
    IDS_ACTIONS + 2             "Verzeichnis %s kann nicht gelöscht werden.\n%s"
    IDS_REPLACING               "%s kann nicht erstellt oder ersetzt werden.\n%s"
    // IDS_CREATING             "Datei-Manager kann %s nicht erstellen: %s"

// include reason strings

#include "suggest_de-DE.db"

    IDS_DESTFULL                "Die Speicherkapazität des Ziellaufwerks ist erschöpft. Legen Sie einen neuen Datenträger ein, um fortzusetzen."
    IDS_WRITEPROTECTFILE        "Dies ist eine System-, eine versteckte oder eine schreibgeschützte Datei."

    IDS_COPYINGTITLE            "Kopiere..."

    IDS_QUICKFORMATTINGTITLE    "Schnell-Formatierung..."

    IDS_BUSYFORMATQUITVERIFY    "Momentan wird ein Datenträger vom Datei-Manager formatiert. Wenn Sie den Datei-Manager beenden, wird dieser Vorgang abgebrochen."
    IDS_BUSYCOPYQUITVERIFY      "Momentan wird ein Datenträger vom Datei-Manager kopiert. Wenn Sie den Datei-Manager beenden, wird dieser Vorgang abgebrochen."
    IDS_PERCENTCOMPLETE         "Prozent bearbeitet"

    IDS_12MB                    "1%s2 MB"
    IDS_360KB                   "360K"
    IDS_144MB                   "1%s44 MB"
    IDS_720KB                   "720K"
    IDS_288MB                   "2%s88 MB"
    IDS_2080MB                  "20%s8 MB"

#if defined(JAPAN) && defined(i386)
/* ADD KBNES. NEC MEDIATYPE START */
JAPANBEGIN
    IDS_125MB                   "1%s25 MB"
    IDS_256KB                   "256K"
    IDS_128MB                   "128 MB"
JAPANEND
/* ADD KBNES. NEC MEDIATYPE END */

//
// FMR jul.21.1994 JY
// We added 640KB/1.23MB media types.
//
JAPANBEGIN
    IDS_640KB                   "640K"
    IDS_123MB                   "1%s23 MB"
JAPANEND
#endif

    IDS_DEVICECAP               "Laufwerkkapazität"
    IDS_QSUPMEDIA               "Datenträgerinformationen sind nicht lesbar.\n\nVergewissern Sie sich, daß eine Diskette im Laufwerk ist."
    IDS_REMOVEMED               "Unbekannter Datenträgertyp"

    IDS_CANTFORMATTITLE         "Unbekannter Datenträgertyp"
    IDS_CANTFORMAT              "Die Art von Datenträgern in Laufwerk %s: kann mit Datei-Manager nicht formatiert werden. Verwenden Sie den Festplatten-Manager."

    IDS_FFERR_INCFS             "Inkompatibles Dateisystem."
    IDS_FFERR_ACCESSDENIED      "Der Zugriff wird verweigert."
    IDS_FFERR_DISKWP            "Der Datenträger ist schreibgeschützt."
    IDS_FFERR_CANTLOCK          "Datenträger kann nicht gesperrt werden."
    IDS_FFERR_CANTQUICKF        "Quick-Format kann nicht durchgeführt werden.\n\nStellen Sie sicher, daß die richtige Speicherkapazität angegeben ist."
    IDS_FFERR_SRCIOERR          "Ein-/Ausgabefehler auf der Quelldiskette"
    IDS_FFERR_DSTIOERR          "Ein-/Ausgabefehler auf der Zieldiskette"
    IDS_FFERR_SRCDSTIOERR       "Ein-/Ausgabefehler sowohl auf der Quell- als auch auf der Zieldiskette"
    IDS_FFERR_GENIOERR          "Eingabe/Ausgabe (E/A)-Fehler"
//    IDS_FFERR_MEDIASENSE      "Diese Platte kann mit einer Kapazität von %s formatiert werden. Mit dieser Kapazität weiter formatieren?"
    IDS_FFERR                   "Der Datenträger kann nicht formatiert werden.\n\nVergewissern Sie sich, daß der Datenträger eingelegt und nicht schreibgeschützt oder beschädigt ist, und nicht die falsche Speicherdichte angegeben wurde."
    IDS_FFERR_BADLABEL          "Der Datenträger kann nicht benannt werden.\n\nDie angegebene Bezeichnung ist ungültig. Stellen Sie sicher, daß die Bezeichnung keine der folgenden Zeichen enthält\n\
                                [Leerzeichen] * ? / \\ | . , ; : + = [ ] ( ) & ^ < > "" "


    IDS_FORMATCONFIRM           "Beim Formatieren werden ALLE Daten von der Festplatte gelöscht. Sind Sie sicher, dass Sie die Festplatte im Laufwerk %c formatieren wollen?"
    IDS_FORMATCONFIRMTITLE      "Datenträgerformatierung bestätigen"

    IDS_DISKCOPYCONFIRM         "Dieser Vorgang löscht ALLE Daten auf der Zieldiskette.\nSind Sie sicher, daß Sie fortsetzen möchten?"
    IDS_DISKCOPYCONFIRMTITLE    "Datenträgerkopieren bestätigen"
    IDS_ANDCLOSE                "&Schließen"        // goes on Selection dialog
    IDS_CLOSE                   "Schließen"         // braindead "&Change"
    IDS_PATHNOTTHERE            "Verzeichnis %s existiert nicht.\n\nMöchten Sie es erzeugen?"
    IDS_PROGRAMS                "Programme#*.exe;*.pif;*.com;*.bat#Alle Dateien (*.*)#*.*#"

    IDS_MENUANDITEM             "%s - %s"
    IDS_DRIVELABEL              "Laufwerk:"
    IDS_STATUSMSGSINGLE         "%s, "

    IDS_CONNECTHELP             "Netzlaufwerk verbinden"
    IDS_DISCONHELP              "Netzlaufwerk trennen"
    IDS_CONNECTIONHELP          "Netzwerkverbindungen"
    IDS_SHAREASHELP             "Verzeichnis freigeben"
    IDS_STOPSHAREHELP           "Verzeichnisfreigabe beenden"
    IDS_VDETAILSHELP            "Alle Dateiangaben anzeigen"
    IDS_VNAMEHELP               "Nur den Dateinamen anzeigen"
    IDS_BYNAMEHELP              "Nach Name"
    IDS_BYTYPEHELP              "Nach Typ"
    IDS_BYSIZEHELP              "Nach Größe"
    IDS_BYDATEHELP              "Nach Datum"
    IDS_NEWWINHELP              "Neues Fenster"
    IDS_COPYHELP                "Dateien kopieren"
    IDS_MOVEHELP                "Dateien verschieben"
    IDS_DELHELP                 "Dateien löschen"

    IDS_DIRNAMELABEL            "Ver&zeichnisname:"
    IDS_DRIVENOTAVAILABLE       "Netzwerklaufwerk ist nicht verfügbar."

    IDS_SHAREDAS                "Freigegeben als %s"
    IDS_NOTSHARED               "Nicht freigegeben"

    IDS_DRIVE_COMPRESSED        " - KOMPRIMIERT"

    IDS_DRAG_COPYING            "Datei(en) kopieren nach %s"
    IDS_DRAG_MOVING             "Datei(en) verschieben nach %s"
    IDS_DRAG_LINKING            "Datei(en) verlinken nach %s"
    IDS_DRAG_EXECUTING          "Starten von Datei(en) mit %s"

    IDS_ORDERB                  "%s Bytes"
    IDS_ORDERKB                 "%s KB"
    IDS_ORDERMB                 "%s MB"
    IDS_ORDERGB                 "%s GB"
    IDS_ORDERTB                 "%s TB"

    IDS_VN_COMMENTS             "Kommentare"
    IDS_VN_COMPANYNAME          "Firmenname"
    IDS_VN_FILEDESCRIPTION      "Dateibeschreibung"
    IDS_VN_INTERNALNAME         "Interner Name"
    IDS_VN_LEGALTRADEMARKS      "Geschützte Marken"
    IDS_VN_ORIGINALFILENAME     "Originaler Dateiname"
    IDS_VN_PRIVATEBUILD         "Beschreibung"
    IDS_VN_PRODUCTNAME          "Produktname"
    IDS_VN_PRODUCTVERSION       "Produktversion"
    IDS_VN_SPECIALBUILD         "Spezielle Beschreibung"

    IDS_VN_LANGUAGE             "Sprache"
    IDS_VN_LANGUAGES            "Sprachen"

    IDS_ASSOCIATE               "Durchsuchen"
    IDS_RUN                     "Ausführen"
    IDS_WINHELPERR              "Die Hilfeinformation kann nicht angezeigt werden."
    IDS_NOEXEASSOC              "Dateien mit der Dateinamenerweiterung %s sind Programme und können nicht einer anderen Anwendung zugeordnet werden."
    IDS_ASSOCNOTEXE             "%s ist kein Programm und kann nicht einer Dateinamenerweiterung zugeordnet werden."
    IDS_ASSOCNONE               "(Keine)"
    IDS_NOFILES                 "Keine Dateien gefunden."
    IDS_NOACCESSDIR             "Sie haben keine Berechtigung auf dieses Verzeichnis zuzugreifen."
    IDS_NOACCESSFILE            "Sie haben keine Berechtigung auf diese Datei zuzugreifen."

    IDS_DRIVEBUSY_COPY          "Auf Laufwerk %c: kann nicht zugegriffen werden, da es beschäftigt ist.\nEs wird eine Diskette kopiert."
    IDS_DRIVEBUSY_FORMAT        "Auf Laufwerk %c: kann nicht zugegriffen werden, da es beschäftigt ist.\nEs wird eine Diskette formatiert."

    IDS_COPYMOVENOTCOMPLETED    "Funktion nicht vollständig ausgeführt"
    IDS_DIRREMAINS              "Vorgang kann nicht für alle Dateien und Verzeichnisse ausgeführt werden."

    IDS_TOOMANYWINDOWS          "Es sind zu viele Verzeichnisfenster geöffnet.\n\nSchließen Sie ein oder mehrere Fenster, und versuchen Sie es erneut."
    IDS_FMIFSLOADERR            "Eine für diese Funktion benötigte Bibliothek ist nicht verfügbar."

    IDS_NOSUCHDIRTITLE          "Verzeichnis kann nicht gelesen werden"
    IDS_NOSUCHDIR               "Verzeichnis existiert nicht."

    IDS_BADNETNAMETITLE         "Netzlaufwerk kann nicht verbunden werden."
    IDS_BADNETNAME              "Netzwerkname kann nicht gefunden werden."

    IDS_ALLFILES                "'Alle...' betrifft auch System-, versteckte und schreibgeschützte Dateien."

    IDS_ASSOC_OPEN              "Öffnen"
    IDS_ASSOC_PRINT             "Drucken"

    IDS_ADDEXTTITLE             "Erweiterung hinzufügen"
    IDS_ADDEXTTEXT              "Die Erweiterung '%s' ist momentan '%s.' zugeordnet. Fortsetzen und diese Zuordnung überschreiben?"

    IDS_EXTTITLE                "Dateizuordnungs-Editor"

    IDS_EXTADDERROR             "Erweiterung kann nicht zugeordnet werden."
    IDS_EXTDELERROR             "Erweiterung konnte nicht gelöscht werden."
    IDS_FILETYPEADDERROR        "Dateityp kann nicht hinzugefügt werden."
    IDS_FILETYPEDELERROR        "Dateityp kann nicht gelöscht werden."
    IDS_FILETYPEREADERROR       "Dateityp kann nicht gelesen werden."

    IDS_FILETYPENULLDESCERROR   "Die Beschreibung darf nicht leer sein. Bitte geben Sie eine Beschreibung ein."
    IDS_FILETYPEDUPDESCERROR    "Es konnte keine einmalige ID unter Verwendung Ihrer Beschreibung erzeugt werden. Bitte geben Sie eine neue Beschreibung ein."

    IDS_FILETYPEDELCONFIRMTITLE "Dateityp löschen"
    IDS_FILETYPEDELCONFIRMTEXT  "Hiermit löschen Sie den Dateityp und alle zugeordneten Erweiterungen. Sind Sie sicher, daß Sie '%s' löschen möchten?"
#ifdef ASSOC
    IDS_FILETYPEDELCONFIRMUSERTEXT "Sie löschen einen persönlichen Dateityp. Es wird auf den gemeinsamen Dateityp zurückgesetzt, und alle seine Erweiterungen bleiben erhalten.  Sind Sie sicher, dass Sie'%s' rückgängig machen wollen?"
    IDS_FILETYPEUSERIZETEXT     "Sie passen einen gemeinsamen Dateityp an. Datei-Manager speichert Ihre Änderungen in einem personalisierten Dateityp. Weitermachen?"
#endif
    IDS_FILETYPECOMMANDNULLTEXT "Für einen Dateityp muß mindestens ein Befehl für einen Vorgang angegeben sein. Bitte geben Sie den Namen einer Anwendung ein."

    IDS_NEWFILETYPETITLE        "Dateitypeditor"
    IDS_COPYINGDISKTITLE        "Datenträger wird kopiert"
    IDS_SEARCHING               "Suche..."

JAPANBEGIN
    IDS_WRNNOSHIFTJIS           "このフォントを使用すると漢字の表示が\nできなくなります。"
JAPANEND

    IDS_INITUPDATEFAIL          "Hintergrundaktualisierung konnte nicht initialisiert werden. Der Datei-Manager wird beendet."
    IDS_INITUPDATEFAILTITLE     "Initialisierung des Datei-Managers"

    IDS_COMPRESSDIR             "Möchten Sie alle Dateien und Unterverzeichnisse in %s auch komprimieren?"
    IDS_UNCOMPRESSDIR           "Möchten Sie alle Dateien und Unterverzeichnisse in %s auch dekomprimieren?"
    IDS_COMPRESS_ATTRIB_ERR     "Komprimierungsattribut von '%s' kann nicht geändert werden."
    IDS_NTLDRCOMPRESSERR        "Die Datei '%s' wird nicht komprimiert. Komprimieren dieser Datei könnte Ihr System unstartbar machen."
    IDS_MULTICOMPRESSERR        "Der Datei-Manager komprimiert bzw. dekomprimiert momentan Dateien.\nWarten Sie bitte, bis dieser Vorgang beendet ist, bevor Sie weitere Dateien komprimieren bzw. dekomprimieren."

    IDS_EDITFILTER              "Programme (*.exe)\0*.exe\0"

END
#undef SUGGEST

/* Help strings for the popup menus.
 */
STRINGTABLE
BEGIN
    MH_POPUP+IDM_FILE,          "Befehle zum Arbeiten mit Dateien"
    MH_POPUP+IDM_DISK,          "Befehle zum Arbeiten mit Datenträgern"
    MH_POPUP+IDM_TREE,          "Befehle zum Arbeiten in dem Strukturfenster"
    MH_POPUP+IDM_VIEW,          "Befehle zum Bestimmen der Informationsanzeige"
    MH_POPUP+IDM_OPTIONS,       "Befehle zum Einstellen von Optionen"
    MH_POPUP+IDM_SECURITY,      "Befehle zum Einstellen der Datei- und Verzeichnissicherheit"
    MH_POPUP+IDM_WINDOW,        "Befehle zum Anordnen der Fenster"
    MH_POPUP+IDM_HELP,          "Befehle zum Anzeigen der Hilfe zu Datei-Manager"
END


// Help strings for the "standard" toolbar items.

STRINGTABLE
BEGIN
    MH_MYITEMS+IDM_OPEN,            "Ausgewähltes Objekt öffnen"
    MH_MYITEMS+IDM_EDIT,            "Bearbeiten des ausgewählten Elements mit Notepad.exe"
    MH_MYITEMS+IDM_MOVE,            "Verschieben des ausgewählten Objekts"
    MH_MYITEMS+IDM_COPY,            "Kopieren von Dateien und Verzeichnissen"
    MH_MYITEMS+IDM_COPYTOCLIPBOARD, "Kopieren einer Datei in die Zwischenablage"
    MH_MYITEMS+IDM_CUTTOCLIPBOARD,  "Schneidet eine oder mehrere Dateien in die Zwischenablage aus"
    MH_MYITEMS+IDM_PASTE,           "Datei aus der Zwischenablage in das aktuelle Verzeichnis einfügen"
    MH_MYITEMS+IDM_COMPRESS,        "Komprimieren einer Datei oder eines Verzeichnisses"
    MH_MYITEMS+IDM_UNCOMPRESS,      "Dekomprimieren einer Datei oder eines Verzeichnisses"
    MH_MYITEMS+IDM_DELETE,          "Löschen von Dateien und Verzeichnissen"
    MH_MYITEMS+IDM_RENAME,          "Umbenennen von Dateien und Verzeichnissen"
    MH_MYITEMS+IDM_ATTRIBS,         "Anzeige der Eigenschaften und Setzen von Dateiattributen"
    MH_MYITEMS+IDM_RUN,             "Startet oder öffnet eine Anwendung oder ein Dokument"
    MH_MYITEMS+IDM_PRINT,           "Drucken eines Dokuments"
    MH_MYITEMS+IDM_ASSOCIATE,       "Zuordnen einer Datei zu einer Anwendung"
    MH_MYITEMS+IDM_MAKEDIR,         "Erstellen eines Verzeichnisses"
    MH_MYITEMS+IDM_SEARCH,          "Suchen nach Dateien und Verzeichnissen"
    MH_MYITEMS+IDM_SELECT,          "Auswählen einer Datei oder eines Verzeichnisses"
    MH_MYITEMS+IDM_EXIT,            "Beenden von Datei-Manager"

    MH_MYITEMS+IDM_DISKCOPY,        "Inhalt eines Datenträgers kopieren"
    MH_MYITEMS+IDM_LABEL,           "Zuweisen oder Ändern der Datenträgerbezeichnung"
    MH_MYITEMS+IDM_FORMAT,          "Formatieren einer Diskette/eines Laufwerks"
//    MH_MYITEMS+IDM_SYSDISK,         "Kopiere MS-DOS-Dateien auf eine Diskette"
    MH_MYITEMS+IDM_CONNECT,         "Verbinden zu einem Netzlaufwerk"
    MH_MYITEMS+IDM_DISCONNECT,      "Netzlaufwerk trennen"
//    MH_MYITEMS+IDM_CONNECTIONS,     "Netzwerk-Verbindungen..."
//    MH_MYITEMS+IDM_SHARES,          "Freigegebene Verzeichnisse &anzeigen..."
    MH_MYITEMS+IDM_SHAREAS,         "Freigeben eines Verzeichnisses"
    MH_MYITEMS+IDM_STOPSHARE,       "Freigabe eines Verzeichnisses beenden"

    MH_MYITEMS+IDM_DRIVESMORE,  "Auswählen eines Laufwerks"

    MH_MYITEMS+IDM_EXPONE,      "Zeigt eine andere Ebene eines Verzeichnisses an"
    MH_MYITEMS+IDM_EXPSUB,      "Zeigt alle Ebenen eines Verzeichnisses an"
    MH_MYITEMS+IDM_EXPALL,      "Zeigt alle Ebenen aller Verzeichnisse an"
    MH_MYITEMS+IDM_COLLAPSE,    "Klappt alle Verzeichnisse eines ausgewählten Verzeichnisses zusammen"
    MH_MYITEMS+IDM_ADDPLUSES,   "Zeigt Verzeichnisse an, die Unterverzeichnisse haben"

    MH_MYITEMS+IDM_BOTH,        "Verzeichnisstruktur und Inhalt des aktuellen Verzeichnisses anzeigen"
    MH_MYITEMS+IDM_TREEONLY,    "Nur S
Download .txt
gitextract_ydtylm4l/

├── .gitignore
├── CHANGES.md
├── GNUmakefile
├── LICENSE
├── Package/
│   ├── Package.appxmanifest
│   └── Package.wapproj
├── README.md
├── SECURITY.md
├── SignConfig.xml
├── Winfile.sln
├── build/
│   ├── README.md
│   ├── Winfile.default.props
│   └── Winfile.props
├── help/
│   ├── WINFILE.CHM
│   ├── ini/
│   │   └── index.html
│   └── winfile.hlp
├── nuget/
│   ├── LICENSE.txt
│   ├── VERIFICATION.txt
│   └── winfile.nuspec
├── samples/
│   └── addon/
│       ├── AddOnSample.vcxproj.filters
│       ├── AddonSample.vcxproj
│       ├── dllmain.cpp
│       ├── extproc.cpp
│       ├── resource.h
│       ├── resources.rc
│       ├── stdafx.cpp
│       ├── stdafx.h
│       ├── targetver.h
│       └── wfext.h
├── src/
│   ├── BagOValues.h
│   ├── Resize.c
│   ├── Resize.h
│   ├── Winfile.vcxproj
│   ├── Winfile.vcxproj.filters
│   ├── dbg.c
│   ├── dbg.h
│   ├── fmifs.h
│   ├── lang/
│   │   ├── res_de-DE.rc
│   │   ├── res_en-US.rc
│   │   ├── res_he-IL.rc
│   │   ├── res_ja-JP.rc
│   │   ├── res_ko-KR.rc
│   │   ├── res_pl-PL.rc
│   │   ├── res_pt-PT.rc
│   │   ├── res_tr-TR.rc
│   │   ├── res_zh-CN.rc
│   │   ├── winfile_de-DE.dlg
│   │   ├── winfile_en-US.dlg
│   │   ├── winfile_he-IL.dlg
│   │   ├── winfile_ja-JP.dlg
│   │   ├── winfile_ko-KR.dlg
│   │   ├── winfile_pl-PL.dlg
│   │   ├── winfile_pt-PT.dlg
│   │   ├── winfile_tr-TR.dlg
│   │   └── winfile_zh-CN.dlg
│   ├── lfn.c
│   ├── lfn.h
│   ├── lfnmisc.c
│   ├── mcopy.cur
│   ├── mhard.cur
│   ├── mlink.cur
│   ├── mmove.cur
│   ├── mpr.h
│   ├── numfmt.c
│   ├── numfmt.h
│   ├── origrc/
│   │   ├── winfile.cs-CZ.rc
│   │   ├── winfile.da-DK.rc
│   │   ├── winfile.de-DE.rc
│   │   ├── winfile.en-US.rc
│   │   ├── winfile.es-ES.rc
│   │   ├── winfile.fi-FI.rc
│   │   ├── winfile.fr-FR.rc
│   │   ├── winfile.hu-HU.rc
│   │   ├── winfile.it-IT.rc
│   │   ├── winfile.ja-JP.rc
│   │   ├── winfile.ko-KR.rc
│   │   ├── winfile.nb-NO.rc
│   │   ├── winfile.nl-NL.rc
│   │   ├── winfile.pl-PL.rc
│   │   ├── winfile.pt-BR.rc
│   │   ├── winfile.ru-RU.rc
│   │   ├── winfile.sv-SE.rc
│   │   ├── winfile.zh-CN.rc
│   │   └── winfile.zh-TW.rc
│   ├── res.h
│   ├── res.rc
│   ├── scopy.cur
│   ├── shard.cur
│   ├── slink.cur
│   ├── smove.cur
│   ├── spinlock.h
│   ├── split.cur
│   ├── suggest.c
│   ├── suggest.h
│   ├── tbar.c
│   ├── treectl.c
│   ├── treectl.h
│   ├── w31rc/
│   │   ├── winfile.Brazil.rc
│   │   ├── winfile.Catalan.rc
│   │   ├── winfile.Czech.rc
│   │   ├── winfile.Danish.rc
│   │   ├── winfile.Dutch.rc
│   │   ├── winfile.Finnish.rc
│   │   ├── winfile.French.Int.rc
│   │   ├── winfile.French.rc
│   │   ├── winfile.German.rc
│   │   ├── winfile.Hungary.rc
│   │   ├── winfile.Italian.rc
│   │   ├── winfile.Japanese.rc
│   │   ├── winfile.Korean.rc
│   │   ├── winfile.Norway.rc
│   │   ├── winfile.Polish.rc
│   │   ├── winfile.Portuguese.rc
│   │   ├── winfile.SimChin.rc
│   │   ├── winfile.Spanish.rc
│   │   ├── winfile.Swedish.rc
│   │   ├── winfile.TradChin.rc
│   │   ├── winfile.Turkish.rc
│   │   └── winfile.USEnglish.rc
│   ├── wfassoc.c
│   ├── wfchgnot.c
│   ├── wfcomman.c
│   ├── wfcopy.c
│   ├── wfcopy.h
│   ├── wfdir.c
│   ├── wfdirrd.c
│   ├── wfdirsrc.c
│   ├── wfdlgs.c
│   ├── wfdlgs.h
│   ├── wfdlgs2.c
│   ├── wfdlgs3.c
│   ├── wfdoc.txt
│   ├── wfdocb.h
│   ├── wfdos.c
│   ├── wfdrives.c
│   ├── wfdrop.c
│   ├── wfdrop.h
│   ├── wfext.c
│   ├── wfext.h
│   ├── wfexti.h
│   ├── wffile.c
│   ├── wfgoto.cpp
│   ├── wfgwl.h
│   ├── wfhelp.h
│   ├── wfinfo.c
│   ├── wfinfo.h
│   ├── wfinit.c
│   ├── wfloc.c
│   ├── wfmem.c
│   ├── wfmem.h
│   ├── wfprint.c
│   ├── wfsearch.c
│   ├── wftree.c
│   ├── wfutil.c
│   ├── winexp.h
│   ├── winfile.c
│   ├── winfile.exe.manifest
│   ├── winfile.h
│   ├── wnetcaps.c
│   └── wnetcaps.h
└── tools/
    ├── ExeView/
    │   ├── ExeView.vcxproj
    │   ├── ExeView.vcxproj.filters
    │   ├── abstract.txt
    │   ├── bmp.cpp
    │   ├── exehdr.cpp
    │   ├── exehdr.h
    │   ├── exeview.txt
    │   ├── filllb.cpp
    │   ├── global.h
    │   ├── iconcur.cpp
    │   ├── init.cpp
    │   ├── main.cpp
    │   ├── main.def
    │   ├── main.rc
    │   ├── makefile
    │   ├── menudlg.cpp
    │   ├── res.cpp
    │   ├── res.h
    │   ├── save.cpp
    │   ├── stdafx.cpp
    │   ├── stdafx.h
    │   └── targetver.h
    ├── FileSignatureInfo/
    │   ├── FileSignatureInfo.cpp
    │   ├── FileSignatureInfo.vcxproj
    │   ├── FileSignatureInfo.vcxproj.filters
    │   ├── VerifySignature.cpp
    │   ├── stdafx.cpp
    │   ├── stdafx.h
    │   └── targetver.h
    └── VerifyResources/
        ├── Resources.h
        ├── VerifyResources.cpp
        ├── VerifyResources.vcxproj
        ├── VerifyResources.vcxproj.filters
        ├── stdafx.cpp
        ├── stdafx.h
        └── targetver.h
Download .txt
SYMBOL INDEX (765 symbols across 68 files)

FILE: samples/addon/dllmain.cpp
  function BOOL (line 16) | BOOL APIENTRY DllMain( HMODULE hModule,

FILE: samples/addon/extproc.cpp
  function LONG (line 74) | LONG APIENTRY FMExtensionProcW(HWND hwnd, WPARAM wEvent, LPARAM lParam)

FILE: samples/addon/wfext.h
  type FMS_GETFILESELA (line 63) | typedef struct _FMS_GETFILESELA {
  type FMS_GETFILESELW (line 70) | typedef struct _FMS_GETFILESELW {
  type FMS_GETDRIVEINFOA (line 86) | typedef struct _FMS_GETDRIVEINFOA {      // for drive
  type FMS_GETDRIVEINFOW (line 94) | typedef struct _FMS_GETDRIVEINFOW {      // for drive
  type FMS_LOADA (line 111) | typedef struct _FMS_LOADA {
  type FMS_LOADW (line 118) | typedef struct _FMS_LOADW {
  type EXT_BUTTON (line 136) | typedef struct tagEXT_BUTTON {
  type FMS_TOOLBARLOAD (line 142) | typedef struct tagFMS_TOOLBARLOAD {
  type FMS_HELPSTRINGA (line 151) | typedef struct tagFMS_HELPSTRINGA {
  type FMS_HELPSTRINGW (line 157) | typedef struct tagFMS_HELPSTRINGW {
  type WPARAM (line 172) | typedef DWORD (APIENTRY *FM_EXT_PROC)(HWND, WPARAM, LPARAM);

FILE: src/BagOValues.h
  type pair (line 22) | typedef pair<wstring, TValue> TPair;
  type vector (line 23) | typedef vector<TPair> TVector;
  type typename (line 24) | typedef typename TVector::const_iterator TItr;
  function Add (line 37) | void Add(wstring key, TValue value)
  function Sort (line 49) | void Sort()

FILE: src/Resize.c
  type RESIZE_DIALOG_INFO (line 79) | typedef struct _RESIZE_DIALOG_INFO {
  type RESIZE_DIALOG_DATA_CREATION_INFO (line 94) | typedef struct _RESIZE_DIALOG_DATA_CREATION_INFO {
  type RESIZE_DIALOG_DATA_WINDOW_EXTRA (line 105) | typedef struct _RESIZE_DIALOG_DATA_WINDOW_EXTRA {
  type RESIZE_DIALOG_CONTROL_WINDOW_EXTRA (line 116) | typedef struct _RESIZE_DIALOG_CONTROL_WINDOW_EXTRA {
  type RESIZE_DIALOG_CONTROL_CREATION_INFO (line 134) | typedef struct _RESIZE_DIALOG_CONTROL_CREATION_INFO {
  function BOOL (line 151) | BOOL
  function BOOL (line 188) | BOOL
  function BOOL (line 225) | BOOL
  function BOOL (line 289) | BOOL CALLBACK
  function BOOL (line 448) | BOOL CALLBACK
  function LRESULT (line 514) | LRESULT CALLBACK
  function BOOL (line 614) | BOOL CALLBACK
  function LRESULT (line 668) | LRESULT CALLBACK
  function BOOL (line 871) | BOOL

FILE: src/dbg.c
  function VOID (line 31) | VOID DbgAssert(
  function VOID (line 42) | VOID DbgTrace(
  function VOID (line 57) | VOID DbgBreak(
  function VOID (line 71) | VOID DbgPrint1(
  function VOID (line 90) | VOID DbgEnter(
  function VOID (line 96) | VOID DbgLeave(
  function VOID (line 103) | VOID DbgTraceMessage(
  function VOID (line 117) | VOID DbgTraceDefMessage(

FILE: src/fmifs.h
  type FMIFS_PACKET_TYPE (line 23) | typedef enum _FMIFS_PACKET_TYPE {
  type FMIFS_PERCENT_COMPLETE_INFORMATION (line 49) | typedef struct _FMIFS_PERCENT_COMPLETE_INFORMATION {
  type FMIFS_FORMAT_REPORT_INFORMATION (line 53) | typedef struct _FMIFS_FORMAT_REPORT_INFORMATION {
  type FMIFS_INSERT_DISK_INFORMATION (line 68) | typedef struct _FMIFS_INSERT_DISK_INFORMATION {
  type FMIFS_IO_ERROR_INFORMATION (line 72) | typedef struct _FMIFS_IO_ERROR_INFORMATION {
  type FMIFS_FINISHED_INFORMATION (line 78) | typedef struct _FMIFS_FINISHED_INFORMATION {
  type FMIFS_CHECKONREBOOT_INFORMATION (line 82) | typedef struct _FMIFS_CHECKONREBOOT_INFORMATION {
  type TEXT_MESSAGE_TYPE (line 86) | typedef enum _TEXT_MESSAGE_TYPE {
  type FMIFS_TEXT_MESSAGE (line 92) | typedef struct _FMIFS_TEXT_MESSAGE {
  type FMIFS_MEDIA_TYPE (line 104) | typedef enum _FMIFS_MEDIA_TYPE {
  type FMIFS_CHKDSKEX_PARAM (line 126) | typedef struct {
  type BOOLEAN (line 179) | typedef BOOLEAN
  type VOID (line 186) | typedef
  type VOID (line 197) | typedef
  type BOOLEAN (line 209) | typedef
  type VOID (line 217) | typedef
  type VOID (line 231) | typedef
  type VOID (line 241) | typedef
  type VOID (line 250) | typedef
  type BOOLEAN (line 259) | typedef
  type BOOLEAN (line 266) | typedef
  type VOID (line 276) | typedef
  type VOID (line 287) | typedef
  type VOID (line 294) | typedef
  type VOID (line 303) | typedef
  type BOOLEAN (line 310) | typedef
  type BOOLEAN (line 326) | typedef

FILE: src/lfn.c
  function BOOL (line 30) | BOOL
  function BOOL (line 122) | BOOL
  function BOOL (line 189) | BOOL
  function BOOL (line 225) | BOOL
  function DWORD (line 246) | DWORD
  function BOOL (line 259) | BOOL
  function BOOL (line 343) | BOOL
  function BOOL (line 435) | BOOL
  function BOOL (line 456) | BOOL
  function DWORD (line 504) | DWORD
  function DWORD (line 540) | DWORD
  function DWORD (line 590) | DWORD
  function DWORD (line 611) | DWORD
  type REPARSE_DATA_BUFFER (line 634) | typedef struct _REPARSE_DATA_BUFFER {
  function BOOL (line 664) | BOOL IsVeryLongPath(LPCWSTR pszPathName)
  function DWORD (line 674) | DWORD WFJunction(LPCWSTR pszLinkDirectory, LPCWSTR pszLinkTarget)
  function DWORD (line 781) | DWORD DecodeReparsePoint(LPCWSTR szFullPath, LPWSTR szDest, DWORD cwcDest)
  function DWORD (line 850) | DWORD
  function DWORD (line 866) | DWORD

FILE: src/lfn.h
  type LFNDTA (line 25) | typedef struct {

FILE: src/lfnmisc.c
  function DWORD (line 41) | DWORD
  function WORD (line 193) | WORD I_LFNEditName( LPTSTR lpSrc, LPTSTR lpEd, LPTSTR lpRes, INT iResBuf...

FILE: src/mpr.h
  type _CONNECTION_INFO (line 24) | struct _CONNECTION_INFO
  type PARAMETERS (line 29) | typedef struct _PARAMETERS {
  type WNET_CONNECTIONINFOA (line 223) | typedef struct _WNET_CONNECTINFOA
  type WNET_CONNECTIONINFOW (line 229) | typedef struct _WNET_CONNECTINFOW
  type BOOL (line 294) | typedef BOOL (*PFUNC_VALIDATION_CALLBACK)( LPWSTR pszName );
  type DWORD (line 430) | typedef DWORD (*PF_NPGetReconnectFlags) (

FILE: src/numfmt.c
  function LPTSTR (line 25) | LPTSTR

FILE: src/spinlock.h
  type SpinLock (line 21) | struct SpinLock
  function HasThresholdReached (line 40) | inline bool HasThresholdReached() { return (m_iterations >= YIELD_ITERAT...
  function Lock (line 44) | void SpinLock::Lock()
  function Unlock (line 87) | void SpinLock::Unlock()

FILE: src/suggest.c
  function DWORD (line 52) | DWORD
  function PDWORD (line 199) | PDWORD

FILE: src/tbar.c
  type TBSAVEHDR (line 144) | typedef struct
  type TBSAVEITEM (line 152) | typedef struct
  function Static (line 163) | Static VOID
  function VOID (line 178) | VOID
  function Static (line 188) | Static VOID
  function VOID (line 206) | VOID
  function VOID (line 237) | VOID
  function VOID (line 317) | VOID
  function VOID (line 387) | VOID
  function VOID (line 419) | VOID
  function VOID (line 443) | VOID
  function Static (line 476) | Static VOID
  function Static (line 577) | Static VOID
  function Static (line 635) | Static VOID
  function Static (line 685) | Static BOOL
  function VOID (line 750) | VOID
  function BOOL (line 793) | BOOL
  function DWORD (line 853) | DWORD
  function VOID (line 1179) | VOID
  function DWORD (line 1282) | DWORD
  function VOID (line 1291) | VOID
  function BOOL (line 1344) | BOOL LastButtonIsSeparator(HWND hwndTB)
  function BOOL (line 1354) | BOOL
  function VOID (line 1466) | VOID
  function VOID (line 1514) | VOID
  function VOID (line 1523) | VOID

FILE: src/treectl.c
  function GetDragStatusText (line 113) | int GetDragStatusText(int iOperation)
  function VOID (line 138) | VOID
  function VOID (line 163) | VOID
  function VOID (line 182) | VOID
  function VOID (line 215) | VOID
  function INT (line 262) | INT
  function INT (line 295) | INT
  function INT (line 341) | INT
  function VOID (line 527) | VOID
  function BOOL (line 555) | BOOL
  function BOOL (line 607) | BOOL
  function PDNODE (line 1004) | PDNODE
  function BOOL (line 1028) | BOOL
  function VOID (line 1123) | VOID
  function VOID (line 1150) | VOID
  function VOID (line 1254) | VOID
  function BOOL (line 1331) | BOOL
  function BOOL (line 1452) | BOOL
  function INT (line 1547) | INT
  function BOOL (line 1572) | BOOL
  function VOID (line 1613) | VOID
  function VOID (line 1804) | VOID
  function VOID (line 1878) | VOID
  function VOID (line 1904) | VOID
  function VOID (line 1928) | VOID
  function VOID (line 1981) | VOID
  function LRESULT (line 2098) | LRESULT
  function INT (line 3307) | INT
  function UINT (line 3335) | UINT
  function ResetTreeMax (line 3386) | void

FILE: src/treectl.h
  type DNODE (line 24) | typedef struct tagDNODE
  type DNODE (line 34) | typedef DNODE *PDNODE;

FILE: src/wfassoc.c
  type DDEINFO (line 39) | typedef struct _DDE_INFO {
  type DDETYPE (line 48) | typedef struct _DDE_TYPE {
  type _FILETYPE (line 62) | struct _FILETYPE
  type _EXT (line 63) | struct _EXT
  type FILETYPE (line 71) | typedef struct _FILETYPE {
  type EXT (line 82) | typedef struct _EXT {
  type ASSOCIATEFILEDLGINFO (line 98) | typedef struct _ASSOCIATE_FILE_DLG_INFO {
  type VFILETYPEEXT (line 113) | typedef union _VFILETYPEEXT {
  function VOID (line 201) | VOID
  function VOID (line 239) | VOID
  function VOID (line 300) | VOID
  function INT_PTR (line 413) | INT_PTR
  function INT_PTR (line 1020) | INT_PTR
  function BOOL (line 1187) | BOOL
  function VOID (line 1614) | VOID
  function BOOL (line 1681) | BOOL
  function BOOL (line 1753) | BOOL
  function VOID (line 2140) | VOID
  function VOID (line 2199) | VOID
  function DWORD (line 2231) | DWORD
  function DWORD (line 2394) | DWORD
  function DWORD (line 2648) | DWORD
  function DWORD (line 2781) | DWORD
  function VOID (line 2881) | VOID
  function VOID (line 2901) | VOID
  function VOID (line 2941) | VOID
  function VOID (line 2962) | VOID
  function BOOL (line 3029) | BOOL
  function BOOL (line 3088) | BOOL
  function BOOL (line 3155) | BOOL
  function BOOL (line 3226) | BOOL
  function DWORD (line 3375) | DWORD
  function DWORD (line 3425) | DWORD
  function DWORD (line 3466) | DWORD
  function DWORD (line 3558) | DWORD
  function PEXT (line 3628) | PEXT
  function VOID (line 3676) | VOID
  function BOOL (line 3733) | BOOL
  function VOID (line 3837) | VOID
  function DWORD (line 3900) | DWORD
  function INT (line 4004) | INT
  function VOID (line 4068) | VOID
  function VOID (line 4079) | VOID
  function DWORD (line 4111) | DWORD
  function BOOL (line 4161) | BOOL
  function BOOL (line 4202) | BOOL
  function DWORD (line 4296) | DWORD
  function VOID (line 4438) | VOID
  function VOID (line 4492) | VOID
  function LPTSTR (line 4523) | LPTSTR
  function LPTSTR (line 4571) | LPTSTR

FILE: src/wfchgnot.c
  function VOID (line 33) | VOID
  function VOID (line 103) | VOID
  function VOID (line 144) | VOID
  function VOID (line 167) | VOID
  function VOID (line 200) | VOID
  function VOID (line 259) | VOID
  function VOID (line 331) | VOID
  function VOID (line 434) | VOID
  function VOID (line 484) | VOID

FILE: src/wfcomman.c
  function VOID (line 37) | VOID
  function VOID (line 51) | VOID
  function VOID (line 62) | VOID
  function HWND (line 102) | HWND
  function VOID (line 170) | VOID
  function VOID (line 249) | VOID
  function HWND (line 444) | HWND
  function HWND (line 528) | HWND
  function VOID (line 635) | VOID
  function VOID (line 778) | VOID
  function BOOL (line 798) | BOOL
  function BOOL (line 831) | BOOL
  function BOOL (line 892) | BOOL GetBashExePath(LPTSTR szBashPath, UINT bufSize)
  function BOOL (line 920) | BOOL
  function VOID (line 2199) | VOID
  function VOID (line 2209) | VOID
  function VOID (line 2225) | VOID
  function INT (line 2280) | INT
  function DWORD (line 2334) | DWORD
  function VOID (line 2358) | VOID

FILE: src/wfcopy.c
  function BOOL (line 45) | BOOL
  function LPTSTR (line 86) | LPTSTR
  function LPTSTR (line 105) | LPTSTR
  function VOID (line 134) | VOID
  function UINT (line 167) | UINT
  function BOOL (line 230) | BOOL
  function BOOL (line 617) | BOOL
  function BOOL (line 652) | BOOL
  function BOOL (line 687) | BOOL
  function VOID (line 882) | VOID
  type PARAM_REPLACEDLG (line 893) | typedef struct {
  function VOID (line 903) | VOID
  function INT_PTR (line 942) | INT_PTR
  function DWORD (line 1031) | DWORD
  function DWORD (line 1107) | DWORD
  function DWORD (line 1157) | DWORD
  function PLFNDTA (line 1189) | PLFNDTA
  function VOID (line 1206) | VOID
  function BOOL (line 1230) | BOOL
  function DWORD (line 1328) | DWORD
  function VOID (line 1856) | VOID
  function BOOL (line 1867) | BOOL
  function INT (line 1890) | INT
  function VOID (line 1924) | VOID
  function VOID (line 1962) | VOID
  function BOOL (line 1993) | BOOL
  function DWORD (line 2027) | DWORD
  function DWORD (line 2044) | DWORD
  function DWORD (line 2154) | DWORD
  function DWORD (line 3386) | DWORD
  function DWORD (line 3519) | DWORD
  function DWORD (line 3529) | DWORD
  function DWORD (line 3613) | DWORD
  function INT (line 3705) | INT

FILE: src/wfcopy.h
  type COPYROOT (line 34) | typedef struct _copyroot {

FILE: src/wfdir.c
  type SELINFO (line 22) | typedef struct _SELINFO {
  function VOID (line 46) | VOID
  function VOID (line 313) | VOID
  function LRESULT (line 413) | LRESULT CALLBACK DirListBoxWndProc(HWND hWnd, UINT wMsg, WPARAM wParam, ...
  function LRESULT (line 424) | LRESULT
  function LRESULT (line 981) | LRESULT
  function VOID (line 1542) | VOID
  function BOOL (line 1580) | BOOL
  function UINT (line 1727) | UINT
  function INT (line 1764) | INT
  function INT (line 1805) | INT
  function INT (line 1847) | INT
  function INT (line 1912) | INT
  function INT (line 1945) | INT
  function INT (line 1977) | INT
  function INT (line 2047) | INT
  function INT (line 2149) | INT
  function VOID (line 2301) | VOID
  function INT (line 2356) | INT
  function VOID (line 2369) | VOID
  function VOID (line 2440) | VOID
  function INT (line 2518) | INT
  function LPWSTR (line 2694) | LPWSTR
  function INT (line 2991) | INT
  function VOID (line 3028) | VOID
  function BOOL (line 3101) | BOOL
  function VOID (line 3147) | VOID
  function HWND (line 3214) | HWND
  function VOID (line 3301) | VOID
  function HWND (line 3392) | HWND
  function VOID (line 3405) | VOID
  function VOID (line 3433) | VOID
  function BOOL (line 3510) | BOOL

FILE: src/wfdirrd.c
  type EDIRABORT (line 16) | typedef enum {
  type EXTLOCATION (line 22) | typedef struct _EXT_LOCATION {
  function BOOL (line 54) | BOOL
  function VOID (line 92) | VOID
  function LPXDTALINK (line 142) | LPXDTALINK
  function VOID (line 186) | VOID
  function LPXDTALINK (line 233) | LPXDTALINK
  function VOID (line 295) | VOID
  function VOID (line 321) | VOID
  function LPXDTALINK (line 346) | LPXDTALINK
  function VOID (line 409) | VOID
  function VOID (line 435) | VOID
  function DWORD (line 584) | DWORD
  function LPXDTALINK (line 650) | LPXDTALINK
  function BOOL (line 1103) | BOOL

FILE: src/wfdirsrc.c
  function HCURSOR (line 24) | HCURSOR
  function BOOL (line 63) | BOOL
  function VOID (line 110) | VOID
  function VOID (line 160) | VOID
  function VOID (line 238) | VOID
  function VOID (line 279) | VOID
  function BOOL (line 433) | BOOL
  function VOID (line 614) | VOID
  function WORD (line 706) | WORD
  function INT (line 754) | INT
  function LPTSTR (line 985) | LPTSTR
  function BOOL (line 1020) | BOOL

FILE: src/wfdlgs.c
  function VOID (line 23) | VOID
  function INT_PTR (line 140) | INT_PTR
  function INT_PTR (line 232) | INT_PTR
  function INT_PTR (line 338) | INT_PTR
  function UINT_PTR (line 418) | UINT_PTR
  function VOID (line 480) | VOID
  function VOID (line 487) | VOID
  function INT_PTR (line 654) | INT_PTR
  function INT_PTR (line 718) | INT_PTR CALLBACK PrefDlgProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM...
  function VOID (line 812) | VOID
  function VOID (line 850) | VOID

FILE: src/wfdlgs2.c
  function VOID (line 47) | VOID
  function VOID (line 78) | VOID
  function INT_PTR (line 105) | INT_PTR
  function INT_PTR (line 258) | INT_PTR
  function VOID (line 359) | VOID
  function VOID (line 379) | VOID
  function INT_PTR (line 423) | INT_PTR
  function VOID (line 823) | VOID
  type vertbl (line 847) | struct vertbl {
  type vertbl (line 856) | struct vertbl
  function VOID (line 898) | VOID
  function LPTSTR (line 916) | LPTSTR
  function LPTSTR (line 955) | LPTSTR
  function VOID (line 1117) | VOID
  function BOOL (line 1140) | BOOL
  function VOID (line 1165) | VOID
  function INT (line 1256) | INT
  function INT_PTR (line 1648) | INT_PTR
  function INT_PTR (line 1903) | INT_PTR
  function BOOL (line 2013) | BOOL

FILE: src/wfdlgs3.c
  type FDC_RET (line 37) | typedef enum {
  function INT_PTR (line 49) | INT_PTR
  function INT_PTR (line 157) | INT_PTR
  function VOID (line 287) | VOID
  function INT_PTR (line 515) | INT_PTR
  function INT_PTR (line 743) | INT_PTR
  function INT_PTR (line 850) | INT_PTR
  function DWORD (line 884) | DWORD
  function DWORD (line 913) | DWORD
  function BOOL (line 941) | BOOL
  function INT_PTR (line 1116) | INT_PTR
  function INT_PTR (line 1327) | INT_PTR
  function VOID (line 1422) | VOID
  function INT_PTR (line 1555) | INT_PTR
  function VOID (line 1659) | VOID
  function VOID (line 1687) | VOID
  function VOID (line 1714) | VOID
  function VOID (line 1798) | VOID
  function VOID (line 1826) | VOID
  function BOOL (line 1852) | BOOL GetProductVersion(WORD * pwMajor, WORD * pwMinor, WORD * pwBuild, W...

FILE: src/wfdocb.h
  type _DOC_BUCKET (line 18) | struct _DOC_BUCKET
  type _DOC_BUCKET (line 19) | struct _DOC_BUCKET
  type DOCENUM (line 28) | typedef struct _DOC_ENUM DOCENUM, *PDOCENUM;

FILE: src/wfdos.c
  function VOID (line 14) | VOID
  function INT (line 36) | INT
  function DWORD (line 52) | DWORD
  function DWORD (line 77) | DWORD

FILE: src/wfdrives.c
  function VOID (line 51) | VOID
  function VOID (line 176) | VOID
  function INT (line 199) | INT
  function VOID (line 237) | VOID
  function VOID (line 265) | VOID
  function VOID (line 307) | VOID
  function BOOL (line 360) | BOOL
  function VOID (line 463) | VOID
  function VOID (line 504) | VOID
  function VOID (line 562) | VOID
  function LRESULT (line 690) | LRESULT
  function INT (line 1116) | INT

FILE: src/wfdrop.c
  function PaintRectItem (line 28) | void PaintRectItem(WF_IDropTarget *This, POINTL *ppt)
  function LPWSTR (line 87) | LPWSTR QuotedDropList(IDataObject *pDataObject)
  function HDROP (line 132) | HDROP CreateDropFiles(POINT pt, BOOL fNC, LPTSTR pszFiles)
  function HRESULT (line 182) | static HRESULT StreamToFile(IStream *stream, TCHAR *szFile)
  function LPWSTR (line 224) | LPWSTR QuotedContentList(IDataObject *pDataObject)
  function BOOL (line 326) | static BOOL QueryDataObject(WF_IDataObject *pDataObject)
  function DWORD (line 341) | static DWORD DropEffect(DWORD grfKeyState, POINTL pt, DWORD dwAllowed)
  function ULONG (line 371) | static ULONG STDMETHODCALLTYPE idroptarget_addref (WF_IDropTarget* This)
  function HRESULT (line 379) | static HRESULT STDMETHODCALLTYPE
  function ULONG (line 405) | static ULONG STDMETHODCALLTYPE
  function HRESULT (line 427) | static HRESULT STDMETHODCALLTYPE idroptarget_dragenter(WF_IDropTarget* T...
  function HRESULT (line 454) | static HRESULT STDMETHODCALLTYPE idroptarget_dragover(WF_IDropTarget* Th...
  function HRESULT (line 472) | static HRESULT STDMETHODCALLTYPE idroptarget_dragleave(WF_IDropTarget* T...
  function HRESULT (line 482) | static HRESULT STDMETHODCALLTYPE idroptarget_drop(WF_IDropTarget* This, ...
  function DropData (line 508) | void DropData(WF_IDropTarget *This, IDataObject *pDataObject, DWORD dwEf...
  function RegisterDropWindow (line 579) | void RegisterDropWindow(HWND hwnd, WF_IDropTarget **ppDropTarget)
  function UnregisterDropWindow (line 594) | void UnregisterDropWindow(HWND hwnd, IDropTarget *pDropTarget)
  function WF_IDropTarget (line 609) | WF_IDropTarget * WF_IDropTarget_new(HWND hwnd)
  function HRESULT (line 629) | HRESULT CreateDropTarget(HWND hwnd, WF_IDropTarget **ppDropTarget)

FILE: src/wfdrop.h
  type WF_IDataObject (line 18) | typedef struct {
  type WF_IEnumFORMATETC (line 28) | typedef struct {
  type WF_IDropSource (line 38) | typedef struct {
  type WF_IDropTarget (line 43) | typedef struct {
  type WF_IDataObjectVtbl (line 52) | typedef struct WF_IDataObjectVtbl
  type WF_IEnumFORMATETCVtbl (line 115) | typedef struct WF_IEnumFORMATETCVtbl
  type WF_IDropSourceVtbl (line 151) | typedef struct WF_IDropSourceVtbl
  type WF_IDropTargetVtbl (line 178) | typedef struct WF_IDropTargetVtbl
  type WF_IDataObject (line 219) | typedef WF_IDataObject* LPWBDATAOBJECT;
  type WF_IEnumFORMATETC (line 220) | typedef WF_IEnumFORMATETC* LPWBFORMATETC;

FILE: src/wfext.c
  function VOID (line 24) | VOID
  function LONG (line 38) | LONG
  function LONG (line 248) | LONG
  function VOID (line 359) | VOID
  function LRESULT (line 382) | LRESULT

FILE: src/wfext.h
  type FMS_GETFILESELA (line 63) | typedef struct _FMS_GETFILESELA {
  type FMS_GETFILESELW (line 70) | typedef struct _FMS_GETFILESELW {
  type FMS_GETDRIVEINFOA (line 86) | typedef struct _FMS_GETDRIVEINFOA {      // for drive
  type FMS_GETDRIVEINFOW (line 94) | typedef struct _FMS_GETDRIVEINFOW {      // for drive
  type FMS_LOADA (line 111) | typedef struct _FMS_LOADA {
  type FMS_LOADW (line 118) | typedef struct _FMS_LOADW {
  type EXT_BUTTON (line 136) | typedef struct tagEXT_BUTTON {
  type FMS_TOOLBARLOAD (line 142) | typedef struct tagFMS_TOOLBARLOAD {
  type FMS_HELPSTRINGA (line 151) | typedef struct tagFMS_HELPSTRINGA {
  type FMS_HELPSTRINGW (line 157) | typedef struct tagFMS_HELPSTRINGW {
  type WPARAM (line 172) | typedef DWORD (APIENTRY *FM_EXT_PROC)(HWND, WPARAM, LPARAM);

FILE: src/wfexti.h
  type EXTENSION (line 17) | typedef struct _EXTENSION {                                     /* ;Inte...

FILE: src/wffile.c
  function DWORD (line 117) | DWORD MKDir(
  function DWORD (line 148) | DWORD RMDir(
  function BOOL (line 174) | BOOL WFSetAttr(
  function VOID (line 205) | VOID CentreWindow(
  function VOID (line 283) | VOID wfProgressYield()
  function VOID (line 315) | VOID DisplayUncompressProgress(
  function INT_PTR (line 382) | INT_PTR CALLBACK UncompressProgDlg(
  function DisplayCompressProgress (line 465) | void DisplayCompressProgress(
  function INT_PTR (line 601) | INT_PTR CALLBACK CompressProgDlg(
  function BOOL (line 687) | BOOL WFCheckCompress(
  function BOOL (line 1022) | BOOL CompressFile(
  function BOOL (line 1082) | BOOL WFDoCompress(
  function BOOL (line 1366) | BOOL UncompressFile(
  function BOOL (line 1412) | BOOL WFDoUncompress(
  function BOOL (line 1676) | BOOL GetRootPath(
  function VOID (line 1714) | VOID RedrawAllTreeWindows()
  function CompressErrMessageBox (line 1764) | int CompressErrMessageBox(
  function INT_PTR (line 1822) | INT_PTR CALLBACK CompressErrDialogProc(
  function BOOL (line 1893) | BOOL OpenFileForCompress(

FILE: src/wfgoto.cpp
  function ParentOrdering (line 36) | int ParentOrdering(const PDNODE& a, const PDNODE& b)
  function CompareNodes (line 95) | bool CompareNodes(const PDNODE& a, const PDNODE& b)
  function FilterBySubtree (line 100) | vector<PDNODE> FilterBySubtree(vector<PDNODE> const& parents, vector<PDN...
  function TreeIntersection (line 117) | vector<PDNODE> TreeIntersection(vector<vector<PDNODE>>& trees)
  function PDNODE (line 236) | PDNODE CreateNode(PDNODE pParentNode, WCHAR *szName, DWORD dwAttribs)
  function SplitIntoWords (line 267) | vector<wstring> SplitIntoWords(LPCTSTR szText)
  function FreeDirectoryBagOValues (line 284) | void FreeDirectoryBagOValues(BagOValues<PDNODE> *pbov, vector<PDNODE> *p...
  function BOOL (line 297) | BOOL BuildDirectoryBagOValues(BagOValues<PDNODE> *pbov, vector<PDNODE> *...
  function GetDirectoryOptionsFromText (line 464) | vector<PDNODE> GetDirectoryOptionsFromText(LPCTSTR szText, BOOL *pbLimited)
  function VOID (line 520) | VOID UpdateGotoList(HWND hDlg)
  function LRESULT (line 579) | LRESULT APIENTRY GotoEditSubclassProc(
  function VOID (line 609) | VOID
  function INT_PTR (line 635) | INT_PTR
  function DWORD (line 734) | DWORD WINAPI
  function DWORD (line 790) | DWORD

FILE: src/wfgwl.h
  type TREEDATA (line 10) | typedef struct {
  type TREECTLDATA (line 24) | typedef struct {
  type DIRDATA (line 31) | typedef struct {
  type DRIVESDATA (line 39) | typedef struct {
  type SEARCHDATA (line 47) | typedef struct {

FILE: src/wfinfo.c
  function VOID (line 72) | VOID
  function VOID (line 78) | VOID
  function GetDiskSpace (line 109) | IF_READ(Space)
  function INT (line 323) | INT
  function VOID (line 404) | VOID
  type _DOC_BUCKET (line 449) | struct _DOC_BUCKET {
  function PPDOCBUCKET (line 476) | PPDOCBUCKET
  function VOID (line 503) | VOID
  function VOID (line 547) | VOID
  function INT (line 588) | INT
  function PDOCBUCKET (line 664) | PDOCBUCKET
  function HICON (line 694) | HICON DocGetIcon(PDOCBUCKET pDocBucket)
  type _DOC_ENUM (line 724) | struct _DOC_ENUM {
  function PDOCENUM (line 753) | PDOCENUM
  function LPTSTR (line 791) | LPTSTR
  function VOID (line 844) | VOID
  function DWORD (line 952) | DWORD
  function INT (line 1040) | INT
  function DWORD (line 1392) | DWORD
  function VOID (line 1525) | VOID
  function VOID (line 1611) | VOID
  function VOID (line 1626) | VOID
  function BOOL (line 1681) | BOOL
  function VOID (line 1881) | VOID
  function BOOL (line 1996) | BOOL
  function VOID (line 2052) | VOID

FILE: src/wfinfo.h
  type INFOSTATUS (line 43) | typedef struct _INFO_STATUS {

FILE: src/wfinit.c
  function INT (line 45) | INT
  function VOID (line 59) | VOID
  function VOID (line 94) | VOID
  function VOID (line 209) | VOID
  function VOID (line 288) | VOID
  function INT (line 296) | INT
  function VOID (line 327) | VOID
  function UINT (line 414) | UINT
  function UINT (line 446) | UINT  MapMenuPosToIDM(UINT pos)
  function VOID (line 480) | VOID
  function DWORD (line 530) | DWORD
  function BOOL (line 537) | BOOL
  function VOID (line 656) | VOID
  function BOOL (line 709) | BOOL
  function BOOL (line 728) | BOOL
  function VOID (line 911) | VOID
  function UINT (line 943) | UINT
  function BOOL (line 1007) | BOOL
  function VOID (line 1645) | VOID
  function VOID (line 1665) | VOID
  function VOID (line 1750) | VOID
  function BOOL (line 1794) | BOOL

FILE: src/wfloc.c
  type FM_LANG (line 18) | typedef struct _FM_LANG {
  function LCID (line 35) | LCID
  function VOID (line 60) | VOID InitLangList(HWND hCBox)
  function VOID (line 97) | VOID SaveLang(HWND hCBox)
  function BOOL (line 109) | BOOL DefaultLayoutRTL()
  function DWORD (line 124) | DWORD MainWindowExStyle()
  function VOID (line 142) | VOID PreserveBitmapInRTL(HDC hdc)

FILE: src/wfmem.c
  function LPXDTALINK (line 21) | LPXDTALINK
  function VOID (line 70) | VOID
  function LPXDTALINK (line 225) | LPXDTALINK
  function LPXDTA (line 288) | LPXDTA

FILE: src/wfmem.h
  type _XDTAHEAD (line 13) | struct _XDTAHEAD
  type _XDTA (line 14) | struct _XDTA
  type _XDTALINK (line 15) | struct _XDTALINK
  type XDTALINK (line 17) | typedef struct _XDTALINK {
  type XDTAHEAD (line 32) | typedef struct _XDTAHEAD {
  type XDTA (line 46) | typedef struct _XDTA {

FILE: src/wfprint.c
  function DWORD (line 20) | DWORD
  function DWORD (line 108) | DWORD

FILE: src/wfsearch.c
  function INT (line 131) | INT
  function VOID (line 421) | VOID
  function INT (line 466) | INT
  function VOID (line 542) | VOID
  function VOID (line 569) | VOID
  function LRESULT (line 601) | LRESULT
  function VOID (line 1134) | VOID
  function VOID (line 1147) | VOID
  function VOID (line 1153) | VOID
  function INT_PTR (line 1160) | INT_PTR CALLBACK
  function VOID (line 1305) | VOID
  function DWORD (line 1367) | DWORD
  function VOID (line 1425) | VOID

FILE: src/wftree.c
  function HICON (line 21) | HICON
  function VOID (line 39) | VOID
  function HWND (line 56) | HWND
  function BOOL (line 82) | BOOL
  function BOOL (line 177) | BOOL
  function VOID (line 284) | VOID
  function LRESULT (line 351) | LRESULT
  function VOID (line 897) | VOID

FILE: src/wfutil.c
  type HistoryDir (line 21) | typedef struct HistoryDir
  function VOID (line 28) | VOID
  function BOOL (line 45) | BOOL
  function LPWSTR (line 62) | LPWSTR
  function LPWSTR (line 99) | LPWSTR
  function VOID (line 123) | VOID CDECL
  function BOOL (line 161) | BOOL
  function VOID (line 171) | VOID
  function INT (line 198) | INT
  function VOID (line 221) | VOID
  function BOOL (line 250) | BOOL  GetDriveDirectory(INT iDrive, LPTSTR pszDir)
  function VOID (line 284) | VOID
  function VOID (line 338) | VOID
  function VOID (line 405) | VOID
  function HWND (line 444) | HWND
  function VOID (line 456) | VOID
  function LPTSTR (line 469) | LPTSTR
  function BOOL (line 514) | BOOL
  function INT (line 556) | INT
  function VOID (line 638) | VOID
  function INT (line 794) | INT
  function BOOL (line 821) | BOOL
  function DWORD (line 836) | DWORD
  function BOOL (line 863) | BOOL
  function BOOL (line 888) | BOOL
  function BOOL (line 916) | BOOL
  function BOOL (line 923) | BOOL
  function BOOL (line 930) | BOOL
  function BOOL (line 937) | BOOL
  function DWORD (line 945) | DWORD
  function BOOL (line 963) | BOOL
  function LPTSTR (line 990) | LPTSTR
  function LPTSTR (line 1018) | LPTSTR
  function VOID (line 1091) | VOID
  function VOID (line 1116) | VOID
  function VOID (line 1172) | VOID
  function VOID (line 1203) | VOID
  function BOOL (line 1224) | BOOL
  function VOID (line 1246) | VOID
  function UINT (line 1266) | UINT
  function VOID (line 1291) | VOID
  function VOID (line 1312) | VOID
  function VOID (line 1342) | VOID
  function LPTSTR (line 1367) | LPTSTR
  function INT (line 1393) | INT
  function DWORD (line 1439) | DWORD
  function PDOCBUCKET (line 1565) | PDOCBUCKET
  function BOOL (line 1592) | BOOL TypeAheadString(WCHAR ch, LPWSTR szT)
  function LONG (line 1644) | LONG WFRegGetValueW(HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, DWORD ...
  function LPTSTR (line 1751) | LPTSTR GetFullPathInSystemDirectory(LPCTSTR FileName)
  function HMODULE (line 1780) | HMODULE LoadSystemLibrary(LPCTSTR FileName)

FILE: src/winexp.h
  type ATOMSTRUC (line 13) | typedef ATOMSTRUC *PATOM;
  type ATOMTABLE (line 21) | typedef struct {

FILE: src/winfile.c
  function INT (line 42) | INT APIENTRY
  function VOID (line 113) | VOID
  function BOOL (line 168) | BOOL
  function LRESULT (line 486) | LRESULT
  function LRESULT (line 1140) | LRESULT
  function BOOL (line 1203) | BOOL
  function BOOL (line 1299) | BOOL

FILE: src/winfile.h
  type WCHAR (line 66) | typedef WCHAR TUCHAR, *PTUCHAR;
  type TUCHAR (line 68) | typedef unsigned char TUCHAR, *PTUCHAR;
  type HWND (line 243) | typedef HWND *PHWND;
  type INT (line 244) | typedef INT DRIVE;
  type INT (line 245) | typedef INT DRIVEIND;
  type CANCEL_INFO (line 249) | typedef struct _CANCEL_INFO {
  type SEARCH_INFO (line 284) | typedef struct _SEARCH_INFO {
  type COPYINFO (line 308) | typedef struct _COPYINFO {
  type ISELTYPE (line 315) | typedef enum eISELTYPE {
  type WINDOW (line 327) | typedef struct {
  type _SELINFO (line 346) | struct _SELINFO
  type DRIVEINFO (line 934) | typedef struct _DRIVE_INFO {
  type NTSYSAPI (line 1445) | typedef NTSYSAPI CHAR (*RtlSetProcessPlaceholderCompatibilityMode_t)(

FILE: src/wnetcaps.c
  function BOOL (line 37) | BOOL

FILE: tools/ExeView/bmp.cpp
  function BOOL (line 48) | BOOL ShowBitmap (LPRESPACKET lprp)
  function LRESULT (line 106) | LRESULT FAR PASCAL ShowBitmapProc (HWND hWnd, UINT msg, WPARAM wParam, L...
  function HBITMAP (line 184) | HBITMAP MakeBitmap ( LPRESPACKET lprp )
  function HPALETTE (line 287) | HPALETTE CreateNewPalette (LPSTR lpbi, WORD fWin30, WORD wColors)

FILE: tools/ExeView/exehdr.cpp
  function PEXEINFO (line 51) | PEXEINFO LoadExeInfo (LPSTR lpFile)
  function VOID (line 180) | VOID FreeExeInfoMemory (PEXEINFO pExeInfo)
  function ReadSegmentTable (line 284) | int ReadSegmentTable (int fFile, PEXEINFO pExeInfo)
  function ReadResourceTable (line 340) | int ReadResourceTable (int fFile, PEXEINFO pExeInfo)
  function ReadResidentNameTable (line 494) | int ReadResidentNameTable (int fFile, PEXEINFO pExeInfo)
  function ReadImportedNameTable (line 563) | int ReadImportedNameTable (int fFile, PEXEINFO pExeInfo)
  function ReadNonResidentNameTable (line 648) | int ReadNonResidentNameTable (int fFile, PEXEINFO pExeInfo)
  function PSEGENTRY (line 722) | PSEGENTRY GetSegEntry ( PEXEINFO pExeInfo, int nIndex )
  function LPSTR (line 756) | LPSTR GetModuleName ( PEXEINFO pExeInfo )
  function LPSTR (line 788) | LPSTR GetModuleDescription ( PEXEINFO pExeInfo )
  function LPSTR (line 820) | LPSTR GetExeDataType (PEXEINFO pExeInfo)

FILE: tools/ExeView/exehdr.h
  type OLDEXE (line 18) | typedef struct
  type NEWEXE (line 38) | typedef struct
  type FENTRY (line 86) | typedef struct
  type MENTRY (line 92) | typedef struct
  type SEGENTRY (line 104) | typedef struct
  type RTYPE (line 126) | typedef struct
  type RINFO (line 133) | typedef struct
  type tgRESTYPE (line 145) | struct tgRESTYPE
  type RESINFO2 (line 147) | typedef struct
  type RESTYPE (line 158) | typedef struct tgRESTYPE
  type NAME (line 175) | typedef struct tgNAME
  type EXEINFO (line 185) | typedef struct

FILE: tools/ExeView/filllb.cpp
  function BOOL (line 71) | BOOL FillLBWithNewExeHeader (HWND hWnd, PEXEINFO pExeInfo)
  function BOOL (line 230) | BOOL FillLBWithOldExeHeader (HWND hWnd, PEXEINFO pExeInfo )
  function BOOL (line 320) | BOOL FillLBWithEntryTable (HWND hWnd, PEXEINFO pExeInfo )
  function BOOL (line 450) | BOOL FillLBWithSegments (HWND hWnd, PEXEINFO pExeInfo )
  function BOOL (line 513) | BOOL FillLBWithResources (HWND hWnd, PEXEINFO pExeInfo )
  function BOOL (line 614) | BOOL FillLBWithResidentNames (HWND hWnd, PEXEINFO pExeInfo )
  function BOOL (line 679) | BOOL FillLBWithImportedNames (HWND hWnd, PEXEINFO pExeInfo )
  function BOOL (line 740) | BOOL FillLBWithNonResidentNames (HWND hWnd, PEXEINFO pExeInfo )
  function LPSTR (line 806) | LPSTR FormatSegEntry ( PEXEINFO pExeInfo, PSEGENTRY pSeg, LPSTR lp )
  function LPSTR (line 867) | LPSTR FormatResourceEntry ( PEXEINFO pExeInfo, PRESINFO pri, LPSTR lp )

FILE: tools/ExeView/iconcur.cpp
  function INT_PTR (line 52) | INT_PTR FAR PASCAL ShowIconProc (HWND hDlg, UINT msg, WPARAM wParam, LPA...
  function HICON (line 141) | HICON MakeIcon ( LPRESPACKET lprp )
  function INT_PTR (line 427) | INT_PTR FAR PASCAL ShowCursorProc (HWND hDlg, UINT msg, WPARAM wParam, L...
  function HCURSOR (line 520) | HCURSOR MakeCursor ( LPRESPACKET lprp )

FILE: tools/ExeView/init.cpp
  function BOOL (line 49) | BOOL InitApplication (HINSTANCE hInstance)
  function BOOL (line 110) | BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)

FILE: tools/ExeView/main.cpp
  function INT (line 59) | INT APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPST...
  function LRESULT (line 106) | LRESULT CALLBACK MainWndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM...
  function INT_PTR (line 341) | INT_PTR CALLBACK About (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
  function VOID (line 383) | VOID ResizeChildWindows ( HWND hMainWnd )
  function VOID (line 485) | VOID EnableChildWindows ( HWND hMainWnd, PEXEINFO pExeInfo )

FILE: tools/ExeView/menudlg.cpp
  function BOOL (line 49) | BOOL ShowMenu (LPRESPACKET lprp)
  function LRESULT (line 118) | LRESULT FAR PASCAL ShowMenuProc (HWND hWnd, UINT msg, WPARAM wParam, LPA...
  function INT_PTR (line 154) | INT_PTR FAR PASCAL ShowDialogProc (HWND hDlg, UINT msg, WPARAM wParam, L...

FILE: tools/ExeView/res.cpp
  function BOOL (line 29) | BOOL LoadResourcePacket(PEXEINFO pExeInfo, PRESTYPE prt, PRESINFO pri, L...
  function VOID (line 126) | VOID FreeResourcePacket(LPRESPACKET lprp)
  function BOOL (line 158) | BOOL DisplayResource ( PEXEINFO pExeInfo, PRESTYPE prt, PRESINFO pri )
  function INT_PTR (line 339) | INT_PTR FAR PASCAL NameTableProc (HWND hDlg, UINT msg, WPARAM wParam, LP...
  function BOOL (line 387) | BOOL FillLBWithNameTable (HWND hWnd, LPRESPACKET lprp)
  function INT_PTR (line 469) | INT_PTR FAR PASCAL IconGroupProc (HWND hDlg, UINT msg, WPARAM wParam, LP...
  function BOOL (line 518) | BOOL FillLBWithIconGroup (HWND hWnd, LPRESPACKET lprp)
  function INT_PTR (line 582) | INT_PTR FAR PASCAL CursorGroupProc (HWND hDlg, UINT msg, WPARAM wParam, ...
  function BOOL (line 631) | BOOL FillLBWithCursorGroup (HWND hWnd, LPRESPACKET lprp)
  function INT_PTR (line 694) | INT_PTR FAR PASCAL AccelTableProc (HWND hDlg, UINT msg, WPARAM wParam, L...
  function BOOL (line 743) | BOOL FillLBWithAccelTable (HWND hWnd, LPRESPACKET lprp)
  function INT_PTR (line 834) | INT_PTR FAR PASCAL StringTableProc (HWND hDlg, UINT msg, WPARAM wParam, ...
  function BOOL (line 883) | BOOL FillLBWithStringTable (HWND hWnd, LPRESPACKET lprp)
  function INT_PTR (line 952) | INT_PTR FAR PASCAL FontDirProc (HWND hDlg, UINT msg, WPARAM wParam, LPAR...
  function BOOL (line 1001) | BOOL FillLBWithFontDir (HWND hWnd, LPRESPACKET lprp)

FILE: tools/ExeView/res.h
  type RESPACKET (line 23) | typedef struct
  type NAMEENTRY (line 34) | typedef struct
  type ICONENTRY (line 44) | typedef struct
  type ICONDIR (line 56) | typedef struct
  type CURSORENTRY (line 65) | typedef struct
  type CURSORDIR (line 75) | typedef struct
  type CURSORIMAGE (line 84) | typedef struct
  type ACCELENTRY (line 93) | typedef struct
  type FONTENTRY (line 106) | typedef struct
  type DLGTEMPLATE16 (line 144) | typedef struct {
  type DLGITEMTEMPLATE16 (line 155) | typedef struct {
  type DLGITEMDECODE (line 168) | typedef struct
  type DLGDECODE (line 179) | typedef struct
  type MENUITEM (line 198) | typedef struct
  type MENUDECODE (line 206) | typedef struct

FILE: tools/ExeView/save.cpp
  function BOOL (line 24) | BOOL SaveResources(HWND hWnd, PEXEINFO pExeInfo, LPSTR lpFile)
  function WORD (line 137) | WORD* DecodeMenu(WORD *lpv, MENUDECODE *pmenu)
  function BOOL (line 163) | BOOL SaveMenu(HFILE hFile, LPRESPACKET lprp)
  function VOID (line 219) | VOID DecodeDlgItem(WORD **ppwT, DLGITEMDECODE *pdecitem)
  function VOID (line 248) | VOID DecodeDialog(VOID *lpv, DLGDECODE *pdecdlg)
  function BOOL (line 283) | BOOL SaveDialog(HFILE hFile, LPRESPACKET lprp)
  function BOOL (line 342) | BOOL SaveStringTable(HFILE hFile, LPRESPACKET lprp)

FILE: tools/FileSignatureInfo/FileSignatureInfo.cpp
  function _tmain (line 39) | int __cdecl _tmain(int argc, TCHAR *argv[])
  function BOOL (line 231) | BOOL PrintCertificateInfo(PCCERT_CONTEXT pCertContext)
  function LPWSTR (line 331) | LPWSTR AllocateAndCopyWideString(LPCWSTR inputString)
  function BOOL (line 344) | BOOL GetProgAndPublisherInfo(PCMSG_SIGNER_INFO pSignerInfo,
  function BOOL (line 473) | BOOL GetDateOfTimeStamp(PCMSG_SIGNER_INFO pSignerInfo, SYSTEMTIME *st)
  function BOOL (line 517) | BOOL GetTimeStampSignerInfo(PCMSG_SIGNER_INFO pSignerInfo, PCMSG_SIGNER_...

FILE: tools/FileSignatureInfo/VerifySignature.cpp
  function BOOL (line 28) | BOOL VerifyEmbeddedSignature(LPCWSTR pwszSourceFile)

FILE: tools/VerifyResources/Resources.h
  type PROCRES (line 18) | typedef struct
  type DLGITEMDECODE (line 38) | typedef struct
  type DLGDECODE (line 54) | typedef struct
  type MENUITEM (line 81) | typedef struct
  type MENUDECODE (line 89) | typedef struct

FILE: tools/VerifyResources/VerifyResources.cpp
  function wmain (line 34) | int __cdecl wmain(int argc, wchar_t *argv[])
  function LPCTSTR (line 58) | LPCTSTR MapRTToString(LPCTSTR lpType)
  function BOOL (line 91) | BOOL CALLBACK ProcessTypesInMod(HMODULE hMod, LPWSTR lpType, LONG_PTR lP...
  function BOOL (line 98) | BOOL CALLBACK ProcessNamesInMod(HMODULE hMod, LPCTSTR lpszType, LPTSTR l...
  function BOOL (line 167) | BOOL CALLBACK ProcessLangInMod(HMODULE hMod, LPCTSTR lpszType, LPCTSTR l...
  function VOID (line 200) | VOID DecodeDlgItem(WORD **ppwT, BOOL bExtended, DLGITEMDECODE *pdecitem)
  function VOID (line 276) | VOID DecodeDialog(VOID *lpv, DLGDECODE *pdecdlg)
  function VOID (line 377) | VOID VerifyLangDialogs(PROCRES *pprocres)
  function VOID (line 464) | VOID DecodeMenu(VOID *lpv, MENUDECODE *pmenu)
  function VOID (line 497) | VOID VerifyLangMenus(PROCRES *pprocres)
  function WORD (line 552) | WORD GetUsedStringsMask(HGLOBAL hglob)
  function VOID (line 572) | VOID VerifyLangStrings(HMODULE hMod, PROCRES *pprocres)
Condensed preview — 196 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,753K chars).
[
  {
    "path": ".gitignore",
    "chars": 4815,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "CHANGES.md",
    "chars": 4905,
    "preview": "## Changes in v10.4 compared to v10.3 (February 2025)\n\n1. New Korean translation\n2. Resizable dialogs in pt-PT\n3. Better"
  },
  {
    "path": "GNUmakefile",
    "chars": 1354,
    "preview": "SRCS = \\\n\tsrc/dbg.c \\\n\tsrc/lfn.c \\\n\tsrc/lfnmisc.c \\\n\tsrc/numfmt.c \\\n\tsrc/Resize.c \\\n\tsrc/suggest.c \\\n\tsrc/tbar.c \\\n\tsrc/"
  },
  {
    "path": "LICENSE",
    "chars": 1162,
    "preview": "    MIT License\n\n    Copyright (c) Microsoft Corporation. All rights reserved.\n\n    Permission is hereby granted, free o"
  },
  {
    "path": "Package/Package.appxmanifest",
    "chars": 2309,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows1"
  },
  {
    "path": "Package/Package.wapproj",
    "chars": 5125,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "README.md",
    "chars": 3931,
    "preview": "\n\n# Announcement: Repository to be archived on March 1, 2025\nWe realize this may come as a shock and disappointment to o"
  },
  {
    "path": "SECURITY.md",
    "chars": 2757,
    "preview": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products an"
  },
  {
    "path": "SignConfig.xml",
    "chars": 1179,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<SignConfigXML>\n <job platform=\"Win32\" certSubject=\"CN=Microsoft Corporation, O="
  },
  {
    "path": "Winfile.sln",
    "chars": 18809,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.27428.2037\nM"
  },
  {
    "path": "build/README.md",
    "chars": 799,
    "preview": "\nThese two files control repo-wide build settings.\n\nMsbuild projects work by including a \"default\" props file, then allo"
  },
  {
    "path": "build/Winfile.default.props",
    "chars": 2685,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGro"
  },
  {
    "path": "build/Winfile.props",
    "chars": 3144,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import "
  },
  {
    "path": "help/ini/index.html",
    "chars": 10601,
    "preview": "<html>\n<head>\n<title>Building winfile.ini from scratch</title>\n</head>\n<body>\n <p>OR: Building WINFILE.INI from scratch "
  },
  {
    "path": "nuget/LICENSE.txt",
    "chars": 1236,
    "preview": "\nFrom: https://github.com/Microsoft/winfile/raw/master/LICENSE\n\nLICENSE\n\n    MIT License\n\n    Copyright (c) Microsoft Co"
  },
  {
    "path": "nuget/VERIFICATION.txt",
    "chars": 310,
    "preview": "\nVERIFICATION\nVerification is intended to assist the Chocolatey moderators and community\nin verifying that this package'"
  },
  {
    "path": "nuget/winfile.nuspec",
    "chars": 2064,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd\">\n  <me"
  },
  {
    "path": "samples/addon/AddOnSample.vcxproj.filters",
    "chars": 1265,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild"
  },
  {
    "path": "samples/addon/AddonSample.vcxproj",
    "chars": 3334,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "samples/addon/dllmain.cpp",
    "chars": 760,
    "preview": "/********************************************************************\n\n   dllmain.cpp\n\n   Windows File Manager Sample Ad"
  },
  {
    "path": "samples/addon/extproc.cpp",
    "chars": 7058,
    "preview": "/********************************************************************\n\n   extproc.cpp\n\n   Windows File Manager Sample Ad"
  },
  {
    "path": "samples/addon/resource.h",
    "chars": 817,
    "preview": "/********************************************************************\n\n   resource.h\n\n   Windows File Manager Sample Add"
  },
  {
    "path": "samples/addon/resources.rc",
    "chars": 1651,
    "preview": "/********************************************************************\n\n   resources.rc\n\n   Windows File Manager Sample A"
  },
  {
    "path": "samples/addon/stdafx.cpp",
    "chars": 283,
    "preview": "// stdafx.cpp : source file that includes just the standard includes\n// Dll1.pch will be the pre-compiled header\n// stda"
  },
  {
    "path": "samples/addon/stdafx.h",
    "chars": 378,
    "preview": "// stdafx.h : include file for standard system include files,\n// or project specific include files that are used frequen"
  },
  {
    "path": "samples/addon/targetver.h",
    "chars": 306,
    "preview": "#pragma once\n\n// Including SDKDDKVer.h defines the highest available Windows platform.\n\n// If you wish to build your app"
  },
  {
    "path": "samples/addon/wfext.h",
    "chars": 5951,
    "preview": "/********************************************************************\n\n   wfext.h\n\n   Windows File Manager Extensions de"
  },
  {
    "path": "src/BagOValues.h",
    "chars": 2990,
    "preview": "/********************************************************************\r\n\r\n   BagOValues.h\r\n\r\n   Copyright (c) Microsoft C"
  },
  {
    "path": "src/Resize.c",
    "chars": 30409,
    "preview": "\n//\n//  Demonstration code for a generic implementation of resizeable dialogs.\n//  This code implements a window class ("
  },
  {
    "path": "src/Resize.h",
    "chars": 937,
    "preview": "\n#define DIALOGRESIZECONTROLCLASSW L\"DialogResizeControlClassW\"\n#define DIALOGRESIZECONTROLCLASSA \"DialogResizeControlCl"
  },
  {
    "path": "src/Winfile.vcxproj",
    "chars": 12675,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "src/Winfile.vcxproj.filters",
    "chars": 4818,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "src/dbg.c",
    "chars": 2687,
    "preview": "/********************************************************************\r\n\r\n   dbg.c\r\n\r\n   Debugging utilities\r\n\r\n   Copyri"
  },
  {
    "path": "src/dbg.h",
    "chars": 1885,
    "preview": "/********************************************************************\r\n\r\n   dbg.h\r\n\r\n   Debugging utilities header\r\n\r\n  "
  },
  {
    "path": "src/fmifs.h",
    "chars": 12988,
    "preview": "/********************************************************************\r\n\r\n   fmifs.h\r\n\r\n   This header file contains the "
  },
  {
    "path": "src/lang/res_de-DE.rc",
    "chars": 40361,
    "preview": "/********************************************************************\n\n   res_de-DE.rc\n\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/lang/res_en-US.rc",
    "chars": 35238,
    "preview": "/********************************************************************\n\n   res_en-US.rc\n\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/lang/res_he-IL.rc",
    "chars": 32319,
    "preview": "/********************************************************************\n\n   res_he-IL.rc\n\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/lang/res_ja-JP.rc",
    "chars": 31300,
    "preview": "/********************************************************************\r\n\r\n   res_ja-JP.rc\r\n\r\n   Copyright (c) Microsoft C"
  },
  {
    "path": "src/lang/res_ko-KR.rc",
    "chars": 30427,
    "preview": "/********************************************************************\r\n\r\n   res_ko-KR.rc\r\n\r\n   Copyright (c) Microsoft C"
  },
  {
    "path": "src/lang/res_pl-PL.rc",
    "chars": 37888,
    "preview": "/********************************************************************\n\n   res_en-US.rc\n\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/lang/res_pt-PT.rc",
    "chars": 38667,
    "preview": "/********************************************************************\r\n\r\n   res_pt-PT.rc\r\n\r\n   Copyright (c) Microsoft C"
  },
  {
    "path": "src/lang/res_tr-TR.rc",
    "chars": 34069,
    "preview": "/********************************************************************\n\n    res_tr-TR.rc\n\n    Copyright (c) Microsoft Cor"
  },
  {
    "path": "src/lang/res_zh-CN.rc",
    "chars": 27415,
    "preview": "/********************************************************************\n\n   res_zh-CN.rc\n\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/lang/winfile_de-DE.dlg",
    "chars": 51226,
    "preview": "/********************************************************************\n\n   winfile.dlg\n\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/lang/winfile_en-US.dlg",
    "chars": 50716,
    "preview": "/********************************************************************\n\n   winfile.dlg\n\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/lang/winfile_he-IL.dlg",
    "chars": 51195,
    "preview": "/********************************************************************\n\n   winfile.dlg\n\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/lang/winfile_ja-JP.dlg",
    "chars": 50492,
    "preview": "/********************************************************************\r\n\r\n   winfile.dlg\r\n\r\n   Copyright (c) Microsoft Co"
  },
  {
    "path": "src/lang/winfile_ko-KR.dlg",
    "chars": 49337,
    "preview": "/********************************************************************\n\n   winfile.dlg\n\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/lang/winfile_pl-PL.dlg",
    "chars": 51302,
    "preview": "/********************************************************************\n\n   winfile.dlg\n\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/lang/winfile_pt-PT.dlg",
    "chars": 52448,
    "preview": "/********************************************************************\r\n\r\n   winfile.dlg\r\n\r\n   Copyright (c) Microsoft Co"
  },
  {
    "path": "src/lang/winfile_tr-TR.dlg",
    "chars": 51047,
    "preview": "/********************************************************************\n\n   winfile.dlg\n\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/lang/winfile_zh-CN.dlg",
    "chars": 48946,
    "preview": "/********************************************************************\n\n   winfile.dlg\n\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/lfn.c",
    "chars": 23928,
    "preview": "/********************************************************************\r\n\r\n   lfn.c\r\n\r\n   This file contains code that com"
  },
  {
    "path": "src/lfn.h",
    "chars": 1561,
    "preview": "/********************************************************************\r\n\r\n   lfn.h\r\n\r\n   declaration of lfn aware functio"
  },
  {
    "path": "src/lfnmisc.c",
    "chars": 8985,
    "preview": "/********************************************************************\r\n\r\n   lfnmisc.c\r\n\r\n   Long filename support for wi"
  },
  {
    "path": "src/mpr.h",
    "chars": 12450,
    "preview": "/********************************************************************\r\n\r\n   mpr.h\r\n\r\n   Standard MPR Header File for NT-"
  },
  {
    "path": "src/numfmt.c",
    "chars": 1861,
    "preview": "/********************************************************************\r\n\r\n   NumFmt.c\r\n\r\n   Number formatting code\r\n\r\n   "
  },
  {
    "path": "src/numfmt.h",
    "chars": 780,
    "preview": "/********************************************************************\r\n\r\n   numfmt.h\r\n\r\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/origrc/winfile.cs-CZ.rc",
    "chars": 60694,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.da-DK.rc",
    "chars": 62270,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.de-DE.rc",
    "chars": 64998,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.en-US.rc",
    "chars": 61673,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.es-ES.rc",
    "chars": 65135,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.fi-FI.rc",
    "chars": 61779,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.fr-FR.rc",
    "chars": 65185,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.hu-HU.rc",
    "chars": 61497,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.it-IT.rc",
    "chars": 63866,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.ja-JP.rc",
    "chars": 51269,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.ko-KR.rc",
    "chars": 50290,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.nb-NO.rc",
    "chars": 62185,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.nl-NL.rc",
    "chars": 64602,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.pl-PL.rc",
    "chars": 63636,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.pt-BR.rc",
    "chars": 64151,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.ru-RU.rc",
    "chars": 62800,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.sv-SE.rc",
    "chars": 61904,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.zh-CN.rc",
    "chars": 48880,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/origrc/winfile.zh-TW.rc",
    "chars": 50371,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "src/res.h",
    "chars": 19170,
    "preview": "/**************************************************************************\r\n\r\n   res.h\r\n\r\n   Include for WINFILE resour"
  },
  {
    "path": "src/res.rc",
    "chars": 5553,
    "preview": "/********************************************************************\r\n\r\n   res.rc\r\n\r\n   Copyright (c) Microsoft Corpora"
  },
  {
    "path": "src/spinlock.h",
    "chars": 2449,
    "preview": "/********************************************************************\r\n\r\n   spinlock.h\r\n\r\n   Derived from https://www.co"
  },
  {
    "path": "src/suggest.c",
    "chars": 5798,
    "preview": "/********************************************************************\r\n\r\n   Suggest.c\r\n\r\n   Handles error code messages "
  },
  {
    "path": "src/suggest.h",
    "chars": 1501,
    "preview": "/********************************************************************\r\n\r\n   suggest.h\r\n\r\n   Copyright (c) Microsoft Corp"
  },
  {
    "path": "src/tbar.c",
    "chars": 46378,
    "preview": "/********************************************************************\r\n\r\n   tbar.c\r\n\r\n   Windows File System Toolbar sup"
  },
  {
    "path": "src/treectl.c",
    "chars": 92196,
    "preview": "/********************************************************************\r\n\r\n   treectl.c\r\n\r\n   Windows Directory Tree Windo"
  },
  {
    "path": "src/treectl.h",
    "chars": 923,
    "preview": "/********************************************************************\r\n\r\n   treectl.h\r\n\r\n   Copyright (c) Microsoft Corp"
  },
  {
    "path": "src/w31rc/winfile.Brazil.rc",
    "chars": 44922,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Catalan.rc",
    "chars": 35038,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Czech.rc",
    "chars": 32592,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Danish.rc",
    "chars": 43084,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Dutch.rc",
    "chars": 45697,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Finnish.rc",
    "chars": 42856,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.French.Int.rc",
    "chars": 46225,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.French.rc",
    "chars": 46225,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.German.rc",
    "chars": 46941,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Hungary.rc",
    "chars": 42093,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Italian.rc",
    "chars": 44170,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Japanese.rc",
    "chars": 26893,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Korean.rc",
    "chars": 25796,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Norway.rc",
    "chars": 42998,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Polish.rc",
    "chars": 43369,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Portuguese.rc",
    "chars": 44502,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.SimChin.rc",
    "chars": 24776,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Spanish.rc",
    "chars": 46421,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Swedish.rc",
    "chars": 42895,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.TradChin.rc",
    "chars": 25557,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.Turkish.rc",
    "chars": 30729,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/w31rc/winfile.USEnglish.rc",
    "chars": 42917,
    "preview": "/********************************************************************\n\n    Resources that were extracted from a binary t"
  },
  {
    "path": "src/wfassoc.c",
    "chars": 119045,
    "preview": "/********************************************************************\r\n\r\n   wfassoc.c\r\n\r\n   Windows File Manager associa"
  },
  {
    "path": "src/wfchgnot.c",
    "chars": 11887,
    "preview": "/********************************************************************\r\n\r\n   wfchgnot.c\r\n\r\n   WinFile Change Notify modul"
  },
  {
    "path": "src/wfcomman.c",
    "chars": 63601,
    "preview": "/********************************************************************\r\n\r\n   wfcomman.c\r\n\r\n   Windows File System Command"
  },
  {
    "path": "src/wfcopy.c",
    "chars": 103818,
    "preview": "/********************************************************************\r\n\r\n   wfcopy.c\r\n\r\n   Windows File System File Copy"
  },
  {
    "path": "src/wfcopy.h",
    "chars": 1600,
    "preview": "/********************************************************************\r\n\r\n   wfcopy.h\r\n\r\n   Include for WINFILE's File Co"
  },
  {
    "path": "src/wfdir.c",
    "chars": 85677,
    "preview": "/********************************************************************\r\n\r\n   wfdir.c\r\n\r\n   Implements view for directorie"
  },
  {
    "path": "src/wfdirrd.c",
    "chars": 27630,
    "preview": "/********************************************************************\r\n\r\n   wfDirRd.c\r\n\r\n   Background directory read su"
  },
  {
    "path": "src/wfdirsrc.c",
    "chars": 30992,
    "preview": "/********************************************************************\r\n\r\n   wfDirSrc.c\r\n\r\n   Copyright (c) Microsoft Cor"
  },
  {
    "path": "src/wfdlgs.c",
    "chars": 28146,
    "preview": "/********************************************************************\r\n\r\n   wfdlgs.c\r\n\r\n   Windows File System Dialog pr"
  },
  {
    "path": "src/wfdlgs.h",
    "chars": 6325,
    "preview": "/********************************************************************\r\n\r\n   wfdlgs.h\r\n\r\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/wfdlgs2.c",
    "chars": 58200,
    "preview": "/********************************************************************\r\n\r\n   wfdlgs2.c\r\n\r\n   More Windows File System Dia"
  },
  {
    "path": "src/wfdlgs3.c",
    "chars": 57991,
    "preview": "/********************************************************************\r\n\r\n   wfdlgs3.c\r\n\r\n   Windows File System Dialog p"
  },
  {
    "path": "src/wfdoc.txt",
    "chars": 4050,
    "preview": "WINFILE Development Documentation -\r\n\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the MIT"
  },
  {
    "path": "src/wfdocb.h",
    "chars": 949,
    "preview": "/********************************************************************\r\n\r\n   wfdocb.h\r\n\r\n   Doc Bucket header\r\n\r\n   Copyr"
  },
  {
    "path": "src/wfdos.c",
    "chars": 2356,
    "preview": "/********************************************************************\r\n\r\n   wfdos.c\r\n\r\n   Ported code from wfdos.asm\r\n\r\n"
  },
  {
    "path": "src/wfdrives.c",
    "chars": 29486,
    "preview": "/********************************************************************\r\n\r\n   wfdrives.c\r\n\r\n   window procs and other stuf"
  },
  {
    "path": "src/wfdrop.c",
    "chars": 15319,
    "preview": "/********************************************************************\r\n\r\n   wfdrop.c\r\n\r\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/wfdrop.h",
    "chars": 8373,
    "preview": "/**************************************************************************\r\n\r\n   wfdrop.h\r\n\r\n   Include for WINFILE pro"
  },
  {
    "path": "src/wfext.c",
    "chars": 12192,
    "preview": "/********************************************************************\r\n\r\n   wfExt.c\r\n\r\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/wfext.h",
    "chars": 6078,
    "preview": "/********************************************************************\r\n\r\n   wfext.h\r\n\r\n   Windows File Manager Extension"
  },
  {
    "path": "src/wfexti.h",
    "chars": 1848,
    "preview": "/********************************************************************\r\n\r\n   wfexti.h\r\n\r\n   Windows File Manager Extensio"
  },
  {
    "path": "src/wffile.c",
    "chars": 56805,
    "preview": "/********************************************************************\r\n\r\n   wffile.c\r\n\r\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/wfgoto.cpp",
    "chars": 20742,
    "preview": "/********************************************************************\r\n\r\n    wfgoto.cpp\r\n\r\n    This file contains code t"
  },
  {
    "path": "src/wfgwl.h",
    "chars": 1258,
    "preview": "/********************************************************************\r\n\r\n   wfgwl.h\r\n\r\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/wfhelp.h",
    "chars": 6065,
    "preview": "/********************************************************************\r\n\r\n   wfhelp.h\r\n\r\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/wfinfo.c",
    "chars": 51014,
    "preview": "/********************************************************************\r\n\r\n   wfinfo.c\r\n\r\n   Handles caching and refreshin"
  },
  {
    "path": "src/wfinfo.h",
    "chars": 3732,
    "preview": "/********************************************************************\r\n\r\n   wfinfo.h\r\n\r\n   DriveInformation handler head"
  },
  {
    "path": "src/wfinit.c",
    "chars": 51807,
    "preview": "/********************************************************************\r\n\r\n   wfinit.c\r\n\r\n   Windows File System Initializ"
  },
  {
    "path": "src/wfloc.c",
    "chars": 4285,
    "preview": "/********************************************************************\n\nwfloc.c\n\nWinfile localization selection procedure"
  },
  {
    "path": "src/wfmem.c",
    "chars": 6313,
    "preview": "/********************************************************************\r\n\r\n   wfmem.c\r\n\r\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/wfmem.h",
    "chars": 1987,
    "preview": "/********************************************************************\r\n\r\n   wfmem.h\r\n\r\n   Copyright (c) Microsoft Corpor"
  },
  {
    "path": "src/wfprint.c",
    "chars": 3648,
    "preview": "/********************************************************************\r\n\r\n   wfprint.c\r\n\r\n   Windows Print Routines\r\n\r\n  "
  },
  {
    "path": "src/wfsearch.c",
    "chars": 38112,
    "preview": "/********************************************************************\r\n\r\n    WFSearch.c - Windows File Manager Search co"
  },
  {
    "path": "src/wftree.c",
    "chars": 25942,
    "preview": "/********************************************************************\r\n\r\n   wftree.c\r\n\r\n   Windows File System Tree Wind"
  },
  {
    "path": "src/wfutil.c",
    "chars": 43618,
    "preview": "/********************************************************************\r\n\r\n   wfutil.c\r\n\r\n   Windows File System String Ut"
  },
  {
    "path": "src/winexp.h",
    "chars": 1362,
    "preview": "/********************************************************************\r\n\r\n   winexp.h\r\n\r\n   Copyright (c) Microsoft Corpo"
  },
  {
    "path": "src/winfile.c",
    "chars": 36941,
    "preview": "/********************************************************************\r\n\r\n   winfile.c\r\n\r\n   Copyright (c) Microsoft Corp"
  },
  {
    "path": "src/winfile.exe.manifest",
    "chars": 1266,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersi"
  },
  {
    "path": "src/winfile.h",
    "chars": 52025,
    "preview": "/**************************************************************************\r\n\r\n   winfile.h\r\n\r\n   Include for WINFILE pr"
  },
  {
    "path": "src/wnetcaps.c",
    "chars": 3057,
    "preview": "/********************************************************************\r\n\r\n   WNetCaps.c\r\n\r\n   Returns net status\r\n\r\n   Co"
  },
  {
    "path": "src/wnetcaps.h",
    "chars": 613,
    "preview": "/********************************************************************\r\n\r\n   wnetcaps.h\r\n\r\n   Copyright (c) Microsoft Cor"
  },
  {
    "path": "tools/ExeView/ExeView.vcxproj",
    "chars": 3182,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "tools/ExeView/ExeView.vcxproj.filters",
    "chars": 2338,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "tools/ExeView/abstract.txt",
    "chars": 1437,
    "preview": "EXEVIEW: Extracts and Decodes Information from Executable\nFiles\n\nEXEVIEW demonstrates how to extract and decode resource"
  },
  {
    "path": "tools/ExeView/bmp.cpp",
    "chars": 8173,
    "preview": "//*************************************************************\n//  File name: Bitmapc\n//\n//  Description: \n//      Code"
  },
  {
    "path": "tools/ExeView/exehdr.cpp",
    "chars": 20809,
    "preview": "//*************************************************************\n//  File name: exehdr.c\n//\n//  Description: \n//      Rou"
  },
  {
    "path": "tools/ExeView/exehdr.h",
    "chars": 8294,
    "preview": "//*************************************************************\n//  File name: exehdr.h\n//\n//  Description: \n//      Str"
  },
  {
    "path": "tools/ExeView/exeview.txt",
    "chars": 1394,
    "preview": "Summary:\n\n    Often applications wish to extract information from an executable \nfile without the application being load"
  },
  {
    "path": "tools/ExeView/filllb.cpp",
    "chars": 22097,
    "preview": "//*************************************************************\n//  File name: filllb.c\n//\n//  Description: \n//      Con"
  },
  {
    "path": "tools/ExeView/global.h",
    "chars": 1845,
    "preview": "//*************************************************************\n//  File name: global.h\n//\n//  Description: \n//      Glo"
  },
  {
    "path": "tools/ExeView/iconcur.cpp",
    "chars": 20308,
    "preview": "//*************************************************************\n//  File name: iconcur.c\n//\n//  Description: \n//      Co"
  },
  {
    "path": "tools/ExeView/init.cpp",
    "chars": 5029,
    "preview": "//*************************************************************\n//  File name: init.c\n//\n//  Description: \n//      Initi"
  },
  {
    "path": "tools/ExeView/main.cpp",
    "chars": 15685,
    "preview": "//*************************************************************\n//  File name: main.c\n//\n//  Description: \n//      WinMa"
  },
  {
    "path": "tools/ExeView/main.def",
    "chars": 630,
    "preview": "NAME         EXEVIEW\n\nDESCRIPTION  'Windows Executable Viewer'\n\nEXETYPE      WINDOWS\n\nSTUB         'WINSTUB.EXE'\n\nCODE  "
  },
  {
    "path": "tools/ExeView/main.rc",
    "chars": 1671,
    "preview": "//*************************************************************\n//  File name: main.rc\n//\n//  Description: \n//      Reso"
  },
  {
    "path": "tools/ExeView/makefile",
    "chars": 778,
    "preview": "#\n#   Makefile for Sample Application\n#\n\nCC     =   cl -c -AM -Gsw -nologo -Od -W3 -Zpe\nLN     =   link /m/NOD/NOE/NOL/A"
  },
  {
    "path": "tools/ExeView/menudlg.cpp",
    "chars": 3950,
    "preview": "//*************************************************************\n//  File name: menudlg.c\n//\n//  Description: \n//      Co"
  },
  {
    "path": "tools/ExeView/res.cpp",
    "chars": 27177,
    "preview": "//*************************************************************\n//  File name: res.c\n//\n//  Description: \n//      Code f"
  },
  {
    "path": "tools/ExeView/res.h",
    "chars": 6285,
    "preview": "//*************************************************************\n//  File name: res.h\n//\n//  Description: \n//      header"
  },
  {
    "path": "tools/ExeView/save.cpp",
    "chars": 9247,
    "preview": "/*************************************************************\n    File name: save.c\n\n    Description:\n        Code for "
  },
  {
    "path": "tools/FileSignatureInfo/FileSignatureInfo.cpp",
    "chars": 18035,
    "preview": "/********************************************************************\n\n    FileSignatureInfo.cpp : displays and verifies"
  },
  {
    "path": "tools/FileSignatureInfo/FileSignatureInfo.vcxproj",
    "chars": 2896,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "tools/FileSignatureInfo/FileSignatureInfo.vcxproj.filters",
    "chars": 1347,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "tools/FileSignatureInfo/VerifySignature.cpp",
    "chars": 6204,
    "preview": "/********************************************************************\n\n    VerifySignature.cpp : verifies the embedded s"
  },
  {
    "path": "tools/FileSignatureInfo/stdafx.cpp",
    "chars": 304,
    "preview": "// stdafx.cpp : source file that includes just the standard includes\r\n// FileSignatureInfo.pch will be the pre-compiled "
  },
  {
    "path": "tools/FileSignatureInfo/stdafx.h",
    "chars": 320,
    "preview": "// stdafx.h : include file for standard system include files,\r\n// or project specific include files that are used freque"
  },
  {
    "path": "tools/FileSignatureInfo/targetver.h",
    "chars": 314,
    "preview": "#pragma once\r\n\r\n// Including SDKDDKVer.h defines the highest available Windows platform.\r\n\r\n// If you wish to build your"
  },
  {
    "path": "tools/VerifyResources/Resources.h",
    "chars": 2213,
    "preview": "/**************************************************************************\n\n    Resources.h\n\n    Copyright (c) Microsof"
  },
  {
    "path": "tools/VerifyResources/VerifyResources.cpp",
    "chars": 17394,
    "preview": "/**************************************************************************\n\n    VerifyResources.h\n\n    Verify the consi"
  },
  {
    "path": "tools/VerifyResources/VerifyResources.vcxproj",
    "chars": 2815,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "tools/VerifyResources/VerifyResources.vcxproj.filters",
    "chars": 1337,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "tools/VerifyResources/stdafx.cpp",
    "chars": 294,
    "preview": "// stdafx.cpp : source file that includes just the standard includes\n// VerifyResources.pch will be the pre-compiled hea"
  },
  {
    "path": "tools/VerifyResources/stdafx.h",
    "chars": 305,
    "preview": "// stdafx.h : include file for standard system include files,\n// or project specific include files that are used frequen"
  },
  {
    "path": "tools/VerifyResources/targetver.h",
    "chars": 306,
    "preview": "#pragma once\n\n// Including SDKDDKVer.h defines the highest available Windows platform.\n\n// If you wish to build your app"
  }
]

// ... and 14 more files (download for full content)

About this extraction

This page contains the full source code of the microsoft/winfile GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 196 files (4.3 MB), approximately 1.1M tokens, and a symbol index with 765 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!