@@ -30,6 +30,7 @@ typedef int (__stdcall *PFNDllUnregisterServer)(void);
30
30
typedef BOOL (__stdcall * PFNIsUserAnAdmin )(void );
31
31
typedef BOOL (WINAPI * PFNGetProductInfo )(DWORD , DWORD , DWORD , DWORD , DWORD * );
32
32
typedef void (WINAPI * PFNGetNativeSystemInfo )(LPSYSTEM_INFO lpSystemInfo );
33
+ typedef LONG (* PFNRegGetValueA )(HKEY , LPCSTR , LPCSTR , DWORD , LPDWORD , PVOID , LPDWORD );
33
34
34
35
#ifndef CSIDL_MYMUSIC
35
36
# define CSIDL_MYMUSIC 0x000D
@@ -1643,6 +1644,44 @@ XS(w32_GetProcessPrivileges)
1643
1644
XSRETURN (1 );
1644
1645
}
1645
1646
1647
+ XS (w32_IsDeveloperModeEnabled )
1648
+ {
1649
+ dXSARGS ;
1650
+ LONG status ;
1651
+ DWORD val , val_size = sizeof (val );
1652
+ PFNRegGetValueA pfnRegGetValueA ;
1653
+ HMODULE module ;
1654
+
1655
+ if (items )
1656
+ Perl_croak (aTHX_ "usage: Win32::IsDeveloperModeEnabled()" );
1657
+
1658
+ EXTEND (SP , 1 );
1659
+
1660
+ /* developer mode was introduced in Windows 10 */
1661
+ if (g_osver .dwMajorVersion < 10 )
1662
+ XSRETURN_NO ;
1663
+
1664
+ module = GetModuleHandleA ("advapi32.dll" );
1665
+ GETPROC (RegGetValueA );
1666
+ if (!pfnRegGetValueA )
1667
+ XSRETURN_NO ;
1668
+
1669
+ status = pfnRegGetValueA (
1670
+ HKEY_LOCAL_MACHINE ,
1671
+ "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\AppModelUnlock" ,
1672
+ "AllowDevelopmentWithoutDevLicense" ,
1673
+ RRF_RT_REG_DWORD | KEY_WOW64_64KEY ,
1674
+ NULL ,
1675
+ & val ,
1676
+ & val_size
1677
+ );
1678
+
1679
+ if (status == ERROR_SUCCESS && val == 1 )
1680
+ XSRETURN_YES ;
1681
+
1682
+ XSRETURN_NO ;
1683
+ }
1684
+
1646
1685
MODULE = Win32 PACKAGE = Win32
1647
1686
1648
1687
PROTOTYPES : DISABLE
@@ -1713,6 +1752,7 @@ BOOT:
1713
1752
newXS ("Win32::SetConsoleCP" , w32_SetConsoleCP , file );
1714
1753
newXS ("Win32::SetConsoleOutputCP" , w32_SetConsoleOutputCP , file );
1715
1754
newXS ("Win32::GetProcessPrivileges" , w32_GetProcessPrivileges , file );
1755
+ newXS ("Win32::IsDeveloperModeEnabled" , w32_IsDeveloperModeEnabled , file );
1716
1756
#ifdef __CYGWIN__
1717
1757
newXS ("Win32::SetChildShowWindow" , w32_SetChildShowWindow , file );
1718
1758
#endif
0 commit comments