@@ -52,6 +52,7 @@ class KernelHooks
5252 inline static Kernel32Proxy::PFN_LoadLibraryExA o_K32_LoadLibraryExA = nullptr ;
5353 inline static Kernel32Proxy::PFN_LoadLibraryExW o_K32_LoadLibraryExW = nullptr ;
5454 inline static Kernel32Proxy::PFN_GetProcAddress o_K32_GetProcAddress = nullptr ;
55+ inline static Kernel32Proxy::PFN_GetModuleHandleA o_K32_GetModuleHandleA = nullptr ;
5556 inline static Kernel32Proxy::PFN_GetFileAttributesW o_K32_GetFileAttributesW = nullptr ;
5657 inline static Kernel32Proxy::PFN_CreateFileW o_K32_CreateFileW = nullptr ;
5758
@@ -141,13 +142,13 @@ class KernelHooks
141142
142143 // sl.interposer.dll
143144 if (Config::Instance ()->FGType .value_or_default () == FGType::Nukems &&
144- CheckDllName (&lcaseLibName, &streamlineNames ))
145+ CheckDllName (&lcaseLibName, &slInterposerNames ))
145146 {
146147 auto streamlineModule = KernelBaseProxy::LoadLibraryExA_ ()(lpLibFullPath, NULL , 0 );
147148
148149 if (streamlineModule != nullptr )
149150 {
150- hookStreamline (streamlineModule);
151+ StreamlineHooks::hookInterposer (streamlineModule);
151152 }
152153 else
153154 {
@@ -157,6 +158,40 @@ class KernelHooks
157158 return streamlineModule;
158159 }
159160
161+ // sl.dlss.dll
162+ if (CheckDllName (&lcaseLibName, &slDlssNames))
163+ {
164+ auto dlssModule = KernelBaseProxy::LoadLibraryExA_ ()(lpLibFullPath, NULL , 0 );
165+
166+ if (dlssModule != nullptr )
167+ {
168+ StreamlineHooks::hookDlss (dlssModule);
169+ }
170+ else
171+ {
172+ LOG_ERROR (" Trying to load dll: {}" , lcaseLibName);
173+ }
174+
175+ return dlssModule;
176+ }
177+
178+ // sl.dlss_g.dll
179+ if (CheckDllName (&lcaseLibName, &slDlssgNames))
180+ {
181+ auto dlssgModule = KernelBaseProxy::LoadLibraryExA_ ()(lpLibFullPath, NULL , 0 );
182+
183+ if (dlssgModule != nullptr )
184+ {
185+ StreamlineHooks::hookDlssg (dlssgModule);
186+ }
187+ else
188+ {
189+ LOG_ERROR (" Trying to load dll: {}" , lcaseLibName);
190+ }
191+
192+ return dlssgModule;
193+ }
194+
160195 // nvngx_dlss
161196 if (Config::Instance ()->DLSSEnabled .value_or_default () && Config::Instance ()->NVNGX_DLSS_Library .has_value () &&
162197 CheckDllName (&lcaseLibName, &nvngxDlssNames))
@@ -529,13 +564,13 @@ class KernelHooks
529564
530565 // sl.interposer.dll
531566 if (Config::Instance ()->FGType .value_or_default () == FGType::Nukems &&
532- CheckDllNameW (&lcaseLibName, &streamlineNamesW ))
567+ CheckDllNameW (&lcaseLibName, &slInterposerNamesW ))
533568 {
534569 auto streamlineModule = KernelBaseProxy::LoadLibraryExW_ ()(lpLibFullPath, NULL , 0 );
535570
536571 if (streamlineModule != nullptr )
537572 {
538- hookStreamline (streamlineModule);
573+ StreamlineHooks::hookInterposer (streamlineModule);
539574 }
540575 else
541576 {
@@ -545,6 +580,40 @@ class KernelHooks
545580 return streamlineModule;
546581 }
547582
583+ // sl.dlss.dll
584+ if (CheckDllNameW (&lcaseLibName, &slDlssNamesW))
585+ {
586+ auto dlssModule = KernelBaseProxy::LoadLibraryExW_ ()(lpLibFullPath, NULL , 0 );
587+
588+ if (dlssModule != nullptr )
589+ {
590+ StreamlineHooks::hookDlss (dlssModule);
591+ }
592+ else
593+ {
594+ LOG_ERROR (" Trying to load dll: {}" , lcaseLibNameA);
595+ }
596+
597+ return dlssModule;
598+ }
599+
600+ // sl.dlss_g.dll
601+ if (CheckDllNameW (&lcaseLibName, &slDlssgNamesW))
602+ {
603+ auto dlssgModule = KernelBaseProxy::LoadLibraryExW_ ()(lpLibFullPath, NULL , 0 );
604+
605+ if (dlssgModule != nullptr )
606+ {
607+ StreamlineHooks::hookDlssg (dlssgModule);
608+ }
609+ else
610+ {
611+ LOG_ERROR (" Trying to load dll: {}" , lcaseLibNameA);
612+ }
613+
614+ return dlssgModule;
615+ }
616+
548617 if (Config::Instance ()->DisableOverlays .value_or_default () && CheckDllNameW (&lcaseLibName, &blockOverlayNamesW))
549618 {
550619 LOG_DEBUG (" Blocking overlay dll: {}" , wstring_to_string (lcaseLibName));
@@ -1546,6 +1615,18 @@ class KernelHooks
15461615 return o_K32_GetProcAddress (hModule, lpProcName);
15471616 }
15481617
1618+ static HMODULE hk_K32_GetModuleHandleA (LPCSTR lpModuleName)
1619+ {
1620+ if (lpModuleName != NULL && strcmp (lpModuleName, " nvngx_dlssg.dll" ) == 0 )
1621+ {
1622+ LOG_TRACE (" Trying to get module handle of {}, caller: {}" , lpModuleName,
1623+ Util::WhoIsTheCaller (_ReturnAddress ()));
1624+ return dllModule;
1625+ }
1626+
1627+ return o_K32_GetModuleHandleA (lpModuleName);
1628+ }
1629+
15491630 static FARPROC hk_KB_GetProcAddress (HMODULE hModule, LPCSTR lpProcName)
15501631 {
15511632 if ((size_t ) lpProcName < 0x000000000000F000 )
@@ -1660,6 +1741,7 @@ class KernelHooks
16601741 o_K32_LoadLibraryExA = Kernel32Proxy::Hook_LoadLibraryExA (hk_K32_LoadLibraryExA);
16611742 o_K32_LoadLibraryExW = Kernel32Proxy::Hook_LoadLibraryExW (hk_K32_LoadLibraryExW);
16621743 o_K32_GetProcAddress = Kernel32Proxy::Hook_GetProcAddress (hk_K32_GetProcAddress);
1744+ o_K32_GetModuleHandleA = Kernel32Proxy::Hook_GetModuleHandleA (hk_K32_GetModuleHandleA);
16631745 o_K32_GetFileAttributesW = Kernel32Proxy::Hook_GetFileAttributesW (hk_K32_GetFileAttributesW);
16641746 o_K32_CreateFileW = Kernel32Proxy::Hook_CreateFileW (hk_K32_CreateFileW);
16651747 }
0 commit comments