ReactOS 0.4.16-dev-1946-g52006dd
dlihook.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS delayimport Library
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Delay-import hook for win32u.dll
5 * COPYRIGHT: Copyright 2025 Timo Kreuzer <timo.kreuzer@reactos.org>
6 */
7
8#include <windows.h>
9#include <delayimp.h>
10#include <stdio.h>
11#include <versionhelpers.h>
12
13static
17 unsigned code,
18 PDelayLoadInfo pdli)
19{
21 {
22 return NULL;
23 }
24
25 if (strcmp(pdli->szDll, "win32u.dll") != 0)
26 {
27 return NULL;
28 }
29
30 if (IsReactOS())
31 {
32 return NULL;
33 }
34
35 switch (_winver)
36 {
38 pdli->szDll = "win32u_xpsp2.dll";
39 break;
40
42 pdli->szDll = "win32u_2k3sp2.dll";
43 break;
44
46 pdli->szDll = "win32u_vista.dll";
47 break;
48
49 default:
50 break;
51 }
52
53 printf("_winver = 0x%x, _osver = 0x%x, loading %s\n", _winver, _osver, pdli->szDll);
54
55 return NULL;
56}
57
59
60static
64 unsigned code,
65 PDelayLoadInfo pdli)
66{
67 if (code == dliFailLoadLib)
68 {
69 fprintf(stderr, "Delayimport: Failed to load %s\n", pdli->szDll);
70 }
71 else if (code == dliFailGetProc)
72 {
74 "Delayimport: Failed to import %s from %s\n",
75 pdli->dlp.szProcName,
76 pdli->szDll);
77 }
78 else
79 {
80 fprintf(stderr, "Delayimport: Unknown error code %d (%s, 0x%lx)\n", code, pdli->szDll, pdli->dwLastError);
81 }
82
83 return NULL;
84}
85
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
@ dliFailLoadLib
Definition: delayimp.h:37
@ dliNotePreLoadLibrary
Definition: delayimp.h:35
@ dliFailGetProc
Definition: delayimp.h:38
FARPROC(WINAPI * PfnDliHook)(unsigned, PDelayLoadInfo)
Definition: delayimp.h:77
PfnDliHook __pfnDliFailureHook2
Definition: dlihook.c:86
static FARPROC WINAPI DliNotifyHook(unsigned code, PDelayLoadInfo pdli)
Definition: dlihook.c:16
PfnDliHook __pfnDliNotifyHook2
Custom delay-loading hooks for loading the Setup DLLs from a suitable path.
Definition: dlihook.c:58
static FARPROC WINAPI DliFailureHook(unsigned code, PDelayLoadInfo pdli)
Definition: dlihook.c:63
#define NULL
Definition: types.h:112
int(* FARPROC)()
Definition: compat.h:36
#define printf
Definition: freeldr.h:97
#define stderr
Definition: stdio.h:100
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
unsigned int _osver
Definition: environ.c:11
unsigned int _winver
Definition: environ.c:14
#define _WIN32_WINNT_WS03
Definition: sdkddkver.h:23
#define _WIN32_WINNT_WINXP
Definition: sdkddkver.h:22
#define _WIN32_WINNT_VISTA
Definition: sdkddkver.h:25
LPCSTR szDll
Definition: delayimp.h:70
DelayLoadProc dlp
Definition: delayimp.h:71
DWORD dwLastError
Definition: delayimp.h:74
LPCSTR szProcName
Definition: delayimp.h:60
Definition: inflate.c:139
#define WINAPI
Definition: msvc.h:6