From 495370ff9311d406da9c043cd208ce836a0303ff Mon Sep 17 00:00:00 2001 From: Eric StJohn Date: Mon, 30 Aug 2021 15:26:42 -0700 Subject: Add NativeMachine to Burn and WIX_NATIVE_MACHINE to UtilExtension --- src/libs/dutil/WixToolset.DUtil/inc/procutil.h | 4 +++ src/libs/dutil/WixToolset.DUtil/procutil.cpp | 39 ++++++++++++++++++++------ 2 files changed, 35 insertions(+), 8 deletions(-) (limited to 'src/libs') diff --git a/src/libs/dutil/WixToolset.DUtil/inc/procutil.h b/src/libs/dutil/WixToolset.DUtil/inc/procutil.h index 00f3f358..4f49313b 100644 --- a/src/libs/dutil/WixToolset.DUtil/inc/procutil.h +++ b/src/libs/dutil/WixToolset.DUtil/inc/procutil.h @@ -22,6 +22,10 @@ HRESULT DAPI ProcWow64( __in HANDLE hProcess, __out BOOL* pfWow64 ); +HRESULT DAPI ProcNativeMachine( + __in HANDLE hProcess, + __out USHORT* pusNativeMachine + ); HRESULT DAPI ProcDisableWowFileSystemRedirection( __in PROC_FILESYSTEMREDIRECTION* pfsr ); diff --git a/src/libs/dutil/WixToolset.DUtil/procutil.cpp b/src/libs/dutil/WixToolset.DUtil/procutil.cpp index 6bfe5017..5cd067f0 100644 --- a/src/libs/dutil/WixToolset.DUtil/procutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/procutil.cpp @@ -88,26 +88,26 @@ extern "C" HRESULT DAPI ProcWow64( if (pfnIsWow64Process2) { - USHORT pProcessMachine = IMAGE_FILE_MACHINE_UNKNOWN; - if (!pfnIsWow64Process2(hProcess, &pProcessMachine, nullptr)) + USHORT usProcessMachine = IMAGE_FILE_MACHINE_UNKNOWN; + if (!pfnIsWow64Process2(hProcess, &usProcessMachine, nullptr)) { ProcExitWithLastError(hr, "Failed to check WOW64 process - IsWow64Process2."); } - if (pProcessMachine != IMAGE_FILE_MACHINE_UNKNOWN) + if (usProcessMachine != IMAGE_FILE_MACHINE_UNKNOWN) { fIsWow64 = TRUE; } } else { - typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL); - LPFN_ISWOW64PROCESS pfnIsWow64Process = (LPFN_ISWOW64PROCESS)::GetProcAddress(::GetModuleHandleW(L"kernel32"), "IsWow64Process"); + typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL); + LPFN_ISWOW64PROCESS pfnIsWow64Process = (LPFN_ISWOW64PROCESS)::GetProcAddress(::GetModuleHandleW(L"kernel32"), "IsWow64Process"); - if (pfnIsWow64Process) - { - if (!pfnIsWow64Process(hProcess, &fIsWow64)) + if (pfnIsWow64Process) { + if (!pfnIsWow64Process(hProcess, &fIsWow64)) + { ProcExitWithLastError(hr, "Failed to check WOW64 process - IsWow64Process."); } } @@ -119,6 +119,29 @@ LExit: return hr; } +extern "C" HRESULT DAPI ProcNativeMachine( + __in HANDLE hProcess, + __out USHORT* pusNativeMachine + ) +{ + HRESULT hr = S_OK; + + typedef BOOL(WINAPI* LPFN_ISWOW64PROCESS2)(HANDLE, USHORT *, USHORT *); + LPFN_ISWOW64PROCESS2 pfnIsWow64Process2 = (LPFN_ISWOW64PROCESS2)::GetProcAddress(::GetModuleHandleW(L"kernel32"), "IsWow64Process2"); + + if (pfnIsWow64Process2) + { + USHORT usProcessMachineUnused = IMAGE_FILE_MACHINE_UNKNOWN; + if (!pfnIsWow64Process2(hProcess, &usProcessMachineUnused, pusNativeMachine)) + { + ExitWithLastError(hr, "Failed to check WOW64 process - IsWow64Process2."); + } + } + +LExit: + return hr; +} + extern "C" HRESULT DAPI ProcDisableWowFileSystemRedirection( __in PROC_FILESYSTEMREDIRECTION* pfsr ) -- cgit v1.2.3-55-g6feb