https://git.reactos.org/?p=reactos.git;a=commitdiff;h=dfb43905bbdacc277044b…
commit dfb43905bbdacc277044ba7ded8b7df4d2f741c3
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Mon Nov 25 23:12:13 2024 +0100
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Tue Dec 3 13:13:38 2024 +0100
[FREELDR] peloader.c: Fix PE import binding (#7537)
Use the PE import table's OriginalFirstThunk array when scanning and
resolving imports during DLL binding.
It points to an array of pointer-sized IMAGE_THUNK_DATA structures
which describe the functions being imported. On the other hand, the
FirstThunk points to an array of pointers, whose initial values are
a copy of those pointed to by OriginalFirstThunk, but are replaced
by the actual function pointers determined at runtime, when a DLL
is loaded (see PeLdrpBindImportName() function).
If we were to use the FirstThunk array to find again later the imports
by name or ordinal, we would fail because these are replaced by the
addresses of the corresponding functions.
This fixes loading kdcom.dll from Windows XP x64 with FreeLDR when
testing on ReactOS x64.
```diff
(freeldr\freeldr\lib\peloader.c:498) trace: PeLdrpScanImportAddressTable() ---- Calling PeLdrpBindImportName() in a loop
(freeldr\freeldr\lib\peloader.c:501) trace: *** ThunkName->u1.AddressOfData = 00000000000070F0
(freeldr\freeldr\lib\peloader.c:502) trace: *** ThunkData->u1.AddressOfData = 0000000000573780
(freeldr\freeldr\lib\peloader.c:209) trace: !!! ExportDirectory->NumberOfNames 1504
-(freeldr\freeldr\lib\peloader.c:210) trace: !!! ImportHint 0 - ExportName 'CcCanIWrite' - ImportDataName ''
+(freeldr\freeldr\lib\peloader.c:210) trace: !!! ImportHint 282 - ExportName 'HalPrivateDispatchTable' - ImportDataName 'HalPrivateDispatchTable'
....
-(freeldr\freeldr\lib\peloader.c:268) err: Did not find export ''!
-(freeldr\freeldr\lib\peloader.c:709) err: PeLdrpScanImportAddressTable() failed: ImportName = 'ntoskrnl.exe', DirectoryPath = 'multi(0)disk(0)rdisk(0)partition(2)\ReactOS\system32\'
```
('-': lines before the fix; '+': lines after the fix)
Code has been adapted based from the following functions:
ntdll/ldr/ldrpe.c!LdrpSnapThunk() and LdrpSnapIAT()
ntoskrnl/mm/ARM3/sysldr.c!MiSnapThunk() and MiResolveImageReferences()
References:
https://devblogs.microsoft.com/oldnewthing/20231129-00/?p=109077https://devblogs.microsoft.com/oldnewthing/20231130-00/?p=109084https://stackoverflow.com/questions/42413937/why-pe-need-original-first-thu…
---
boot/freeldr/freeldr/lib/peloader.c | 62 +++++++++++++++++++++----------------
1 file changed, 36 insertions(+), 26 deletions(-)
diff --git a/boot/freeldr/freeldr/lib/peloader.c b/boot/freeldr/freeldr/lib/peloader.c
index 2096792c05e..06bcf41720b 100644
--- a/boot/freeldr/freeldr/lib/peloader.c
+++ b/boot/freeldr/freeldr/lib/peloader.c
@@ -139,6 +139,7 @@ PeLdrpBindImportName(
_Inout_ PLIST_ENTRY ModuleListHead,
_In_ PVOID DllBase,
_In_ PVOID ImageBase,
+ _In_ PIMAGE_THUNK_DATA ThunkName,
_Inout_ PIMAGE_THUNK_DATA ThunkData,
_In_ PIMAGE_EXPORT_DIRECTORY ExportDirectory,
_In_ ULONG ExportSize,
@@ -155,8 +156,9 @@ PeLdrpBindImportName(
PCHAR ExportName, ForwarderName;
BOOLEAN Success;
- //TRACE("PeLdrpBindImportName(): DllBase 0x%p, ImageBase 0x%p, ThunkData 0x%p, ExportDirectory 0x%p, ExportSize %d, ProcessForwards 0x%X\n",
- // DllBase, ImageBase, ThunkData, ExportDirectory, ExportSize, ProcessForwards);
+ //TRACE("PeLdrpBindImportName(): "
+ // "DllBase 0x%p, ImageBase 0x%p, ThunkName 0x%p, ThunkData 0x%p, ExportDirectory 0x%p, ExportSize %d, ProcessForwards 0x%X\n",
+ // DllBase, ImageBase, ThunkName, ThunkData, ExportDirectory, ExportSize, ProcessForwards);
/* Check passed DllBase */
if (!DllBase)
@@ -166,13 +168,14 @@ PeLdrpBindImportName(
}
/* Convert all non-critical pointers to PA from VA */
+ ThunkName = VaToPa(ThunkName);
ThunkData = VaToPa(ThunkData);
/* Is the reference by ordinal? */
- if (IMAGE_SNAP_BY_ORDINAL(ThunkData->u1.Ordinal) && !ProcessForwards)
+ if (IMAGE_SNAP_BY_ORDINAL(ThunkName->u1.Ordinal) && !ProcessForwards)
{
/* Yes, calculate the ordinal */
- Ordinal = (ULONG)(IMAGE_ORDINAL(ThunkData->u1.Ordinal) - (UINT32)ExportDirectory->Base);
+ Ordinal = (ULONG)(IMAGE_ORDINAL(ThunkName->u1.Ordinal) - (UINT32)ExportDirectory->Base);
//TRACE("PeLdrpBindImportName(): Ordinal %d\n", Ordinal);
}
else
@@ -181,14 +184,14 @@ PeLdrpBindImportName(
if (!ProcessForwards)
{
/* AddressOfData in thunk entry will become a virtual address (from relative) */
- //TRACE("PeLdrpBindImportName(): ThunkData->u1.AOD was %p\n", ThunkData->u1.AddressOfData);
- ThunkData->u1.AddressOfData =
- (ULONG_PTR)RVA(ImageBase, ThunkData->u1.AddressOfData);
- //TRACE("PeLdrpBindImportName(): ThunkData->u1.AOD became %p\n", ThunkData->u1.AddressOfData);
+ //TRACE("PeLdrpBindImportName(): ThunkName->u1.AOD was %p\n", ThunkName->u1.AddressOfData);
+ ThunkName->u1.AddressOfData =
+ (ULONG_PTR)RVA(ImageBase, ThunkName->u1.AddressOfData);
+ //TRACE("PeLdrpBindImportName(): ThunkName->u1.AOD became %p\n", ThunkName->u1.AddressOfData);
}
- /* Get the import name */
- ImportData = VaToPa((PVOID)ThunkData->u1.AddressOfData);
+ /* Get the import name, convert it to a physical pointer */
+ ImportData = VaToPa((PVOID)ThunkName->u1.AddressOfData);
/* Get pointers to Name and Ordinal tables (RVA -> VA) */
NameTable = VaToPa(RVA(DllBase, ExportDirectory->AddressOfNames));
@@ -197,8 +200,8 @@ PeLdrpBindImportName(
//TRACE("NameTable 0x%X, OrdinalTable 0x%X, ED->AddressOfNames 0x%X, ED->AOFO 0x%X\n",
// NameTable, OrdinalTable, ExportDirectory->AddressOfNames, ExportDirectory->AddressOfNameOrdinals);
- /* Get the hint, convert it to a physical pointer */
- Hint = ((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Hint;
+ /* Get the hint */
+ Hint = ImportData->Hint;
//TRACE("HintIndex %d\n", Hint);
/* Get the export name from the hint */
@@ -358,6 +361,7 @@ PeLdrpBindImportName(
DataTableEntry->DllBase,
ImageBase,
&RefThunkData,
+ &RefThunkData,
RefExportDirectory,
RefExportSize,
TRUE,
@@ -451,6 +455,7 @@ PeLdrpScanImportAddressTable(
_Inout_ PLIST_ENTRY ModuleListHead,
_In_ PVOID DllBase,
_In_ PVOID ImageBase,
+ _In_ PIMAGE_THUNK_DATA ThunkName,
_Inout_ PIMAGE_THUNK_DATA ThunkData,
_In_ PCSTR DirectoryPath,
_In_ PLIST_ENTRY Parent)
@@ -460,8 +465,8 @@ PeLdrpScanImportAddressTable(
ULONG ExportSize;
TRACE("PeLdrpScanImportAddressTable(): "
- "DllBase 0x%p, ImageBase 0x%p, ThunkData 0x%p\n",
- DllBase, ImageBase, ThunkData);
+ "DllBase 0x%p, ImageBase 0x%p, ThunkName 0x%p, ThunkData 0x%p\n",
+ DllBase, ImageBase, ThunkName, ThunkData);
/* Obtain the export table from the DLL's base */
if (!DllBase)
@@ -486,26 +491,27 @@ PeLdrpScanImportAddressTable(
return FALSE;
}
- /* Go through each entry in the thunk table and bind it */
- while (((PIMAGE_THUNK_DATA)VaToPa(ThunkData))->u1.AddressOfData != 0)
+ /* Go through each thunk in the table and bind it */
+ while (((PIMAGE_THUNK_DATA)VaToPa(ThunkName))->u1.AddressOfData != 0)
{
/* Bind it */
Success = PeLdrpBindImportName(ModuleListHead,
DllBase,
ImageBase,
+ ThunkName,
ThunkData,
ExportDirectory,
ExportSize,
FALSE,
DirectoryPath,
Parent);
-
- /* Move to the next entry */
- ThunkData++;
-
- /* Return error if binding was unsuccessful */
+ /* Fail if binding was unsuccessful */
if (!Success)
return Success;
+
+ /* Move to the next thunk */
+ ThunkName++;
+ ThunkData++;
}
/* Return success */
@@ -649,13 +655,16 @@ PeLdrScanImportDescriptorTable(
}
#endif
- /* If image doesn't have any import directory - just return success */
- if (ImportTable == NULL)
+ /* If the image doesn't have any import directory, just return success */
+ if (!ImportTable)
return TRUE;
- /* Loop through all entries */
- for (;(ImportTable->Name != 0) && (ImportTable->FirstThunk != 0);ImportTable++)
+ /* Loop through all the entries */
+ for (;(ImportTable->Name != 0) && (ImportTable->OriginalFirstThunk != 0);ImportTable++)
{
+ PIMAGE_THUNK_DATA ThunkName = RVA(ScanDTE->DllBase, ImportTable->OriginalFirstThunk);
+ PIMAGE_THUNK_DATA ThunkData = RVA(ScanDTE->DllBase, ImportTable->FirstThunk);
+
/* Get pointer to the name */
ImportName = (PCH)VaToPa(RVA(ScanDTE->DllBase, ImportTable->Name));
TRACE("PeLdrScanImportDescriptorTable(): Looking at %s\n", ImportName);
@@ -683,7 +692,8 @@ PeLdrScanImportDescriptorTable(
Success = PeLdrpScanImportAddressTable(ModuleListHead,
DataTableEntry->DllBase,
ScanDTE->DllBase,
- (PIMAGE_THUNK_DATA)RVA(ScanDTE->DllBase, ImportTable->FirstThunk),
+ ThunkName,
+ ThunkData,
DirectoryPath,
&ScanDTE->InLoadOrderLinks);
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9382aa286cd478366ea17…
commit 9382aa286cd478366ea1746b509e936ddb8869fb
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Tue Dec 3 00:40:21 2024 +0100
Commit: Eric Kohl <eric.kohl(a)reactos.org>
CommitDate: Tue Dec 3 00:40:21 2024 +0100
[DISKPART] Fix typos in string resources for the SELECT command
---
base/system/diskpart/lang/de-DE.rc | 4 ++--
base/system/diskpart/lang/en-US.rc | 4 ++--
base/system/diskpart/lang/pl-PL.rc | 4 ++--
base/system/diskpart/lang/pt-PT.rc | 4 ++--
base/system/diskpart/lang/ro-RO.rc | 4 ++--
base/system/diskpart/lang/ru-RU.rc | 4 ++--
base/system/diskpart/lang/sq-AL.rc | 4 ++--
base/system/diskpart/lang/tr-TR.rc | 4 ++--
base/system/diskpart/lang/zh-CN.rc | 4 ++--
base/system/diskpart/lang/zh-TW.rc | 4 ++--
10 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/base/system/diskpart/lang/de-DE.rc b/base/system/diskpart/lang/de-DE.rc
index ea81d8a6a20..e8a71bd93f1 100644
--- a/base/system/diskpart/lang/de-DE.rc
+++ b/base/system/diskpart/lang/de-DE.rc
@@ -115,8 +115,8 @@ BEGIN
IDS_SELECT_NO_DISK "\nThere is no disk currently selected.\nPlease select a disk and try again.\n\n"
IDS_SELECT_DISK "\nDisk %lu is now the selected disk.\n\n"
IDS_SELECT_DISK_INVALID "\nInvalid disk.\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\nThere is no partition currently selected.\nPlease select a disk and try again.\n\n"
IDS_SELECT_PARTITION "\nPartition %lu is now the selected partition.\n\n"
IDS_SELECT_PARTITION_NO_DISK "\nThere is no disk for selecting a partition.\nPlease select a disk and try again.\n\n"
diff --git a/base/system/diskpart/lang/en-US.rc b/base/system/diskpart/lang/en-US.rc
index c1dedb3b27b..0d29bdad392 100644
--- a/base/system/diskpart/lang/en-US.rc
+++ b/base/system/diskpart/lang/en-US.rc
@@ -115,8 +115,8 @@ BEGIN
IDS_SELECT_NO_DISK "\nThere is no disk currently selected.\nPlease select a disk and try again.\n\n"
IDS_SELECT_DISK "\nDisk %lu is now the selected disk.\n\n"
IDS_SELECT_DISK_INVALID "\nInvalid disk.\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\nThere is no partition currently selected.\nPlease select a disk and try again.\n\n"
IDS_SELECT_PARTITION "\nPartition %lu is now the selected partition.\n\n"
IDS_SELECT_PARTITION_NO_DISK "\nThere is no disk for selecting a partition.\nPlease select a disk and try again.\n\n"
diff --git a/base/system/diskpart/lang/pl-PL.rc b/base/system/diskpart/lang/pl-PL.rc
index f3f860f2069..c8529af81b5 100644
--- a/base/system/diskpart/lang/pl-PL.rc
+++ b/base/system/diskpart/lang/pl-PL.rc
@@ -115,8 +115,8 @@ BEGIN
IDS_SELECT_NO_DISK "\nNie wybrano dysku.\nWybierz dysk i spróbuj ponownie.\n\n"
IDS_SELECT_DISK "\nObecnie wybranym dyskiem jest dysk %lu.\n\n"
IDS_SELECT_DISK_INVALID "\nNieprawidłowy dysk.\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\nNie wybrano partycji.\nWybierz partycję i spróbuj ponownie.\n\n"
IDS_SELECT_PARTITION "\nObecnie wybraną partycją jest partycja %lu.\n\n"
IDS_SELECT_PARTITION_NO_DISK "\nNie wybrano dysku do ustawienia partycji\nWybierz dysk i spróbuj ponownie.\n\n"
diff --git a/base/system/diskpart/lang/pt-PT.rc b/base/system/diskpart/lang/pt-PT.rc
index 28a64fbaece..4fdc4fbcefb 100644
--- a/base/system/diskpart/lang/pt-PT.rc
+++ b/base/system/diskpart/lang/pt-PT.rc
@@ -117,8 +117,8 @@ BEGIN
IDS_SELECT_NO_DISK "\nNenhum disco actualmente está seleccionado.\nPor favor seleccione um disco e tente novamente.\n\n"
IDS_SELECT_DISK "\nDisco %lu é o disco que está actualmente seleccionado.\n\n"
IDS_SELECT_DISK_INVALID "\nDisco inválido.\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\nNenhuma partição seleccionada actualmente.\nPor favor seleccione um disco e tente novamente.\n\n"
IDS_SELECT_PARTITION "\nPartição %lu é agora a partição seleccionada.\n\n"
IDS_SELECT_PARTITION_NO_DISK "\nNão há disco para selectionar partições.\nPor favor seleccione um disco e tente novamente.\n\n"
diff --git a/base/system/diskpart/lang/ro-RO.rc b/base/system/diskpart/lang/ro-RO.rc
index 8c751acbc85..8a1f4dbd693 100644
--- a/base/system/diskpart/lang/ro-RO.rc
+++ b/base/system/diskpart/lang/ro-RO.rc
@@ -123,8 +123,8 @@ BEGIN
IDS_SELECT_NO_DISK "\nMomentan nu există niciun disc selectat.\nSelectați un disc apoi reîncercați.\n\n"
IDS_SELECT_DISK "\nDisul %lu este selectat acum.\n\n"
IDS_SELECT_DISK_INVALID "\nDisc nevalid.\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\nMomentan nu există nicio partiție selectată.\nSelectați un disc apoi reîncercați.\n\n"
IDS_SELECT_PARTITION "\nPartiția %lu este selectată acum.\n\n"
IDS_SELECT_PARTITION_NO_DISK "\nNu există niciun disc pentru partiția selectată.\nSelectați un disc apoi reîncercați.\n\n"
diff --git a/base/system/diskpart/lang/ru-RU.rc b/base/system/diskpart/lang/ru-RU.rc
index d730e8a1768..c689015ff4a 100644
--- a/base/system/diskpart/lang/ru-RU.rc
+++ b/base/system/diskpart/lang/ru-RU.rc
@@ -117,8 +117,8 @@ BEGIN
IDS_SELECT_NO_DISK "\nДиск для обработки не указан.\nВыберите диск и повторите.\n\n"
IDS_SELECT_DISK "\nДиск %lu выбран текущим.\n\n"
IDS_SELECT_DISK_INVALID "\nОшибка диска.\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\nДиск с разметкой не выбран.\nВыберите диск и повторите.\n\n"
IDS_SELECT_PARTITION "\nВыбрана разметка диска %lu текущей разметкой.\n\n"
IDS_SELECT_PARTITION_NO_DISK "\nДиск для установки разметки не указан.\nВыберите диск и повторите.\n\n"
diff --git a/base/system/diskpart/lang/sq-AL.rc b/base/system/diskpart/lang/sq-AL.rc
index 1e397c38dde..f7945ec1acf 100644
--- a/base/system/diskpart/lang/sq-AL.rc
+++ b/base/system/diskpart/lang/sq-AL.rc
@@ -119,8 +119,8 @@ BEGIN
IDS_SELECT_NO_DISK "\nThere is no disk currently selected.\nPlease select a disk and try again.\n\n"
IDS_SELECT_DISK "\nDisk %lu is now the selected disk.\n\n"
IDS_SELECT_DISK_INVALID "\nInvalid disk.\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\nThere is no partition currently selected.\nPlease select a disk and try again.\n\n"
IDS_SELECT_PARTITION "\nPartition %lu is now the selected partition.\n\n"
IDS_SELECT_PARTITION_NO_DISK "\nThere is no disk for selecting a partition.\nPlease select a disk and try again.\n\n"
diff --git a/base/system/diskpart/lang/tr-TR.rc b/base/system/diskpart/lang/tr-TR.rc
index 9900743cdc5..d755605a5c3 100644
--- a/base/system/diskpart/lang/tr-TR.rc
+++ b/base/system/diskpart/lang/tr-TR.rc
@@ -125,8 +125,8 @@ BEGIN
IDS_SELECT_NO_DISK "\nBir disk seçilmemiş.\nLütfen bir disk seçiniz ve yeniden deneyiniz.\n\n"
IDS_SELECT_DISK "\nDisk %lu şimdi seçilen disktir.\n\n"
IDS_SELECT_DISK_INVALID "\nGeçersiz disk.\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\nŞimdilik bir bölüm seçilmemiş.\nLütfen bir disk seçiniz ve yeniden deneyiniz.\n\n"
IDS_SELECT_PARTITION "\nBölüm %lu şimdi seçilen bölümdür.\n\n"
IDS_SELECT_PARTITION_NO_DISK "\nBir bölüm seçmek için bir disk yok.\nLütfen bir disk seçiniz ve yeniden deneyiniz.\n\n"
diff --git a/base/system/diskpart/lang/zh-CN.rc b/base/system/diskpart/lang/zh-CN.rc
index c0faf8cd0e0..aa40d56eae6 100644
--- a/base/system/diskpart/lang/zh-CN.rc
+++ b/base/system/diskpart/lang/zh-CN.rc
@@ -124,8 +124,8 @@ BEGIN
IDS_SELECT_NO_DISK "\n没有当前选择的磁盘。\nP请选择一个磁盘,再试一次。\n\n"
IDS_SELECT_DISK "\n磁盘 %lu 现在是所选的磁盘。\n\n"
IDS_SELECT_DISK_INVALID "\n无效的磁盘。\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\n有是没有当前选定的分区。\n请选择一个磁盘,再试一次。\n\n"
IDS_SELECT_PARTITION "\n分区 %lu 现在是所选的分区。\n\n"
IDS_SELECT_PARTITION_NO_DISK "\n没有一个选择是有分区的磁盘。\n请选择一个磁盘,再试一次。\n\n"
diff --git a/base/system/diskpart/lang/zh-TW.rc b/base/system/diskpart/lang/zh-TW.rc
index ca23054e1f8..11b68b807c6 100644
--- a/base/system/diskpart/lang/zh-TW.rc
+++ b/base/system/diskpart/lang/zh-TW.rc
@@ -124,8 +124,8 @@ BEGIN
IDS_SELECT_NO_DISK "\n目前沒有選擇磁碟。\n請選擇一個磁碟,然後再試一次。\n\n"
IDS_SELECT_DISK "\n磁碟 %lu 現在是所選擇的磁碟。\n\n"
IDS_SELECT_DISK_INVALID "\n無效的磁碟。\n\n"
- IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk ist currently selected.\n\n"
- IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk ist currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_NO_START "\nNo disk enumeration started yet.\n\nNo disk is currently selected.\n\n"
+ IDS_SELECT_DISK_ENUM_FINISHED "\nThe last disk has been enumerated.\n\nNo disk is currently selected.\n\n"
IDS_SELECT_NO_PARTITION "\n目前選擇的磁碟沒有磁碟分割。\n請選擇一個磁碟,然後再試一次。\n\n"
IDS_SELECT_PARTITION "\n磁碟分割 %lu 現在是所選擇的磁碟分割。\n\n"
IDS_SELECT_PARTITION_NO_DISK "\n沒有選擇要設定磁碟分割的磁碟。\n請選擇一個磁碟,然後再試一次。\n\n"
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=76014b92a410ff2847f6f…
commit 76014b92a410ff2847f6f54a1de966ce246dd2b1
Author: Vitaly Orekhov <vkvo2000(a)vivaldi.net>
AuthorDate: Mon Dec 2 22:27:19 2024 +0300
Commit: GitHub <noreply(a)github.com>
CommitDate: Mon Dec 2 20:27:19 2024 +0100
[REACTOS] Replace all references of CLSID_ConnectionFolder to CLSID_NetworkConnections (#7503)
Use name from public Windows SDK for 'Network Connections' CLSID, available since Windows SDK 6.0A (Visual Studio 2008 or higher).
Replace all such instances in netshell, shell32, apitests/com.
- Partially reverts/refactors commit bea0b47
- Follow-up to PR #7266
---
dll/shellext/netshell/README | 2 +-
dll/shellext/netshell/netshell.cpp | 2 +-
dll/shellext/netshell/shfldr_netconnect.cpp | 2 +-
dll/shellext/netshell/shfldr_netconnect.h | 2 +-
dll/win32/shell32/folders/CRegFolder.cpp | 2 +-
modules/rostests/apitests/com/netshell.c | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dll/shellext/netshell/README b/dll/shellext/netshell/README
index d0fc735594d..ea4315108d2 100644
--- a/dll/shellext/netshell/README
+++ b/dll/shellext/netshell/README
@@ -60,7 +60,7 @@ reimplement these stubs alongside all its unimplemented interfaces and objects,
the system netshell with ours (INetConnectionManager and IEnumNetConnection are only the tip
of the iceberg).
However it is perfectly fine if one copies our netshell in a different folder and change the
-registry settings to make it handle CLSID_ConnectionFolder, CLSID_LanConnectionUi and CLSID_ConnectionTray.
+registry settings to make it handle CLSID_NetworkConnections, CLSID_LanConnectionUi and CLSID_ConnectionTray.
When doing so there are actually two options about how to test. One is leaving #define USE_CUSTOM_CONMGR 1
as is and the other is setting is to 0. What this does is that when 0, the connections will be enumerated
in the shell folder and the tray using the system's INetConnectionManager (which resides in the system's
diff --git a/dll/shellext/netshell/netshell.cpp b/dll/shellext/netshell/netshell.cpp
index 17ef8e747b5..abdf8af9bd7 100644
--- a/dll/shellext/netshell/netshell.cpp
+++ b/dll/shellext/netshell/netshell.cpp
@@ -17,7 +17,7 @@ public:
};
BEGIN_OBJECT_MAP(ObjectMap)
- OBJECT_ENTRY(CLSID_ConnectionFolder, CNetworkConnections)
+ OBJECT_ENTRY(CLSID_NetworkConnections, CNetworkConnections)
OBJECT_ENTRY(CLSID_ConnectionManager, CNetConnectionManager)
OBJECT_ENTRY(CLSID_LanConnectionUi, CNetConnectionPropertyUi)
OBJECT_ENTRY(CLSID_ConnectionTray, CLanStatus)
diff --git a/dll/shellext/netshell/shfldr_netconnect.cpp b/dll/shellext/netshell/shfldr_netconnect.cpp
index dca42527e7a..3c14b9672e9 100644
--- a/dll/shellext/netshell/shfldr_netconnect.cpp
+++ b/dll/shellext/netshell/shfldr_netconnect.cpp
@@ -797,7 +797,7 @@ HRESULT WINAPI CNetworkConnections::GetClassID(CLSID *lpClassId)
if (!lpClassId)
return E_POINTER;
- *lpClassId = CLSID_ConnectionFolder;
+ *lpClassId = CLSID_NetworkConnections;
return S_OK;
}
diff --git a/dll/shellext/netshell/shfldr_netconnect.h b/dll/shellext/netshell/shfldr_netconnect.h
index c96fbb7d519..4e081739020 100644
--- a/dll/shellext/netshell/shfldr_netconnect.h
+++ b/dll/shellext/netshell/shfldr_netconnect.h
@@ -8,7 +8,7 @@ typedef struct {
} shvheader;
class CNetworkConnections:
- public CComCoClass<CNetworkConnections, &CLSID_ConnectionFolder>,
+ public CComCoClass<CNetworkConnections, &CLSID_NetworkConnections>,
public CComObjectRootEx<CComMultiThreadModelNoCS>,
public IPersistFolder2,
public IShellExtInit,
diff --git a/dll/win32/shell32/folders/CRegFolder.cpp b/dll/win32/shell32/folders/CRegFolder.cpp
index b983b5496a2..ece1845838d 100644
--- a/dll/win32/shell32/folders/CRegFolder.cpp
+++ b/dll/win32/shell32/folders/CRegFolder.cpp
@@ -412,7 +412,7 @@ BOOL CRegFolder::_IsInNameSpace(_In_ LPCITEMIDLIST pidl)
CLSID clsid = *_ILGetGUIDPointer(pidl);
if (IsEqualGUID(clsid, CLSID_Printers))
return TRUE;
- if (IsEqualGUID(clsid, CLSID_ConnectionFolder))
+ if (IsEqualGUID(clsid, CLSID_NetworkConnections))
return TRUE;
FIXME("Check registry\n");
return TRUE;
diff --git a/modules/rostests/apitests/com/netshell.c b/modules/rostests/apitests/com/netshell.c
index 2562d5e46d2..3d107a54d9a 100644
--- a/modules/rostests/apitests/com/netshell.c
+++ b/modules/rostests/apitests/com/netshell.c
@@ -20,7 +20,7 @@ static const CLASS_AND_INTERFACES ExpectedInterfaces[] =
L"Both"
},
{
- ID_NAME(CLSID_ConnectionFolder),
+ ID_NAME(CLSID_NetworkConnections),
{
{ 0x0, &IID_IPersistFolder2 },
{ 0x0, &IID_IPersistFolder },