aboutsummaryrefslogtreecommitdiff
path: root/src/libs/dutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/dutil')
-rw-r--r--src/libs/dutil/WixToolset.DUtil/inc/procutil.h4
-rw-r--r--src/libs/dutil/WixToolset.DUtil/procutil.cpp39
2 files changed, 35 insertions, 8 deletions
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(
22 __in HANDLE hProcess, 22 __in HANDLE hProcess,
23 __out BOOL* pfWow64 23 __out BOOL* pfWow64
24 ); 24 );
25HRESULT DAPI ProcNativeMachine(
26 __in HANDLE hProcess,
27 __out USHORT* pusNativeMachine
28 );
25HRESULT DAPI ProcDisableWowFileSystemRedirection( 29HRESULT DAPI ProcDisableWowFileSystemRedirection(
26 __in PROC_FILESYSTEMREDIRECTION* pfsr 30 __in PROC_FILESYSTEMREDIRECTION* pfsr
27 ); 31 );
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(
88 88
89 if (pfnIsWow64Process2) 89 if (pfnIsWow64Process2)
90 { 90 {
91 USHORT pProcessMachine = IMAGE_FILE_MACHINE_UNKNOWN; 91 USHORT usProcessMachine = IMAGE_FILE_MACHINE_UNKNOWN;
92 if (!pfnIsWow64Process2(hProcess, &pProcessMachine, nullptr)) 92 if (!pfnIsWow64Process2(hProcess, &usProcessMachine, nullptr))
93 { 93 {
94 ProcExitWithLastError(hr, "Failed to check WOW64 process - IsWow64Process2."); 94 ProcExitWithLastError(hr, "Failed to check WOW64 process - IsWow64Process2.");
95 } 95 }
96 96
97 if (pProcessMachine != IMAGE_FILE_MACHINE_UNKNOWN) 97 if (usProcessMachine != IMAGE_FILE_MACHINE_UNKNOWN)
98 { 98 {
99 fIsWow64 = TRUE; 99 fIsWow64 = TRUE;
100 } 100 }
101 } 101 }
102 else 102 else
103 { 103 {
104 typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL); 104 typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
105 LPFN_ISWOW64PROCESS pfnIsWow64Process = (LPFN_ISWOW64PROCESS)::GetProcAddress(::GetModuleHandleW(L"kernel32"), "IsWow64Process"); 105 LPFN_ISWOW64PROCESS pfnIsWow64Process = (LPFN_ISWOW64PROCESS)::GetProcAddress(::GetModuleHandleW(L"kernel32"), "IsWow64Process");
106 106
107 if (pfnIsWow64Process) 107 if (pfnIsWow64Process)
108 {
109 if (!pfnIsWow64Process(hProcess, &fIsWow64))
110 { 108 {
109 if (!pfnIsWow64Process(hProcess, &fIsWow64))
110 {
111 ProcExitWithLastError(hr, "Failed to check WOW64 process - IsWow64Process."); 111 ProcExitWithLastError(hr, "Failed to check WOW64 process - IsWow64Process.");
112 } 112 }
113 } 113 }
@@ -119,6 +119,29 @@ LExit:
119 return hr; 119 return hr;
120} 120}
121 121
122extern "C" HRESULT DAPI ProcNativeMachine(
123 __in HANDLE hProcess,
124 __out USHORT* pusNativeMachine
125 )
126{
127 HRESULT hr = S_OK;
128
129 typedef BOOL(WINAPI* LPFN_ISWOW64PROCESS2)(HANDLE, USHORT *, USHORT *);
130 LPFN_ISWOW64PROCESS2 pfnIsWow64Process2 = (LPFN_ISWOW64PROCESS2)::GetProcAddress(::GetModuleHandleW(L"kernel32"), "IsWow64Process2");
131
132 if (pfnIsWow64Process2)
133 {
134 USHORT usProcessMachineUnused = IMAGE_FILE_MACHINE_UNKNOWN;
135 if (!pfnIsWow64Process2(hProcess, &usProcessMachineUnused, pusNativeMachine))
136 {
137 ExitWithLastError(hr, "Failed to check WOW64 process - IsWow64Process2.");
138 }
139 }
140
141LExit:
142 return hr;
143}
144
122extern "C" HRESULT DAPI ProcDisableWowFileSystemRedirection( 145extern "C" HRESULT DAPI ProcDisableWowFileSystemRedirection(
123 __in PROC_FILESYSTEMREDIRECTION* pfsr 146 __in PROC_FILESYSTEMREDIRECTION* pfsr
124 ) 147 )