Win32 2.7.0.0 → 2.8.0.0
raw patch · 6 files changed
+109/−23 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- System.Win32.Process: sYNCHORNIZE :: ProcessAccessRights
+ System.Win32.Registry: c_RegGetValue :: PKEY -> LPCTSTR -> LPCTSTR -> DWORD -> LPDWORD -> LPVOID -> LPDWORD -> IO ErrCode
+ System.Win32.Registry: rRF_NOEXPAND :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_ANY :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_DWORD :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_QWORD :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_REG_BINARY :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_REG_DWORD :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_REG_EXPAND_SZ :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_REG_MULTI_SZ :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_REG_NONE :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_REG_QWORD :: RegTypeRestriction
+ System.Win32.Registry: rRF_RT_REG_SZ :: RegTypeRestriction
+ System.Win32.Registry: rRF_SUBKEY_WOW6432KEY :: RegTypeRestriction
+ System.Win32.Registry: rRF_SUBKEY_WOW6464KEY :: RegTypeRestriction
+ System.Win32.Registry: rRF_ZEROONFAILURE :: RegTypeRestriction
+ System.Win32.Registry: regGetValue :: HKEY -> Maybe String -> Maybe String -> RegTypeRestriction -> Maybe LPDWORD -> Maybe LPVOID -> Maybe LPDWORD -> IO ()
+ System.Win32.Registry: regQueryDefaultValue :: HKEY -> String -> IO String
+ System.Win32.Registry: type RegTypeRestriction = DWORD
- System.Win32.Registry: regQueryValue :: HKEY -> String -> IO String
+ System.Win32.Registry: regQueryValue :: HKEY -> Maybe String -> IO String
- System.Win32.Registry: regQueryValueKey :: HKEY -> String -> IO String
+ System.Win32.Registry: regQueryValueKey :: HKEY -> Maybe String -> IO String
- System.Win32.Types: nullPtr :: Ptr a
+ System.Win32.Types: nullPtr :: () => Ptr a
Files
- System/Win32/Automation/Input/Mouse.hsc +1/−1
- System/Win32/Process.hsc +2/−3
- System/Win32/Registry.hsc +58/−15
- Win32.cabal +4/−4
- changelog.md +12/−0
- include/winreg_compat.h +32/−0
System/Win32/Automation/Input/Mouse.hsc view
@@ -36,7 +36,7 @@ alignment _ = #alignment MOUSEINPUT poke buf input = do (#poke MOUSEINPUT, dx) buf (dx input) - (#poke MOUSEINPUT, dx) buf (dx input) + (#poke MOUSEINPUT, dy) buf (dy input) (#poke MOUSEINPUT, mouseData) buf (mouseData input) (#poke MOUSEINPUT, dwFlags) buf (dwFlags input) (#poke MOUSEINPUT, time) buf (time input)
System/Win32/Process.hsc view
@@ -54,7 +54,6 @@ , pROCESS_VM_OPERATION = PROCESS_VM_OPERATION , pROCESS_VM_READ = PROCESS_VM_READ , pROCESS_VM_WRITE = PROCESS_VM_WRITE- , sYNCHORNIZE = SYNCHRONIZE } foreign import WINDOWS_CCONV unsafe "windows.h OpenProcess"@@ -71,7 +70,7 @@ getProcessId h = failIfZero "GetProcessId" $ c_GetProcessId h foreign import WINDOWS_CCONV unsafe "windows.h GetCurrentProcess"- c_GetCurrentProcess :: IO ProcessHandle + c_GetCurrentProcess :: IO ProcessHandle foreign import WINDOWS_CCONV unsafe "windows.h GetCurrentProcessId" c_GetCurrentProcessId :: IO ProcessId@@ -105,7 +104,7 @@ } {- , tH32CS_SNAPGETALLMODS = TH32CS_GETALLMODS- , tH32CS_SNAPNOHEAPS = TH32CS_SNAPNOHEAPS + , tH32CS_SNAPNOHEAPS = TH32CS_SNAPNOHEAPS -} foreign import WINDOWS_CCONV unsafe "tlhelp32.h CreateToolhelp32Snapshot"
System/Win32/Registry.hsc view
@@ -39,12 +39,14 @@ , regOpenKey -- :: HKEY -> String -> IO HKEY , regOpenKeyEx -- :: HKEY -> String -> REGSAM -> IO HKEY , regQueryInfoKey -- :: HKEY -> IO RegInfoKey- , regQueryValue -- :: HKEY -> String -> IO String- , regQueryValueKey -- :: HKEY -> String -> IO String+ , regQueryValue -- :: HKEY -> Maybe String -> IO String+ , regQueryDefaultValue -- :: HKEY -> String -> IO String , regQueryValueEx -- :: HKEY -> String -> Addr -> Int -> IO RegValueType , regReplaceKey -- :: HKEY -> Maybe String -> String -> String -> IO () , regRestoreKey -- :: HKEY -> String -> RegRestoreFlags -> IO () , regSaveKey -- :: HKEY -> String -> Maybe LPSECURITY_ATTRIBUTES -> IO ()+ , regGetValue -- :: HKEY -> Maybe String -> Maybe String -> RegTypeRestriction+ -- -> Maybe LPDWORD -> Maybe LPVOID -> Maybe LPDWORD -> IO () , regSetValue -- :: HKEY -> String -> String -> IO () , regSetValueEx -- :: HKEY -> String -> RegValueType -> LPTSTR -> Int -> IO () , regSetStringValue -- :: HKEY -> String -> String -> IO ()@@ -72,12 +74,13 @@ import System.Win32.Time (FILETIME) import System.Win32.Types (DWORD, ErrCode, HKEY, LPCTSTR, PKEY, withTString) import System.Win32.Types (HANDLE, LONG, LPBYTE, newForeignHANDLE, peekTString)-import System.Win32.Types (LPTSTR, TCHAR, failUnlessSuccess)+import System.Win32.Types (LPTSTR, TCHAR, LPDWORD, LPVOID, failUnlessSuccess) import System.Win32.Types (castUINTPtrToPtr, failUnlessSuccessOr, maybePtr) ##include "windows_cconv.h" #include <windows.h>+#include "winreg_compat.h" #{enum HKEY, (unsafePerformIO . newForeignHANDLE . castUINTPtrToPtr) , hKEY_CLASSES_ROOT = (UINT_PTR)HKEY_CLASSES_ROOT@@ -382,16 +385,25 @@ -- RegQueryMultipleValues :: HKEY -> IO ([VALENT],String) --- RegQueryValue() isn't really that, it just allows you to--- get at the default values of keys, so we provide our own--- (and better!) version of it. If you want RegQueryValue()s--- behaviour, use regQueryValueKey.--regQueryValueKey :: HKEY -> String -> IO String+{-# DEPRECATED regQueryValueKey "Use regQueryValue instead." #-}+regQueryValueKey :: HKEY -> Maybe String -> IO String regQueryValueKey key mb_subkey = withForeignPtr key $ \ p_key ->- withTString mb_subkey $ \ c_subkey ->+ maybeWith withTString mb_subkey $ \ c_subkey -> alloca $ \ p_value_len -> do+ failUnlessSuccess "RegQueryValueKey" $+ c_RegQueryValue p_key c_subkey nullPtr p_value_len+ value_len <- peek p_value_len+ allocaArray0 (fromIntegral value_len) $ \ c_value -> do+ failUnlessSuccess "RegQueryValueKey" $+ c_RegQueryValue p_key c_subkey c_value p_value_len+ peekTString c_value++regQueryValue :: HKEY -> Maybe String -> IO String+regQueryValue key mb_subkey =+ withForeignPtr key $ \ p_key ->+ maybeWith withTString mb_subkey $ \ c_subkey ->+ alloca $ \ p_value_len -> do failUnlessSuccess "RegQueryValue" $ c_RegQueryValue p_key c_subkey nullPtr p_value_len value_len <- peek p_value_len@@ -402,19 +414,21 @@ foreign import WINDOWS_CCONV unsafe "windows.h RegQueryValueW" c_RegQueryValue :: PKEY -> LPCTSTR -> LPTSTR -> Ptr LONG -> IO ErrCode -regQueryValue :: HKEY -> String -> IO String-regQueryValue key mb_subkey =+-- Gets the data associated with the default value of a key (assumed to be of+-- type REG_SZ) using RegQeryValueEx.+regQueryDefaultValue :: HKEY -> String -> IO String+regQueryDefaultValue key mb_subkey = withForeignPtr key $ \ p_key -> withTString mb_subkey $ \ c_subkey -> alloca $ \ p_ty -> alloca $ \ p_value_len -> do- failUnlessSuccess "RegQueryValue" $+ failUnlessSuccess "regQueryDefaultValue" $ c_RegQueryValueEx p_key c_subkey nullPtr p_ty nullPtr p_value_len ty <- peek p_ty- failUnlessSuccess "RegQueryValue" $ return (if ty == rEG_SZ then 0 else 1)+ failUnlessSuccess "regQueryDefaultValue" $ return (if ty == rEG_SZ then 0 else 1) value_len <- peek p_value_len allocaArray0 (fromIntegral value_len) $ \ c_value -> do- failUnlessSuccess "RegQueryValue" $+ failUnlessSuccess "regQueryDefaultValue" $ c_RegQueryValueEx p_key c_subkey nullPtr p_ty c_value p_value_len peekTString (castPtr c_value) @@ -472,6 +486,35 @@ -- endif -- 3.1 compat. - only allows storage of REG_SZ values.++regGetValue :: HKEY -> Maybe String -> Maybe String -> RegTypeRestriction -> Maybe LPDWORD -> Maybe LPVOID -> Maybe LPDWORD -> IO ()+regGetValue key m_subkey m_valuename flags m_type m_value m_size =+ withForeignPtr key $ \ p_key ->+ maybeWith withTString m_subkey $ \ c_subkey ->+ maybeWith withTString m_valuename $ \ c_valuename ->+ failUnlessSuccess "RegGetValue" $+ c_RegGetValue p_key c_subkey c_valuename flags (maybePtr m_type) (maybePtr m_value) (maybePtr m_size)+foreign import WINDOWS_CCONV unsafe "windows.h RegGetValueW"+ c_RegGetValue :: PKEY -> LPCTSTR -> LPCTSTR -> DWORD -> LPDWORD -> LPVOID -> LPDWORD -> IO ErrCode++type RegTypeRestriction = DWORD++#{enum RegTypeRestriction,+ , rRF_RT_ANY = RRF_RT_ANY+ , rRF_RT_DWORD = RRF_RT_DWORD+ , rRF_RT_QWORD = RRF_RT_QWORD+ , rRF_RT_REG_BINARY = RRF_RT_REG_BINARY+ , rRF_RT_REG_DWORD = RRF_RT_REG_DWORD+ , rRF_RT_REG_EXPAND_SZ = RRF_RT_REG_EXPAND_SZ+ , rRF_RT_REG_MULTI_SZ = RRF_RT_REG_MULTI_SZ+ , rRF_RT_REG_NONE = RRF_RT_REG_NONE+ , rRF_RT_REG_QWORD = RRF_RT_REG_QWORD+ , rRF_RT_REG_SZ = RRF_RT_REG_SZ+ , rRF_NOEXPAND = RRF_NOEXPAND+ , rRF_ZEROONFAILURE = RRF_ZEROONFAILURE+ , rRF_SUBKEY_WOW6464KEY = RRF_SUBKEY_WOW6464KEY+ , rRF_SUBKEY_WOW6432KEY = RRF_SUBKEY_WOW6432KEY+ } regSetValue :: HKEY -> String -> String -> IO () regSetValue key subkey value =
Win32.cabal view
@@ -1,5 +1,5 @@ name: Win32-version: 2.7.0.0+version: 2.8.0.0 license: BSD3 license-file: LICENSE author: Alastair Reid, shelarcy, Tamar Christina@@ -13,8 +13,8 @@ build-type: Simple cabal-version: >=1.10 extra-source-files:- include/diatemp.h include/dumpBMP.h include/ellipse.h include/errors.h- include/Win32Aux.h include/win32debug.h include/alignment.h+ include/diatemp.h include/dumpBMP.h include/ellipse.h include/errors.h+ include/Win32Aux.h include/win32debug.h include/alignment.h changelog.md Library@@ -105,7 +105,7 @@ ghc-options: -Wall include-dirs: include includes: "alphablend.h", "diatemp.h", "dumpBMP.h", "ellipse.h", "errors.h", "HsGDI.h", "HsWin32.h", "Win32Aux.h", "win32debug.h", "windows_cconv.h", "WndProc.h", "alignment.h"- install-includes: "HsWin32.h", "HsGDI.h", "WndProc.h", "windows_cconv.h", "alphablend.h", "winternl_compat.h", "winuser_compat.h"+ install-includes: "HsWin32.h", "HsGDI.h", "WndProc.h", "windows_cconv.h", "alphablend.h", "winternl_compat.h", "winuser_compat.h", "winreg_compat.h" c-sources: cbits/HsGDI.c cbits/HsWin32.c
changelog.md view
@@ -1,5 +1,17 @@ # Changelog for [`Win32` package](http://hackage.haskell.org/package/Win32) +## 2.8.0.0 *May 2018*++* Deprecated `regQueryValueKey`. (See #105, #108)+* Updated `regQueryValue` signature (See #108)+* Add `regQueryDefaultValue` (See #108)+* Add `regGetValue` and `RegTypeRestriction` (See #109)+* Remove `sYNCHRONIZE` from System.Win32.Process, use System.Win32.File instead. (See #110)++## 2.7.1.0 *April 2018*++* Fixed `MOUSEINPUT` storable instance. (See #106)+ ## 2.7.0.0 *March 2018* * Fixed `DWORD_PTR` type (See #99)
+ include/winreg_compat.h view
@@ -0,0 +1,32 @@+#ifndef WINREG_COMPAT_H+#define WINREG_COMPAT_H++#if defined(x86_64_HOST_ARCH) || __GLASGOW_HASKELL__ > 708+#+#else+#define RRF_RT_REG_NONE 0x00000001+#define RRF_RT_REG_SZ 0x00000002+#define RRF_RT_REG_EXPAND_SZ 0x00000004+#define RRF_RT_REG_BINARY 0x00000008+#define RRF_RT_REG_DWORD 0x00000010+#define RRF_RT_REG_MULTI_SZ 0x00000020+#define RRF_RT_REG_QWORD 0x00000040++#define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)+#define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)+#define RRF_RT_ANY 0x0000ffff++#define RRF_NOEXPAND 0x10000000+#define RRF_ZEROONFAILURE 0x20000000++#endif++#ifndef RRF_SUBKEY_WOW6464KEY+#define RRF_SUBKEY_WOW6464KEY 0x00010000+#endif++#ifndef RRF_SUBKEY_WOW6432KEY+#define RRF_SUBKEY_WOW6432KEY 0x00020000+#endif++#endif /* WINREG_COMPAT_H */