Sfoglia il codice sorgente

win-capture: Use GetSytemDirectory instead of SH*

Instead of using shell functions to get the windows system directory,
use the kernel32 functions (GetSystemDirectory and
GetSystemWow64Directory).  Reduces a bit of unnecessary overhead.
jp9000 10 anni fa
parent
commit
b4597218f0

+ 3 - 5
plugins/win-capture/graphics-hook/graphics-hook.c

@@ -1,6 +1,5 @@
 #define _CRT_SECURE_NO_WARNINGS
 #include <windows.h>
-#include <shlobj.h>
 #include <psapi.h>
 #include "graphics-hook.h"
 #include "../obfuscate.h"
@@ -139,10 +138,9 @@ static inline bool init_mutexes(void)
 
 static inline bool init_system_path(void)
 {
-	HRESULT hr = SHGetFolderPathA(NULL, CSIDL_SYSTEM, NULL,
-			SHGFP_TYPE_CURRENT, system_path);
-	if (hr != S_OK) {
-		hlog("Failed to get windows system path: %08lX", hr);
+	UINT ret = GetSystemDirectoryA(system_path, MAX_PATH);
+	if (!ret) {
+		hlog("Failed to get windows system path: %lu", GetLastError());
 		return false;
 	}
 

+ 9 - 6
plugins/win-capture/load-graphics-offsets.c

@@ -7,7 +7,6 @@
 #include <util/pipe.h>
 
 #include <windows.h>
-#include <shlobj.h>
 #include "graphics-hook-info.h"
 
 extern struct graphics_offsets offsets32;
@@ -98,12 +97,16 @@ static bool get_32bit_system_dll_ver(const wchar_t *system_lib,
 		struct win_version_info *ver)
 {
 	wchar_t path[MAX_PATH];
-
-	HRESULT hr = SHGetFolderPathW(NULL, CSIDL_SYSTEMX86, NULL,
-			SHGFP_TYPE_CURRENT, path);
-	if (hr != S_OK) {
+	UINT ret;
+
+#ifdef _WIN64
+	ret = GetSystemWow64DirectoryW(path, MAX_PATH);
+#else
+	ret = GetSystemDirectoryW(path, MAX_PATH);
+#endif
+	if (!ret) {
 		blog(LOG_ERROR, "Failed to get windows 32bit system path: "
-		                "%08lX", hr);
+		                "%lu", GetLastError());
 		return false;
 	}