ntdll: Add stub for LdrResolveDelayLoadedAPI and reference it in kernel32
André Hentschel
nerv at dawncrow.de
Wed Jun 5 14:22:55 CDT 2013
---
dlls/kernel32/kernel32.spec | 1 +
dlls/ntdll/loader.c | 14 ++++++++++++
dlls/ntdll/ntdll.spec | 1 +
include/delayloadhandler.h | 56 +++++++++++++++++++++++++++++++++++++++++++++
include/winnt.h | 22 ++++++++++++++++++
5 files changed, 94 insertions(+)
create mode 100644 include/delayloadhandler.h
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 9d06e12..bc42120 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -1026,6 +1026,7 @@
@ stdcall RequestWakeupLatency(long)
@ stdcall ResetEvent(long)
@ stdcall ResetWriteWatch(ptr long)
+@ stdcall ResolveDelayLoadedAPI(ptr ptr ptr ptr ptr long) ntdll.LdrResolveDelayLoadedAPI
@ stdcall RestoreLastError(long) ntdll.RtlRestoreLastWin32Error
@ stdcall ResumeThread(long)
@ cdecl -arch=arm,x86_64 RtlAddFunctionTable(ptr long long) ntdll.RtlAddFunctionTable
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 9642f62..e8a2401 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -36,6 +36,7 @@
#include "windef.h"
#include "winnt.h"
#include "winternl.h"
+#include "delayloadhandler.h"
#include "wine/exception.h"
#include "wine/library.h"
@@ -2387,6 +2388,19 @@ BOOLEAN WINAPI RtlDllShutdownInProgress(void)
}
+/****************************************************************************
+ * LdrResolveDelayLoadedAPI (NTDLL.@)
+ */
+PVOID WINAPI LdrResolveDelayLoadedAPI( PVOID base, PCIMAGE_DELAYLOAD_DESCRIPTOR desc,
+ PDELAYLOAD_FAILURE_DLL_CALLBACK dllhook,
+ PDELAYLOAD_FAILURE_SYSTEM_ROUTINE syshook,
+ PIMAGE_THUNK_DATA addr, ULONG flags )
+{
+ FIXME("(%p, %p, %p, %p, %p, 0x%08x) stub\n", base, desc, dllhook, syshook, addr, flags);
+ if (addr) addr->u1.AddressOfData = 0;
+ return NULL;
+}
+
/******************************************************************
* LdrShutdownProcess (NTDLL.@)
*
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 60f70b1..093cf90 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -75,6 +75,7 @@
@ stdcall LdrProcessRelocationBlock(ptr long ptr long)
@ stdcall LdrQueryImageFileExecutionOptions(ptr wstr long ptr long ptr)
@ stdcall LdrQueryProcessModuleInformation(ptr long ptr)
+@ stdcall LdrResolveDelayLoadedAPI(ptr ptr ptr ptr ptr long)
@ stub LdrSetAppCompatDllRedirectionCallback
@ stub LdrSetDllManifestProber
@ stdcall LdrShutdownProcess()
diff --git a/include/delayloadhandler.h b/include/delayloadhandler.h
new file mode 100644
index 0000000..e48e415
--- /dev/null
+++ b/include/delayloadhandler.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2013 André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_DELAYLOADHANDLER_H
+#define __WINE_DELAYLOADHANDLER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DELAYLOAD_GPA_FAILURE 4
+
+typedef struct _DELAYLOAD_PROC_DESCRIPTOR
+{
+ ULONG ImportDescribedByName;
+ union {
+ LPCSTR Name;
+ ULONG Ordinal;
+ } Description;
+} DELAYLOAD_PROC_DESCRIPTOR, *PDELAYLOAD_PROC_DESCRIPTOR;
+
+typedef struct _DELAYLOAD_INFO
+{
+ ULONG Size;
+ PCIMAGE_DELAYLOAD_DESCRIPTOR DelayloadDescriptor;
+ PIMAGE_THUNK_DATA ThunkAddress;
+ LPCSTR TargetDllName;
+ DELAYLOAD_PROC_DESCRIPTOR TargetApiDescriptor;
+ PVOID TargetModuleBase;
+ PVOID Unused;
+ ULONG LastError;
+} DELAYLOAD_INFO, *PDELAYLOAD_INFO;
+
+typedef PVOID (WINAPI *PDELAYLOAD_FAILURE_DLL_CALLBACK)(ULONG, PDELAYLOAD_INFO);
+typedef PVOID PDELAYLOAD_FAILURE_SYSTEM_ROUTINE; /* FIXME */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DELAYLOADHANDLER_H */
diff --git a/include/winnt.h b/include/winnt.h
index 171141e..393f5a7 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -3052,6 +3052,28 @@ typedef struct _IMAGE_RELOCATION
#define IMAGE_SIZEOF_RELOCATION 10
+typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR
+{
+ union
+ {
+ DWORD AllAttributes;
+ struct
+ {
+ DWORD RvaBased:1;
+ DWORD ReservedAttributes:31;
+ };
+ } Attributes;
+
+ DWORD DllNameRVA;
+ DWORD ModuleHandleRVA;
+ DWORD ImportAddressTableRVA;
+ DWORD ImportNameTableRVA;
+ DWORD BoundImportAddressTableRVA;
+ DWORD UnloadInformationTableRVA;
+ DWORD TimeDateStamp;
+} IMAGE_DELAYLOAD_DESCRIPTOR, *PIMAGE_DELAYLOAD_DESCRIPTOR;
+typedef const IMAGE_DELAYLOAD_DESCRIPTOR *PCIMAGE_DELAYLOAD_DESCRIPTOR;
+
/* generic relocation types */
#define IMAGE_REL_BASED_ABSOLUTE 0
#define IMAGE_REL_BASED_HIGH 1
--
1.8.1.2
More information about the wine-patches
mailing list