From 17e2ab8999dd72d8ceb5a55a8abfd3f87dc825ff Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Wed, 15 Apr 2009 09:27:59 +0000 Subject: [PATCH] - Use SEH in LdrGetProcedureAddress. It fixes an exception in "kernel32_winetest module" and some wine tests svn path=/trunk/; revision=40522 --- reactos/dll/ntdll/ldr/utils.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index e23e9690452..63b77b160f8 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -2486,7 +2486,9 @@ LdrGetProcedureAddress (IN PVOID BaseAddress, DPRINT("LdrGetProcedureAddress (BaseAddress %p Name %Z Ordinal %lu ProcedureAddress %p)\n", BaseAddress, Name, Ordinal, ProcedureAddress); - if (Name && Name->Length) + _SEH2_TRY + { + if (Name && Name->Length) { /* by name */ *ProcedureAddress = LdrGetExportByName(BaseAddress, (PUCHAR)Name->Buffer, 0xffff); @@ -2496,7 +2498,7 @@ LdrGetProcedureAddress (IN PVOID BaseAddress, } DPRINT("LdrGetProcedureAddress: Can't resolve symbol '%Z'\n", Name); } - else + else { /* by ordinal */ Ordinal &= 0x0000FFFF; @@ -2507,6 +2509,12 @@ LdrGetProcedureAddress (IN PVOID BaseAddress, } DPRINT("LdrGetProcedureAddress: Can't resolve symbol @%lu\n", Ordinal); } + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + /* Ignore exception and return */ + } + _SEH2_END; return STATUS_PROCEDURE_NOT_FOUND; }