|
|
|
@ -7942,7 +7942,7 @@ HINSTANCE explorer_ShellExecuteW( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region "Classic Drive Grouping" |
|
|
|
#pragma region "Classic Drive Grouping" |
|
|
|
|
|
|
|
#ifdef _WIN64 |
|
|
|
const struct { DWORD dwDescriptionId; UINT uResourceId; } driveCategoryMap[] = { |
|
|
|
const struct { DWORD dwDescriptionId; UINT uResourceId; } driveCategoryMap[] = { |
|
|
|
{ SHDID_FS_DIRECTORY, 9338 }, //shell32
|
|
|
|
{ SHDID_FS_DIRECTORY, 9338 }, //shell32
|
|
|
|
{ SHDID_COMPUTER_SHAREDDOCS, 9338 }, //shell32
|
|
|
|
{ SHDID_COMPUTER_SHAREDDOCS, 9338 }, //shell32
|
|
|
|
@ -8168,7 +8168,7 @@ HRESULT(STDMETHODCALLTYPE *shell32_DriveTypeCategorizer_CreateInstanceFunc)(IUnk |
|
|
|
|
|
|
|
|
|
|
|
HRESULT shell32_DriveTypeCategorizer_CreateInstanceHook(IUnknown* pUnkOuter, REFIID riid, void** ppvObject) |
|
|
|
HRESULT shell32_DriveTypeCategorizer_CreateInstanceHook(IUnknown* pUnkOuter, REFIID riid, void** ppvObject) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (IsEqualIID(riid, &IID_ICategorizer)) |
|
|
|
if (bUseClassicDriveGrouping && IsEqualIID(riid, &IID_ICategorizer)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
EPCategorizer* epCategorizer = (EPCategorizer*) malloc(sizeof(EPCategorizer)); |
|
|
|
EPCategorizer* epCategorizer = (EPCategorizer*) malloc(sizeof(EPCategorizer)); |
|
|
|
epCategorizer->categorizer = &EPCategorizer_categorizerVtbl; |
|
|
|
epCategorizer->categorizer = &EPCategorizer_categorizerVtbl; |
|
|
|
@ -8200,6 +8200,7 @@ HRESULT ExplorerFrame_CoCreateInstanceHook(REFCLSID rclsid, LPUNKNOWN pUnkOuter, |
|
|
|
} |
|
|
|
} |
|
|
|
return CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv); |
|
|
|
return CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
#pragma endregion |
|
|
|
#pragma endregion |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -9830,6 +9831,7 @@ DWORD Inject(BOOL bIsExplorer) |
|
|
|
hShell32 = GetModuleHandleW(L"shell32.dll"); |
|
|
|
hShell32 = GetModuleHandleW(L"shell32.dll"); |
|
|
|
if (hShell32) |
|
|
|
if (hShell32) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
// Patch ribbon to handle redirects to classic CPLs
|
|
|
|
HRESULT(*SHELL32_Create_IEnumUICommand)(IUnknown*, int*, int, IUnknown**) = GetProcAddress(hShell32, (LPCSTR)0x2E8); |
|
|
|
HRESULT(*SHELL32_Create_IEnumUICommand)(IUnknown*, int*, int, IUnknown**) = GetProcAddress(hShell32, (LPCSTR)0x2E8); |
|
|
|
if (SHELL32_Create_IEnumUICommand) |
|
|
|
if (SHELL32_Create_IEnumUICommand) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -9862,13 +9864,11 @@ DWORD Inject(BOOL bIsExplorer) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (bUseClassicDriveGrouping) |
|
|
|
// Allow clasic drive groupings in This PC
|
|
|
|
{ |
|
|
|
|
|
|
|
HRESULT(*SHELL32_DllGetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID* ppv) = GetProcAddress(hShell32, "DllGetClassObject"); |
|
|
|
HRESULT(*SHELL32_DllGetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID* ppv) = GetProcAddress(hShell32, "DllGetClassObject"); |
|
|
|
|
|
|
|
|
|
|
|
if (SHELL32_DllGetClassObject) |
|
|
|
if (SHELL32_DllGetClassObject) |
|
|
|
{ |
|
|
|
{ |
|
|
|
IClassFactory* pClassFactory; |
|
|
|
IClassFactory* pClassFactory = NULL; |
|
|
|
SHELL32_DllGetClassObject(&CLSID_DriveTypeCategorizer, &IID_IClassFactory, &pClassFactory); |
|
|
|
SHELL32_DllGetClassObject(&CLSID_DriveTypeCategorizer, &IID_IClassFactory, &pClassFactory); |
|
|
|
|
|
|
|
|
|
|
|
if (pClassFactory) |
|
|
|
if (pClassFactory) |
|
|
|
@ -9893,7 +9893,6 @@ DWORD Inject(BOOL bIsExplorer) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
printf("Setup shell32 functions done\n"); |
|
|
|
printf("Setup shell32 functions done\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|