Revision history for the Perl extension Win32.

0.59    [2022-05-05]
        - add Win32::GetChipArch and use it in Win32::GetOSName to support arm/arm64
          architecture by Pierrick Bouvier [PR/34]

0.58    [2022-01-17]
        - add Win32::HttpGetFile (thanks to Craig Berry for the implementation
          and Tomasz Konojacki for code review) [PR/30]
        - skip failing Unicode.t on Cygwin because cwd() no longer returns an
          ANSI (short) path there.
        - Fixed test 14,15 of GetFullPathName.t when package is unpacked in a
          top level folder (thanks to Jianhong Feng) [PR/20]

0.57    [2021-03-10]
        - fix calling convention for PFNRegGetValueA [PR/28]

0.56    [2021-03-07]
        - added t/Privileges.t to MANIFEST

0.55    [2021-03-07]
        - added Win32::IsSymlinkCreationAllowed(), Win32::IsDeveloperModeEnabled(),
          and Win32::GetProcessPrivileges() by Tomasz Konojacki <> [PR/27]
        - removed old code for versions before Windows 2000
          by Tomasz Konojacki <> [PR/26]

0.54    [2020-03-27]
        - Skip tests that rely upon short names if these are unavailable
          and additional docs about short filenames. Richard Leach [PR/23]

