From 06f6c192ede18f1f79a2de9a3c09d1540942da4a Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Tue, 31 Jan 2017 15:27:15 -0800 Subject: [PATCH] tst: passthrough, passthrough-fuse: WinFspLoad: eliminate RRF_SUBKEY_WOW6432KEY --- doc/WinFsp-Tutorial.asciidoc | 17 +++++++++++------ tst/passthrough-fuse/winposix.c | 25 +++++++++++++++---------- tst/passthrough/passthrough.c | 17 +++++++++++------ 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/doc/WinFsp-Tutorial.asciidoc b/doc/WinFsp-Tutorial.asciidoc index 27dfca5d..b6f4b791 100644 --- a/doc/WinFsp-Tutorial.asciidoc +++ b/doc/WinFsp-Tutorial.asciidoc @@ -85,19 +85,24 @@ static NTSTATUS WinFspLoad(VOID) #endif #define FSP_DLLPATH "bin\\" FSP_DLLNAME - WCHAR PathBuf[MAX_PATH - (sizeof L"" FSP_DLLPATH / sizeof(WCHAR) - 1)]; + WCHAR PathBuf[MAX_PATH]; DWORD Size; + HKEY RegKey; LONG Result; HMODULE Module; Module = LoadLibraryW(L"" FSP_DLLNAME); if (0 == Module) { - Size = sizeof PathBuf; - Result = RegGetValueW( - HKEY_LOCAL_MACHINE, L"Software\\WinFsp", L"InstallDir", - RRF_RT_REG_SZ | 0x00020000/*RRF_SUBKEY_WOW6432KEY*/, - 0, PathBuf, &Size); + Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\WinFsp", + 0, KEY_READ | KEY_WOW64_32KEY, &RegKey); + if (ERROR_SUCCESS == Result) + { + Size = sizeof PathBuf - sizeof L"" FSP_DLLPATH + sizeof(WCHAR); + Result = RegGetValueW(RegKey, 0, L"InstallDir", + RRF_RT_REG_SZ, 0, PathBuf, &Size); + RegCloseKey(RegKey); + } if (ERROR_SUCCESS != Result) return STATUS_OBJECT_NAME_NOT_FOUND; diff --git a/tst/passthrough-fuse/winposix.c b/tst/passthrough-fuse/winposix.c index a46adebc..92bacefb 100644 --- a/tst/passthrough-fuse/winposix.c +++ b/tst/passthrough-fuse/winposix.c @@ -523,7 +523,7 @@ static int maperror(int winerrno) } } -NTSTATUS WinFspLoad(VOID) +static NTSTATUS WinFspLoad(VOID) { #if defined(_WIN64) #define FSP_DLLNAME "winfsp-x64.dll" @@ -532,29 +532,34 @@ NTSTATUS WinFspLoad(VOID) #endif #define FSP_DLLPATH "bin\\" FSP_DLLNAME - WCHAR PathBuf[MAX_PATH - (sizeof L"" FSP_DLLPATH / sizeof(WCHAR) - 1)]; + WCHAR PathBuf[MAX_PATH]; DWORD Size; + HKEY RegKey; LONG Result; HMODULE Module; Module = LoadLibraryW(L"" FSP_DLLNAME); if (0 == Module) { - Size = sizeof PathBuf; - Result = RegGetValueW( - HKEY_LOCAL_MACHINE, L"Software\\WinFsp", L"InstallDir", - RRF_RT_REG_SZ | 0x00020000/*RRF_SUBKEY_WOW6432KEY*/, - 0, PathBuf, &Size); + Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\WinFsp", + 0, KEY_READ | KEY_WOW64_32KEY, &RegKey); + if (ERROR_SUCCESS == Result) + { + Size = sizeof PathBuf - sizeof L"" FSP_DLLPATH + sizeof(WCHAR); + Result = RegGetValueW(RegKey, 0, L"InstallDir", + RRF_RT_REG_SZ, 0, PathBuf, &Size); + RegCloseKey(RegKey); + } if (ERROR_SUCCESS != Result) - return 0xC0000034L/*STATUS_OBJECT_NAME_NOT_FOUND*/; + return STATUS_OBJECT_NAME_NOT_FOUND; RtlCopyMemory(PathBuf + (Size / sizeof(WCHAR) - 1), L"" FSP_DLLPATH, sizeof L"" FSP_DLLPATH); Module = LoadLibraryW(PathBuf); if (0 == Module) - return 0xC0000135L/*STATUS_DLL_NOT_FOUND*/; + return STATUS_DLL_NOT_FOUND; } - return 0/*STATUS_SUCCESS*/; + return STATUS_SUCCESS; #undef FSP_DLLNAME #undef FSP_DLLPATH diff --git a/tst/passthrough/passthrough.c b/tst/passthrough/passthrough.c index a667fca0..bb59d834 100644 --- a/tst/passthrough/passthrough.c +++ b/tst/passthrough/passthrough.c @@ -925,19 +925,24 @@ static NTSTATUS WinFspLoad(VOID) #endif #define FSP_DLLPATH "bin\\" FSP_DLLNAME - WCHAR PathBuf[MAX_PATH - (sizeof L"" FSP_DLLPATH / sizeof(WCHAR) - 1)]; + WCHAR PathBuf[MAX_PATH]; DWORD Size; + HKEY RegKey; LONG Result; HMODULE Module; Module = LoadLibraryW(L"" FSP_DLLNAME); if (0 == Module) { - Size = sizeof PathBuf; - Result = RegGetValueW( - HKEY_LOCAL_MACHINE, L"Software\\WinFsp", L"InstallDir", - RRF_RT_REG_SZ | 0x00020000/*RRF_SUBKEY_WOW6432KEY*/, - 0, PathBuf, &Size); + Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\WinFsp", + 0, KEY_READ | KEY_WOW64_32KEY, &RegKey); + if (ERROR_SUCCESS == Result) + { + Size = sizeof PathBuf - sizeof L"" FSP_DLLPATH + sizeof(WCHAR); + Result = RegGetValueW(RegKey, 0, L"InstallDir", + RRF_RT_REG_SZ, 0, PathBuf, &Size); + RegCloseKey(RegKey); + } if (ERROR_SUCCESS != Result) return STATUS_OBJECT_NAME_NOT_FOUND;