https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2d8a2944baad1078aa9809...
commit 2d8a2944baad1078aa98097b38d86fb3b72dee01 Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Thu Feb 6 23:14:28 2025 +0100 Commit: Eric Kohl eric.kohl@reactos.org CommitDate: Thu Feb 6 23:14:28 2025 +0100
[SYSSETUP] Add the type library registration to the Register Components task on the process page --- dll/win32/syssetup/globals.h | 9 +++- dll/win32/syssetup/install.c | 25 +++++++++-- dll/win32/syssetup/wizard.c | 104 ++++++++++++++++++++++++++++++------------- 3 files changed, 102 insertions(+), 36 deletions(-)
diff --git a/dll/win32/syssetup/globals.h b/dll/win32/syssetup/globals.h index 85b3f8dea3a..8112102a0b7 100644 --- a/dll/win32/syssetup/globals.h +++ b/dll/win32/syssetup/globals.h @@ -68,10 +68,15 @@ extern HINSTANCE hDllInstance; extern HINF hSysSetupInf; extern ADMIN_INFO AdminInfo;
-BOOL RegisterTypeLibraries (HINF hinf, LPCWSTR szSection); - /* install */
+BOOL +RegisterTypeLibraries( + _In_ PITEMSDATA pItemsData, + _In_ PREGISTRATIONNOTIFY pNotify, + _In_ HINF hinf, + _In_ LPCWSTR szSection); + VOID InstallStartMenuItems( _In_ PITEMSDATA pItemsData); diff --git a/dll/win32/syssetup/install.c b/dll/win32/syssetup/install.c index 61d5da1bc33..4d964fab68c 100644 --- a/dll/win32/syssetup/install.c +++ b/dll/win32/syssetup/install.c @@ -336,11 +336,9 @@ InstallStartMenuItems( INF_STYLE_WIN4, NULL);
-// Steps = SetupGetLineCountW(hShortcutsInf1, L"ShortcutFolders"); Steps = CountShortcuts(hShortcutsInf1, L"ShortcutFolders"); if (hShortcutsInf2 != INVALID_HANDLE_VALUE) Steps += CountShortcuts(hShortcutsInf2, L"ShortcutFolders"); -// Steps += SetupGetLineCountW(hShortcutsInf2, L"ShortcutFolders");
SendMessage(pItemsData->hwndDlg, PM_ITEM_START, 1, (LPARAM)Steps);
@@ -538,7 +536,11 @@ InstallSysSetupInfComponents(VOID)
BOOL -RegisterTypeLibraries(HINF hinf, LPCWSTR szSection) +RegisterTypeLibraries( + _In_ PITEMSDATA pItemsData, + _In_ PREGISTRATIONNOTIFY pNotify, + _In_ HINF hinf, + _In_ LPCWSTR szSection) { INFCONTEXT InfContext; BOOL res; @@ -575,6 +577,15 @@ RegisterTypeLibraries(HINF hinf, LPCWSTR szSection) p = PathAddBackslash(szPath); wcscpy(p, szName);
+ if (pItemsData && pNotify) + { + pNotify->Progress++; + pNotify->CurrentItem = szName; + + DPRINT("RegisterTypeLibraries: Start step %ld\n", pNotify->Progress); + SendMessage(pItemsData->hwndDlg, PM_STEP_START, 0, (LPARAM)pNotify); + } + hmod = LoadLibraryW(szPath); if (hmod == NULL) { @@ -584,6 +595,12 @@ RegisterTypeLibraries(HINF hinf, LPCWSTR szSection)
__wine_register_resources(hmod);
+ if (pItemsData && pNotify) + { + DPRINT("RegisterTypeLibraries: End step %ld\n", pNotify->Progress); + SendMessage(pItemsData->hwndDlg, PM_STEP_END, 0, (LPARAM)pNotify); + } + } while (SetupFindNextLine(&InfContext, &InfContext));
return TRUE; @@ -1073,7 +1090,7 @@ InstallLiveCD(VOID) DPRINT1("SetupInstallFromInfSectionW failed!\n"); }
- RegisterTypeLibraries(hSysSetupInf, L"TypeLibraries"); + RegisterTypeLibraries(NULL, NULL, hSysSetupInf, L"TypeLibraries"); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { diff --git a/dll/win32/syssetup/wizard.c b/dll/win32/syssetup/wizard.c index 4675ff904a9..0345ed14f40 100644 --- a/dll/win32/syssetup/wizard.c +++ b/dll/win32/syssetup/wizard.c @@ -33,6 +33,7 @@ typedef struct _REGISTRATIONDATA ULONG DllCount; ULONG Registered; PVOID DefaultContext; + PREGISTRATIONNOTIFY pNotify; } REGISTRATIONDATA, *PREGISTRATIONDATA;
typedef struct _TIMEZONE_ENTRY @@ -1991,7 +1992,6 @@ RegistrationNotificationProc(PVOID Context, UINT_PTR Param2) { PREGISTRATIONDATA RegistrationData; - REGISTRATIONNOTIFY RegistrationNotify; PSP_REGISTER_CONTROL_STATUSW StatusInfo; UINT MessageID;
@@ -2001,23 +2001,24 @@ RegistrationNotificationProc(PVOID Context, Notification == SPFILENOTIFY_ENDREGISTRATION) { StatusInfo = (PSP_REGISTER_CONTROL_STATUSW) Param1; - RegistrationNotify.CurrentItem = wcsrchr(StatusInfo->FileName, L'\'); - if (RegistrationNotify.CurrentItem == NULL) + RegistrationData->pNotify->CurrentItem = wcsrchr(StatusInfo->FileName, L'\'); + if (RegistrationData->pNotify->CurrentItem == NULL) { - RegistrationNotify.CurrentItem = StatusInfo->FileName; + RegistrationData->pNotify->CurrentItem = StatusInfo->FileName; } else { - RegistrationNotify.CurrentItem++; + RegistrationData->pNotify->CurrentItem++; }
if (Notification == SPFILENOTIFY_STARTREGISTRATION) { DPRINT("Received SPFILENOTIFY_STARTREGISTRATION notification for %S\n", StatusInfo->FileName); -// RegistrationNotify.ErrorMessage = NULL; - RegistrationNotify.Progress = RegistrationData->Registered; - SendMessage(RegistrationData->hwndDlg, PM_STEP_START, 0, (LPARAM)&RegistrationNotify); + RegistrationData->pNotify->Progress = RegistrationData->Registered; + + DPRINT("RegisterDll: Start step %ld\n", RegistrationData->pNotify->Progress); + SendMessage(RegistrationData->hwndDlg, PM_STEP_START, 0, (LPARAM)RegistrationData->pNotify); } else { @@ -2049,13 +2050,13 @@ RegistrationNotificationProc(PVOID Context, break; }
- RegistrationNotify.MessageID = MessageID; - RegistrationNotify.LastError = StatusInfo->Win32Error; + RegistrationData->pNotify->MessageID = MessageID; + RegistrationData->pNotify->LastError = StatusInfo->Win32Error; } else { - RegistrationNotify.MessageID = 0; - RegistrationNotify.LastError = ERROR_SUCCESS; + RegistrationData->pNotify->MessageID = 0; + RegistrationData->pNotify->LastError = ERROR_SUCCESS; }
if (RegistrationData->Registered < RegistrationData->DllCount) @@ -2063,8 +2064,9 @@ RegistrationNotificationProc(PVOID Context, RegistrationData->Registered++; }
- RegistrationNotify.Progress = RegistrationData->Registered; - SendMessage(RegistrationData->hwndDlg, PM_STEP_END, 0, (LPARAM)&RegistrationNotify); + RegistrationData->pNotify->Progress = RegistrationData->Registered; + DPRINT("RegisterDll: End step %ld\n", RegistrationData->pNotify->Progress); + SendMessage(RegistrationData->hwndDlg, PM_STEP_END, 0, (LPARAM)RegistrationData->pNotify); }
return FILEOP_DOIT; @@ -2081,13 +2083,14 @@ RegistrationNotificationProc(PVOID Context, static DWORD RegisterDlls( - PITEMSDATA pItemsData) + _In_ PITEMSDATA pItemsData, + _In_ PREGISTRATIONNOTIFY pNotify) { REGISTRATIONDATA RegistrationData; WCHAR SectionName[512]; INFCONTEXT Context; LONG DllCount = 0; - DWORD LastError = NO_ERROR; + DWORD Error = NO_ERROR;
ZeroMemory(&RegistrationData, sizeof(REGISTRATIONDATA)); RegistrationData.hwndDlg = pItemsData->hwndDlg; @@ -2097,7 +2100,7 @@ RegisterDlls( L"RegisterDlls", &Context)) { DPRINT1("No RegistrationPhase2 section found\n"); - return FALSE; + return GetLastError(); }
if (!SetupGetStringFieldW(&Context, 1, SectionName, @@ -2105,21 +2108,19 @@ RegisterDlls( NULL)) { DPRINT1("Unable to retrieve section name\n"); - return FALSE; + return GetLastError(); }
DllCount = SetupGetLineCountW(hSysSetupInf, SectionName); - DPRINT1("SectionName %S DllCount %ld\n", SectionName, DllCount); + DPRINT("SectionName %S DllCount %ld\n", SectionName, DllCount); if (DllCount < 0) { - SetLastError(STATUS_NOT_FOUND); - return FALSE; + return STATUS_NOT_FOUND; }
RegistrationData.DllCount = (ULONG)DllCount; RegistrationData.DefaultContext = SetupInitDefaultQueueCallback(RegistrationData.hwndDlg); - - SendMessage(pItemsData->hwndDlg, PM_ITEM_START, 0, (LPARAM)RegistrationData.DllCount); + RegistrationData.pNotify = pNotify;
_SEH2_TRY { @@ -2135,21 +2136,66 @@ RegisterDlls( NULL, NULL)) { - LastError = GetLastError(); + Error = GetLastError(); } } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { DPRINT("Catching exception\n"); - LastError = RtlNtStatusToDosError(_SEH2_GetExceptionCode()); + Error = RtlNtStatusToDosError(_SEH2_GetExceptionCode()); } _SEH2_END;
SetupTermDefaultQueueCallback(RegistrationData.DefaultContext);
- SendMessage(pItemsData->hwndDlg, PM_ITEM_END, 0, LastError); + return Error; +}
- return 0; +static +VOID +RegisterComponents( + PITEMSDATA pItemsData) +{ + WCHAR SectionName[512]; + INFCONTEXT Context; + LONG Steps = 0; + DWORD Error = NO_ERROR; + REGISTRATIONNOTIFY Notify; + + ZeroMemory(&Notify, sizeof(Notify)); + + /* Count the 'RegisterDlls' steps */ + if (!SetupFindFirstLineW(hSysSetupInf, L"RegistrationPhase2", + L"RegisterDlls", &Context)) + { + DPRINT1("No RegistrationPhase2 section found\n"); + return; + } + + if (!SetupGetStringFieldW(&Context, 1, SectionName, + ARRAYSIZE(SectionName), + NULL)) + { + DPRINT1("Unable to retrieve section name\n"); + return; + } + + Steps += SetupGetLineCountW(hSysSetupInf, SectionName); + + /* Count the 'TypeLibratries' steps */ + Steps += SetupGetLineCountW(hSysSetupInf, L"TypeLibraries"); + + /* Start the item */ + DPRINT("Register Components: %ld Steps\n", Steps); + SendMessage(pItemsData->hwndDlg, PM_ITEM_START, 0, (LPARAM)Steps); + + Error = RegisterDlls(pItemsData, &Notify); + if (Error == ERROR_SUCCESS) + RegisterTypeLibraries(pItemsData, &Notify, hSysSetupInf, L"TypeLibraries"); + + /* End the item */ + DPRINT("Register Components: done\n"); + SendMessage(pItemsData->hwndDlg, PM_ITEM_END, 0, Error); }
@@ -2166,9 +2212,7 @@ ItemCompletionThread( hwndDlg = pItemsData->hwndDlg;
/* Step 0 - Registering components */ - RegisterDlls(pItemsData); - - RegisterTypeLibraries(hSysSetupInf, L"TypeLibraries"); + RegisterComponents(pItemsData);
/* Step 1 - Installing start menu items */ InstallStartMenuItems(pItemsData);