0.53	[2019-08-05]
        - improve Win32::GetOSDisplayName
        - added Win2016/2019 detection and version information by
          Richard Leach [PR/15]
        - Include wchar.h to allow building with g++ by Tony Cook [rt#127836]

0.52_02 [2018-11-02] by Reini Urban
        - added () usage croaks.
        - Fixed a -Warray-bounds buffer overflow in LONGPATH,
        - Fix various -Wunused warnings
          and two -Wmaybe-uninitialized.

0.52_01 [2017-11-30]
        - add missing const

0.52    [2015-08-19]
        - minimal Windows 10 support (thanks to Joel Maslak) [PR/8]
        - refactor Windows 10 support to include ProductInfo flags
        - add tests for Windows 8.1, 10, and 2012 R2 server
        - define additional ProductInfo flags (TODO: add support for
          these codes in _GetOSName)

0.51    [2015-01-26]
        - Win32-0.50 was released to CPAN from an out-dated Git repo, so
          didn't actually include the merged pull requests.

0.50    [2015-01-26]
        - add GetOSName support for Windows 8.1 (thanks to Tony Cook) [PR/6]
        - Fix build in C++ mode (thanks to Steve Hay and Daniel Dragan) [PR/7]

0.49    [2014-04-15]
        - Make sure Win32.xs uses winsock2.h and not winsock.h. [rt#94730]

0.48    [2013-11-20]
        - Typo fixes by David Steinbrunner.
        - Fix required perl version 5.6 -> 5.006.
        - Don't call note() in t/GetOSName.t when it has not been
          imported from Test::More.
        - Convert t/GetOSName.t to Unix line endings like the rest of
          this repo.

0.47    [2013-02-21]
        - Make sure %PROCESSOR_ARCHITECTURE% is defined before calling
          Win32::GetArchName() in t/Names.t.  It may be undefined when
          the test is running under Cygwin crond.
        - In t/Names.t don't assume that LoginName or NodeName is at
          least 2 characters long; it may just be 1. [rt#83474]

0.46    [2013-02-19]
        - add Win2012/Win8 detection (thanks to Michiel Beijen) [rt#82572]

0.45	[2012-08-07]
	- add Win32::GetACP(), Win32::GetConsoleCP(),
	  Win32::GetConsoleOutputCP(), Win32::GetOEMCP(), Win32::SetConsoleCP()
	  and Win32::SetConsoleOutputCP(). [rt#78820] (Steve Hay)
	- adjust t/Unicode.t for Cygwin 1.7, where readdir() returns
	  the utf8 encoded filename without setting the SvUTF8 flag [rt#66751]

0.44	[2011-01-12]
	- fix memory leak introduced in 0.43

0.43	[2011-01-12]
	- fix a few potential buffer overrun bugs reported by Alex Davies.

0.42	[2011-01-06]
	- remove brittle test for Win32::GetLongPathName($ENV{SYSTEMROOT})
	  which will fail if the case of the environment value doesn't
	  exactly match the case of the directory name on the filesystem.

0.41	[2010-12-10]
	- Fix Win32::GetChipName() to return the native processor type when
	  running 32-bit Perl on 64-bit Windows (WOW64).  This will also
	  affect the values returned by Win32::GetOSDisplayName() and
	  Win32::GetOSName(). [rt#63797]
	- Fix Win32::GetOSDisplayName() to return the correct values for
	  all products even when a service pack has been installed. (This
	  was only an issue for some "special" editions).
	- The display name for "Windows 7 Business Edition" is actually
	  "Windows 7 Professional".
	- Fix t/GetOSName.t tests to avoid using the values returned by
	  GetSystemMetrics() when the test template didn't specify any
	  value at all.

0.40	[2010-12-08]
	- Add Win32::GetSystemMetrics function.
	- Add Win32::GetProductInfo() function.
	- Add Win32::GetOSDisplayName() function.
	- Detect "Windows Server 2008 R2" as "Win2008" in Win32::GetOSName()
	  (used to return "Win7" before). [rt#57172]
	- Detect "Windows Home Server" as "WinHomeSvr" in Win32::GetOSName()
	  (used to return "Win2003" before).
	- Add "R2", "Media Center", "Tablet PC", "Starter Edition" etc.
	  tags to the description returned by Win32::GetOSName() in
	  list context.
	- Rewrite the t/GetOSName.t tests

0.39	[2009-01-19]
	- Add support for Windows 2008 Server and Windows 7 in
	  Win32::GetOSName() and in the documentation for
	- Make Win32::GetOSName() implementation testable.
	- Document that the OSName for Win32s is actually "WinWin32s".

0.38	[2008-06-27]
	- Fix Cygwin releated problems in t/GetCurrentThreadId.t
	  (Jerry D. Hedden).

0.37	[2008-06-26]
	- Add Win32::GetCurrentProcessId() function

0.36	[2008-04-17]
	- Add typecasts for Win64 compilation

0.35	[2008-03-31]
	Integrate changes from bleadperl:
	- Silence Borland compiler warning (Steve Hay)
	- Fix memory leak in Win32::GetOSVersion (Vincent Pit)
	- Test Win32::GetCurrentThreadId on cygwin (Reini Urban, Steve Hay)

0.34	[2007-11-21]
	- Document "WinVista" return value for Win32::GetOSName()
	  (Steve Hay).

0.33	[2007-11-12]
	- Update version to 0.33 for Perl 5.10 release
	- Add $^O test in Makefile.PL for CPAN Testers
	- Use Win32::GetLastError() instead of $^E in t/Names.t for
	  cygwin compatibility (Jerry D. Hedden).

0.32	[2007-09-20]
	- Additional #define's for older versions of VC++ (Dmitry Karasik).
	- Win32::DomainName() doesn't return anything when the Workstation
	  service isn't running.  Set $^E and adapt t/Names.t accordingly
	  (Steve Hay & Jerry D. Hedden).
	- Fix t/Names.t to allow Win32::GetOSName() to return an empty
	  description as the 2nd return value (e.g. Vista without SP).
	- Fix t/GetFileVersion.t for Perl 5.10

0.31	[2007-09-10]
	- Apply Cygwin fixes from bleadperl (from Jerry D. Hedden).
	- Make sure Win32::GetLongPathName() always returns drive
	  letters in uppercase (Jerry D. Hedden).
	- Use uppercase environment variable names in t/Unicode.t
	  because the MSWin32 doesn't care, and Cygwin only works
	  with the uppercased version.
	- new t/Names.t test (from S├ębastien Aperghis-Tramoni)

0.30	[2007-06-25]
	- Fixed t/Unicode.t test for Cygwin (with help from Jerry D. Hedden).
	- Fixed and documented Win32::GetShortPathName() to return undef
	  when the pathname doesn't exist (thanks to Steve Hay).
	- Added t/GetShortPathName.t

0.29	[2007-05-17]
	- Fixed to compile with Borland BCC (thanks to Steve Hay).

0.28_01	[2007-05-16]
	- Increase version number as 0.28 was already used by an ActivePerl
	  release (for essentially 0.27 plus the Win32::IsAdminUser() change).

	- Add MODULE and PROTOTYPES directives to silence warnings from
	  newer versions of xsubpp.

	- Use the Cygwin codepath in Win32::GetFullPathName() when
	  PERL_IMPLICIT_SYS is not defined, because the other code
	  relies on the virtualization code in win32/vdir.h.

0.27_02	[2007-05-15]
	- We need Windows 2000 or later for the Unicode support because
	  WC_NO_BEST_FIT_CHARS is not supported on Windows NT.

	- Fix Win32::GetFullPathName() on Windows NT to return an
	  empty file part if the original argument ends with a slash.

0.27_01	[2007-04-18]
	- Update Win32::IsAdminUser() to use the IsUserAnAdmin() function
	  in shell32.dll when available.  On Windows Vista this will only
	  return true if the process is running with elevated privileges
	  and not just when the owner of the process is a member of the
	  "Administrators" group.

	- Win32::ExpandEnvironmentStrings() may return a Unicode string
	  (a string containing characters outside the system codepage)

	- new Win32::GetANSIPathName() function returns a pathname in
	  a form containing only characters from the system codepage

	- Win32::GetCwd() will return an ANSI version of the directory
	  name if the long name contains characters outside the system

	- Win32::GetFolderPath() will return an ANSI pathname. Call
	  Win32::GetLongPathName() to get the canonical Unicode

	- Win32::GetFullPathName() will return an ANSI pathname. Call
	  Win32::GetLongPathName() to get the canonical Unicode

	- Win32::GetLongPathName() may return a Unicode path name.
	  Call Win32::GetANSIPathName() to get a representation using
	  only characters from the system codepage.

	- Win32::LoginName() may return a Unicode string.

	- new Win32::OutputDebugString() function sends a string to
	  the debugger.

	- new Win32::GetCurrentThreadId() function returns the thread
	  id (to complement the process id in $$).

	- new Win32::CreateDirectory() creates a new directory.  The
	  name of the directory may contain Unicode characters outside
	  the system codepage.

	- new Win32::CreateFile() creates a new file.  The name of the
	  file may contain Unicode characters outside the system codepage.

0.27	[2007-03-07]
	- Extracted from the libwin32 distribution to simplify maintenance
	  because Win32 is a dual-life core module since 5.8.4.

	- and Win32.xs updated to version in bleadperl.
	  This includes all the Win32::* function from win32/win32.c
	  in core Perl, except for Win32::SetChildShowWindows().

	- Install into 'perl' directory instead of 'site' for Perl 5.8.4
	  and later.

	- Add some simple tests.