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; } } }