Can't retrieve registry value size
- Dominant language
- Haskell
- Stars
- 101
- Forks
- 65
- PR merge metrics
- No merged PRs in 30d
Description
I can't retrieve registry value size. This is needed to be able to provide a buffer of the right size. See function here: https://learn.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regqueryvalueexa
## Current Behavior
We can specify the buffer size (Int):
```
regQueryValueEx :: HKEY -> String -> LPBYTE -> Int -> IO RegValueType
regQueryValueEx key name value value_len =
withForeignPtr key $ \ p_key ->
withTString name $ \ c_name ->
alloca $ \ p_ty ->
with (fromIntegral value_len) $ \ p_value_len -> do
failUnlessSuccess "RegQueryValueEx" $
c_RegQueryValueEx p_key c_name nullPtr p_ty value p_value_len
peek p_ty
foreign import WINDOWS_CCONV unsafe "windows.h RegQueryValueExW"
c_RegQueryValueEx :: PKEY -> LPCTSTR -> Ptr DWORD -> Ptr DWORD -> LPBYTE -> Ptr DWORD -> IO ErrCode
```
But it isn't returned. I need to call the function once with 0 to get the required buffer size, the allocate the buffer, and call the function again. Perhaps something like:
```
regQueryValueEx' :: HKEY -> String -> LPBYTE -> Int -> IO (Int, RegValueType)
regQueryValueEx' key name value value_len =
withForeignPtr key $ \ p_key ->
withTString name $ \ c_name ->
alloca $ \ p_ty ->
with (fromIntegral value_len) $ \ p_value_len -> do
failUnlessSuccess "RegQueryValueEx" $
c_RegQueryValueEx p_key c_name nullPtr p_ty value p_value_len
(,) <$> (fromIntegral <$> peek p_value_len) <*> peek p_ty
foreign import ccall unsafe "windows.h RegQueryValueExW"
c_RegQueryValueEx :: PKEY -> LPCTSTR -> Ptr DWORD -> Ptr DWORD -> LPBYTE -> Ptr DWORD -> IO ErrCode
```
## Your Environment
* Version used: Win32-2.13.2.1
* Operating System and version: Windows 10
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.