Browse Source

Explorer: Fixed a crash at startup in `sndvolsso.dll` on OS build 22567+ (.28)

pull/996/head
Valentin Radu 4 years ago
parent
commit
faaddb9d2d
  1. 35
      ExplorerPatcher/dllmain.c

35
ExplorerPatcher/dllmain.c

@ -2885,6 +2885,19 @@ BOOL sndvolsso_TrackPopupMenuExHook(
} }
return b; return b;
} }
void PatchSndvolsso()
{
HANDLE hSndvolsso = LoadLibraryW(L"sndvolsso.dll");
VnPatchIAT(hSndvolsso, "user32.dll", "TrackPopupMenuEx", sndvolsso_TrackPopupMenuExHook);
VnPatchIAT(hSndvolsso, "api-ms-win-core-registry-l1-1-0.dll", "RegGetValueW", sndvolsso_RegGetValueW);
#ifdef USE_PRIVATE_INTERFACES
if (bSkinIcons)
{
VnPatchIAT(hSndvolsso, "user32.dll", "LoadImageW", SystemTray_LoadImageWHook);
}
#endif
printf("Setup sndvolsso functions done\n");
}
long long stobject_TrackPopupMenuExElapsed = 0; long long stobject_TrackPopupMenuExElapsed = 0;
BOOL stobject_TrackPopupMenuExHook( BOOL stobject_TrackPopupMenuExHook(
HMENU hMenu, HMENU hMenu,
@ -4922,6 +4935,10 @@ DWORD SignalShellReady(DWORD wait)
printf("Started \"Signal shell ready\" thread.\n"); printf("Started \"Signal shell ready\" thread.\n");
//UpdateStartMenuPositioning(MAKELPARAM(TRUE, TRUE)); //UpdateStartMenuPositioning(MAKELPARAM(TRUE, TRUE));
RTL_OSVERSIONINFOW rovi;
ZeroMemory(&rovi, sizeof(RTL_OSVERSIONINFOW));
VnGetOSVersion(&rovi);
while (!wait && TRUE) while (!wait && TRUE)
{ {
HWND hShell_TrayWnd = FindWindowEx( HWND hShell_TrayWnd = FindWindowEx(
@ -4966,6 +4983,10 @@ DWORD SignalShellReady(DWORD wait)
SetEvent(hEvent); SetEvent(hEvent);
} }
SetEvent(hCanStartSws); SetEvent(hCanStartSws);
if (bOldTaskbar && rovi.dwBuildNumber >= 22567)
{
PatchSndvolsso();
}
printf("Ended \"Signal shell ready\" thread.\n"); printf("Ended \"Signal shell ready\" thread.\n");
return 0; return 0;
@ -8238,6 +8259,10 @@ DWORD Inject(BOOL bIsExplorer)
); );
#endif #endif
RTL_OSVERSIONINFOW rovi;
ZeroMemory(&rovi, sizeof(RTL_OSVERSIONINFOW));
VnGetOSVersion(&rovi);
int rv; int rv;
if (bIsExplorer) if (bIsExplorer)
@ -8768,16 +8793,10 @@ DWORD Inject(BOOL bIsExplorer)
HANDLE hSndvolsso = LoadLibraryW(L"sndvolsso.dll"); if (rovi.dwBuildNumber < 22567)
VnPatchIAT(hSndvolsso, "user32.dll", "TrackPopupMenuEx", sndvolsso_TrackPopupMenuExHook);
VnPatchIAT(hSndvolsso, "api-ms-win-core-registry-l1-1-0.dll", "RegGetValueW", sndvolsso_RegGetValueW);
#ifdef USE_PRIVATE_INTERFACES
if (bSkinIcons)
{ {
VnPatchIAT(hSndvolsso, "user32.dll", "LoadImageW", SystemTray_LoadImageWHook); PatchSndvolsso();
} }
#endif
printf("Setup sndvolsso functions done\n");

Loading…
Cancel
Save