using System;
using System.Runtime.InteropServices;
namespace Vanara.PInvoke
{
public static partial class VersionDll
{
/// Controls which MUI DLLs (if any) from which the version resource is extracted.
[PInvokeData("verrsrc.h")]
[Flags]
public enum FILE_VER_GET : uint
{
///
/// Loads the entire version resource (both strings and binary version information) from the corresponding MUI file, if available.
///
FILE_VER_GET_LOCALISED = 0x01,
///
/// Loads the version resource strings from the corresponding MUI file, if available, and loads the binary version information
/// (VS_FIXEDFILEINFO) from the corresponding language-neutral file, if available.
///
FILE_VER_GET_NEUTRAL = 0x02,
///
/// Indicates a preference for version.dll to attempt to preload the image outside of the loader lock to avoid contention. This
/// flag does not change the behavior or semantics of the function.
///
FILE_VER_GET_PREFETCHED = 0x04
}
/// Return codes for VerFindFile.
[PInvokeData("verrsrc.h")]
[Flags]
public enum VFF : uint
{
/// The currently installed version of the file is not in the recommended destination.
VFF_CURNEDEST = 0x0001,
///
/// The system is using the currently installed version of the file; therefore, the file cannot be overwritten or deleted.
///
VFF_FILEINUSE = 0x0002,
///
/// At least one of the buffers was too small to contain the corresponding string. An application should check the output
/// buffers to determine which buffer was too small.
///
VFF_BUFFTOOSMALL = 0x0004,
}
/// Flags for VerFindFile.
[PInvokeData("verrsrc.h")]
[Flags]
public enum VFFF : uint
{
///
/// The source file can be shared by multiple applications. An application can use this information to determine where the file
/// should be copied.
///
VFFF_ISSHAREDFILE = 0x0001,
}
/// The general type of file.
[PInvokeData("verrsrc.h", MSDNShortId = "NS:verrsrc.tagVS_FIXEDFILEINFO")]
public enum VFT : uint
{
/// The file type is unknown to the system.
VFT_UNKNOWN = 0x00000000,
/// The file contains an application.
VFT_APP = 0x00000001,
/// The file contains a DLL.
VFT_DLL = 0x00000002,
///
/// The file contains a device driver. If dwFileType is VFT_DRV, dwFileSubtype contains a more specific description of the driver.
///
VFT_DRV = 0x00000003,
///
/// The file contains a font. If dwFileType is VFT_FONT, dwFileSubtype contains a more specific description of the font file.
///
VFT_FONT = 0x00000004,
///
VFT_VXD = 0x00000005,
/// The file contains a static-link library.
VFT_STATIC_LIB = 0x00000007,
}
/// The function of the file.
[PInvokeData("verrsrc.h", MSDNShortId = "NS:verrsrc.tagVS_FIXEDFILEINFO")]
public enum VFT2 : uint
{
/// The file contains a communications driver.
VFT2_DRV_COMM = 0x0000000A,
/// The file contains a display driver.
VFT2_DRV_DISPLAY = 0x00000004,
/// The file contains an installable driver.
VFT2_DRV_INSTALLABLE = 0x00000008,
/// The file contains a keyboard driver.
VFT2_DRV_KEYBOARD = 0x00000002,
/// The file contains a language driver.
VFT2_DRV_LANGUAGE = 0x00000003,
/// The file contains a mouse driver.
VFT2_DRV_MOUSE = 0x00000005,
/// The file contains a network driver.
VFT2_DRV_NETWORK = 0x00000006,
/// The file contains a printer driver.
VFT2_DRV_PRINTER = 0x00000001,
/// The file contains a sound driver.
VFT2_DRV_SOUND = 0x00000009,
/// The file contains a system driver.
VFT2_DRV_SYSTEM = 0x00000007,
/// The file contains a versioned printer driver.
VFT2_DRV_VERSIONED_PRINTER = 0x0000000C,
/// The driver type is unknown by the system.
VFT2_UNKNOWN = 0x00000000,
/// The file contains a raster font.
VFT2_FONT_RASTER = 0x00000001,
/// The file contains a TrueType font.
VFT2_FONT_TRUETYPE = 0x00000003,
/// The file contains a vector font.
VFT2_FONT_VECTOR = 0x00000002,
}
/// The return value for that indicates exceptions.
[PInvokeData("verrsrc.h")]
[Flags]
public enum VIF : uint
{
///
/// The szTmpFile buffer was too small to contain the name of the temporary source file. When the function returns,
/// lpuTmpFileLen contains the size of the buffer required to hold the filename.
///
VIF_BUFFTOOSMALL = 0x00040000,
/// The function cannot create the temporary file. The specific error may be described by another flag.
VIF_CANNOTCREATE = 0x00000800,
///
/// The function cannot delete the destination file, or cannot delete the existing version of the file located in another
/// directory. If the VIF_TEMPFILE bit is set, the installation failed, and the destination file probably cannot be deleted.
///
VIF_CANNOTDELETE = 0x00001000,
/// The existing version of the file could not be deleted and VIFF_DONTDELETEOLD was not specified.
VIF_CANNOTDELETECUR = 0x00004000,
/// The function cannot load the cabinet file.
VIF_CANNOTLOADCABINET = 0x00100000,
/// The function cannot load the compressed file.
VIF_CANNOTLOADLZ32 = 0x00080000,
///
/// The function cannot read the destination (existing) files. This prevents the function from examining the file's attributes.
///
VIF_CANNOTREADDST = 0x00020000,
/// The function cannot read the source file. This could mean that the path was not specified properly.
VIF_CANNOTREADSRC = 0x00010000,
/// The function cannot rename the temporary file, but already deleted the destination file.
VIF_CANNOTRENAME = 0x00002000,
///
/// The new file requires a code page that cannot be displayed by the version of the system currently running. This error can be
/// overridden by calling VerInstallFile with the VIFF_FORCEINSTALL flag set.
///
VIF_DIFFCODEPG = 0x00000010,
///
/// The new and preexisting files have different language or code-page values. This error can be overridden by calling
/// VerInstallFile again with the VIFF_FORCEINSTALL flag set.
///
VIF_DIFFLANG = 0x00000008,
///
/// The new file has a different type, subtype, or operating system from the preexisting file. This error can be overridden by
/// calling VerInstallFile again with the VIFF_FORCEINSTALL flag set.
///
VIF_DIFFTYPE = 0x00000020,
/// The preexisting file is in use by the system and cannot be deleted.
VIF_FILEINUSE = 0x00000080,
///
/// The new and preexisting files differ in one or more attributes. This error can be overridden by calling VerInstallFile again
/// with the VIFF_FORCEINSTALL flag set.
///
VIF_MISMATCH = 0x00000002,
///
/// The function cannot complete the requested operation due to insufficient memory. Generally, this means the application ran
/// out of memory attempting to expand a compressed file.
///
VIF_OUTOFMEMORY = 0x00008000,
/// The function cannot create the temporary file due to insufficient disk space on the destination drive.
VIF_OUTOFSPACE = 0x00000100,
/// A read, create, delete, or rename operation failed due to a sharing violation.
VIF_SHARINGVIOLATION = 0x00000400,
///
/// The file to install is older than the preexisting file. This error can be overridden by calling VerInstallFile again with
/// the VIFF_FORCEINSTALL flag set.
///
VIF_SRCOLD = 0x00000004,
///
/// The temporary copy of the new file is in the destination directory. The cause of failure is reflected in other flags.
///
VIF_TEMPFILE = 0x00000001,
///
/// The preexisting file is write-protected. This error can be overridden by calling VerInstallFile again with the
/// VIFF_FORCEINSTALL flag set.
///
VIF_WRITEPROT = 0x00000040,
}
/// The flags for .
[PInvokeData("verrsrc.h")]
[Flags]
public enum VIFF : uint
{
///
/// Installs the file regardless of mismatched version numbers. The function checks only for physical errors during installation.
///
VIFF_FORCEINSTALL = 0x0001,
///
/// Installs the file without deleting the previously installed file, if the previously installed file is not in the destination directory.
///
VIFF_DONTDELETEOLD = 0x0002,
/// A read, create, delete, or rename operation failed due to an access violation.
VIF_ACCESSVIOLATION = 0x00000200,
}
/// The operating system for which this file was designed.
[PInvokeData("verrsrc.h", MSDNShortId = "NS:verrsrc.tagVS_FIXEDFILEINFO")]
public enum VOS : uint
{
/// The operating system for which the file was designed is unknown to the system.
VOS_UNKNOWN = 0x00000000,
/// The file was designed for MS-DOS.
VOS_DOS = 0x00010000,
/// The file was designed for 16-bit OS/2.
VOS_OS216 = 0x00020000,
/// The file was designed for 32-bit OS/2.
VOS_OS232 = 0x00030000,
/// The file was designed for Windows NT.
VOS_NT = 0x00040000,
/// The file was designed for Windows CE.
VOS_WINCE = 0x00050000,
///
VOS__BASE = 0x00000000,
/// The file was designed for 16-bit Windows.
VOS__WINDOWS16 = 0x00000001,
/// The file was designed for 16-bit Presentation Manager.
VOS__PM16 = 0x00000002,
/// The file was designed for 32-bit Presentation Manager.
VOS__PM32 = 0x00000003,
/// The file was designed for 32-bit Windows.
VOS__WINDOWS32 = 0x00000004,
/// The file was designed for 16-bit Windows running on MS-DOS.
VOS_DOS_WINDOWS16 = 0x00010001,
/// The file was designed for 32-bit Windows running on MS-DOS.
VOS_DOS_WINDOWS32 = 0x00010004,
/// The file was designed for 16-bit Presentation Manager running on 16-bit OS/2.
VOS_OS216_PM16 = 0x00020002,
/// The file was designed for 32-bit Presentation Manager running on 32-bit OS/2.
VOS_OS232_PM32 = 0x00030003,
/// The file was designed for Windows NT.
VOS_NT_WINDOWS32 = 0x00040004,
}
/// Contains a bitmask that specifies the Boolean attributes of the file.
[PInvokeData("verrsrc.h", MSDNShortId = "NS:verrsrc.tagVS_FIXEDFILEINFO")]
[Flags]
public enum VS_FF : uint
{
/// The file contains debugging information or is compiled with debugging features enabled.
VS_FF_DEBUG = 0x00000001,
/// The file is a development version, not a commercially released product.
VS_FF_PRERELEASE = 0x00000002,
/// The file has been modified and is not identical to the original shipping file of the same version number.
VS_FF_PATCHED = 0x00000004,
///
/// The file was not built using standard release procedures. If this flag is set, the StringFileInfo structure should contain a
/// PrivateBuild entry.
///
VS_FF_PRIVATEBUILD = 0x00000008,
///
/// The file's version structure was created dynamically; therefore, some of the members in this structure may be empty or
/// incorrect. This flag should never be set in a file's VS_VERSIONINFO data.
///
VS_FF_INFOINFERRED = 0x00000010,
///
/// The file was built by the original company using standard release procedures but is a variation of the normal file of the
/// same version number. If this flag is set, the StringFileInfo structure should contain a SpecialBuild entry.
///
VS_FF_SPECIALBUILD = 0x00000020,
}
/// Contains version information for a file. This information is language and code page independent.
// https://docs.microsoft.com/en-us/windows/win32/api/verrsrc/ns-verrsrc-vs_fixedfileinfo typedef struct tagVS_FIXEDFILEINFO { DWORD
// dwSignature; DWORD dwStrucVersion; DWORD dwFileVersionMS; DWORD dwFileVersionLS; DWORD dwProductVersionMS; DWORD
// dwProductVersionLS; DWORD dwFileFlagsMask; DWORD dwFileFlags; DWORD dwFileOS; DWORD dwFileType; DWORD dwFileSubtype; DWORD
// dwFileDateMS; DWORD dwFileDateLS; } VS_FIXEDFILEINFO;
[PInvokeData("verrsrc.h", MSDNShortId = "NS:verrsrc.tagVS_FIXEDFILEINFO")]
[StructLayout(LayoutKind.Sequential)]
public struct VS_FIXEDFILEINFO
{
///
/// Type: DWORD
///
/// Contains the value 0xFEEF04BD. This is used with the szKey member of the VS_VERSIONINFO structure when searching a
/// file for the VS_FIXEDFILEINFO structure.
///
///
public uint dwSignature;
///
/// Type: DWORD
///
/// The binary version number of this structure. The high-order word of this member contains the major version number, and the
/// low-order word contains the minor version number.
///
///
public uint dwStrucVersion;
///
/// Type: DWORD
///
/// The most significant 32 bits of the file's binary version number. This member is used with dwFileVersionLS to form a
/// 64-bit value used for numeric comparisons.
///
///
public uint dwFileVersionMS;
///
/// Type: DWORD
///
/// The least significant 32 bits of the file's binary version number. This member is used with dwFileVersionMS to form a
/// 64-bit value used for numeric comparisons.
///
///
public uint dwFileVersionLS;
///
/// Type: DWORD
///
/// The most significant 32 bits of the binary version number of the product with which this file was distributed. This member
/// is used with dwProductVersionLS to form a 64-bit value used for numeric comparisons.
///
///
public uint dwProductVersionMS;
///
/// Type: DWORD
///
/// The least significant 32 bits of the binary version number of the product with which this file was distributed. This member
/// is used with dwProductVersionMS to form a 64-bit value used for numeric comparisons.
///
///
public uint dwProductVersionLS;
///
/// Type: DWORD
///
/// Contains a bitmask that specifies the valid bits in dwFileFlags. A bit is valid only if it was defined when the file
/// was created.
///
///
public VS_FF dwFileFlagsMask;
///
/// Type: DWORD
///
/// Contains a bitmask that specifies the Boolean attributes of the file. This member can include one or more of the following values.
///
///
///
/// Value
/// Meaning
///
/// -
/// VS_FF_DEBUG 0x00000001L
/// The file contains debugging information or is compiled with debugging features enabled.
///
/// -
/// VS_FF_INFOINFERRED 0x00000010L
///
/// The file's version structure was created dynamically; therefore, some of the members in this structure may be empty or
/// incorrect. This flag should never be set in a file's VS_VERSIONINFO data.
///
///
/// -
/// VS_FF_PATCHED 0x00000004L
/// The file has been modified and is not identical to the original shipping file of the same version number.
///
/// -
/// VS_FF_PRERELEASE 0x00000002L
/// The file is a development version, not a commercially released product.
///
/// -
/// VS_FF_PRIVATEBUILD 0x00000008L
///
/// The file was not built using standard release procedures. If this flag is set, the StringFileInfo structure should contain a
/// PrivateBuild entry.
///
///
/// -
/// VS_FF_SPECIALBUILD 0x00000020L
///
/// The file was built by the original company using standard release procedures but is a variation of the normal file of the
/// same version number. If this flag is set, the StringFileInfo structure should contain a SpecialBuild entry.
///
///
///
///
public VS_FF dwFileFlags;
///
/// Type: DWORD
/// The operating system for which this file was designed. This member can be one of the following values.
///
///
/// Value
/// Meaning
///
/// -
/// VOS_DOS 0x00010000L
/// The file was designed for MS-DOS.
///
/// -
/// VOS_NT 0x00040000L
/// The file was designed for Windows NT.
///
/// -
/// VOS__WINDOWS16 0x00000001L
/// The file was designed for 16-bit Windows.
///
/// -
/// VOS__WINDOWS32 0x00000004L
/// The file was designed for 32-bit Windows.
///
/// -
/// VOS_OS216 0x00020000L
/// The file was designed for 16-bit OS/2.
///
/// -
/// VOS_OS232 0x00030000L
/// The file was designed for 32-bit OS/2.
///
/// -
/// VOS__PM16 0x00000002L
/// The file was designed for 16-bit Presentation Manager.
///
/// -
/// VOS__PM32 0x00000003L
/// The file was designed for 32-bit Presentation Manager.
///
/// -
/// VOS_UNKNOWN 0x00000000L
/// The operating system for which the file was designed is unknown to the system.
///
///
///
/// An application can combine these values to indicate that the file was designed for one operating system running on another.
/// The following dwFileOS values are examples of this, but are not a complete list.
///
///
///
/// Value
/// Meaning
///
/// -
/// VOS_DOS_WINDOWS16 0x00010001L
/// The file was designed for 16-bit Windows running on MS-DOS.
///
/// -
/// VOS_DOS_WINDOWS32 0x00010004L
/// The file was designed for 32-bit Windows running on MS-DOS.
///
/// -
/// VOS_NT_WINDOWS32 0x00040004L
/// The file was designed for Windows NT.
///
/// -
/// VOS_OS216_PM16 0x00020002L
/// The file was designed for 16-bit Presentation Manager running on 16-bit OS/2.
///
/// -
/// VOS_OS232_PM32 0x00030003L
/// The file was designed for 32-bit Presentation Manager running on 32-bit OS/2.
///
///
///
public VOS dwFileOS;
///
/// Type: DWORD
/// The general type of file. This member can be one of the following values. All other values are reserved.
///
///
/// Value
/// Meaning
///
/// -
/// VFT_APP 0x00000001L
/// The file contains an application.
///
/// -
/// VFT_DLL 0x00000002L
/// The file contains a DLL.
///
/// -
/// VFT_DRV 0x00000003L
///
/// The file contains a device driver. If dwFileType is VFT_DRV, dwFileSubtype contains a more specific description of the driver.
///
///
/// -
/// VFT_FONT 0x00000004L
///
/// The file contains a font. If dwFileType is VFT_FONT, dwFileSubtype contains a more specific description of the font file.
///
///
/// -
/// VFT_STATIC_LIB 0x00000007L
/// The file contains a static-link library.
///
/// -
/// VFT_UNKNOWN 0x00000000L
/// The file type is unknown to the system.
///
/// -
/// VFT_VXD 0x00000005L
/// The file contains a virtual device.
///
///
///
public VFT dwFileType;
///
/// Type: DWORD
///
/// The function of the file. The possible values depend on the value of dwFileType. For all values of dwFileType
/// not described in the following list, dwFileSubtype is zero.
///
/// If dwFileType is VFT_DRV, dwFileSubtype can be one of the following values.
///
///
/// Value
/// Meaning
///
/// -
/// VFT2_DRV_COMM 0x0000000AL
/// The file contains a communications driver.
///
/// -
/// VFT2_DRV_DISPLAY 0x00000004L
/// The file contains a display driver.
///
/// -
/// VFT2_DRV_INSTALLABLE 0x00000008L
/// The file contains an installable driver.
///
/// -
/// VFT2_DRV_KEYBOARD 0x00000002L
/// The file contains a keyboard driver.
///
/// -
/// VFT2_DRV_LANGUAGE 0x00000003L
/// The file contains a language driver.
///
/// -
/// VFT2_DRV_MOUSE 0x00000005L
/// The file contains a mouse driver.
///
/// -
/// VFT2_DRV_NETWORK 0x00000006L
/// The file contains a network driver.
///
/// -
/// VFT2_DRV_PRINTER 0x00000001L
/// The file contains a printer driver.
///
/// -
/// VFT2_DRV_SOUND 0x00000009L
/// The file contains a sound driver.
///
/// -
/// VFT2_DRV_SYSTEM 0x00000007L
/// The file contains a system driver.
///
/// -
/// VFT2_DRV_VERSIONED_PRINTER 0x0000000CL
/// The file contains a versioned printer driver.
///
/// -
/// VFT2_UNKNOWN 0x00000000L
/// The driver type is unknown by the system.
///
///
/// If dwFileType is VFT_FONT, dwFileSubtype can be one of the following values.
///
///
/// Value
/// Meaning
///
/// -
/// VFT2_FONT_RASTER 0x00000001L
/// The file contains a raster font.
///
/// -
/// VFT2_FONT_TRUETYPE 0x00000003L
/// The file contains a TrueType font.
///
/// -
/// VFT2_FONT_VECTOR 0x00000002L
/// The file contains a vector font.
///
/// -
/// VFT2_UNKNOWN 0x00000000L
/// The font type is unknown by the system.
///
///
///
/// If dwFileType is VFT_VXD, dwFileSubtype contains the virtual device identifier included in the virtual
/// device control block.
///
/// All dwFileSubtype values not listed here are reserved.
///
public VFT2 dwFileSubtype;
///
/// Type: DWORD
/// The most significant 32 bits of the file's 64-bit binary creation date and time stamp.
///
public uint dwFileDateMS;
///
/// Type: DWORD
/// The least significant 32 bits of the file's 64-bit binary creation date and time stamp.
///
public uint dwFileDateLS;
}
}
}