From: Vijay Kiran Kamuju <infyquest@gmail.com>
Subject: [PATCH 2/2] ntoskrnl.exe: Add KeIpiGenericCall stub function
Message-Id: <CACfa+KKswHNLfpAPKfDHV3qiaXLaesew=JNrkVTJruCzLLwViA@mail.gmail.com>
Date: Thu, 30 Apr 2020 11:32:40 +0200

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48989
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>

From d3a79d67444afa16aaea5d66739bb8bff6290dac Mon Sep 17 00:00:00 2001
From: Vijay Kiran Kamuju <infyquest@gmail.com>
Date: Thu, 30 Apr 2020 11:27:41 +0200
Subject: [PATCH 2/2] ntoskrnl.exe: Add KeIpiGenericCall stub function

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48989
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
---
 dlls/ntoskrnl.exe/ntoskrnl.c        | 8 ++++++++
 dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 1 +
 include/ddk/wdm.h                   | 6 +++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 01f25b5e2a..92b65f921d 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -2484,6 +2484,14 @@ NTSTATUS WINAPI KeExpandKernelStackAndCallout(PEXPAND_STACK_CALLOUT callout, voi
 {
     return KeExpandKernelStackAndCalloutEx(callout, parameter, size, TRUE, NULL);
 }
+/***********************************************************************
+ *           KeIpiGenericCall   (NTOSKRNL.EXE.@)
+ */
+ULONG_PTR WINAPI KeIpiGenericCall(PKIPI_BROADCAST_WORKER broadcast, ULONG_PTR context)
+{
+    FIXME("(%p %p)\n", broadcast, context);
+    return broadcast(context);
+}
 
 /***********************************************************************
 *           IoUnregisterFileSystem   (NTOSKRNL.EXE.@)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index eeff447a31..040ee6523a 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -53,6 +53,7 @@
 @ stdcall KeEnterGuardedRegion()
 @ stdcall KeExpandKernelStackAndCallout(ptr ptr long)
 @ stdcall KeExpandKernelStackAndCalloutEx(ptr ptr long long ptr)
+@ stdcall KeIpiGenericCall(ptr ptr)
 @ stdcall KeLeaveGuardedRegion()
 @ stdcall -arch=!i386 KeReleaseInStackQueuedSpinLock(ptr)
 @ stdcall -fastcall KeReleaseInStackQueuedSpinLockFromDpcLevel(ptr)
diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h
index b180d11556..90109918d1 100644
--- a/include/ddk/wdm.h
+++ b/include/ddk/wdm.h
@@ -1542,6 +1542,9 @@ static inline void IoMarkIrpPending(IRP *irp)
 #define SYMBOLIC_LINK_QUERY             0x0001
 #define SYMBOLIC_LINK_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED | 0x1)
 
+typedef ULONG_PTR KIPI_BROADCAST_WORKER(ULONG_PTR);
+typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER;
+
 NTSTATUS  WINAPI DbgQueryDebugFilterState(ULONG, ULONG);
 void    FASTCALL ExAcquireFastMutexUnsafe(PFAST_MUTEX);
 BOOLEAN   WINAPI ExAcquireResourceExclusiveLite(ERESOURCE*,BOOLEAN);
@@ -1631,13 +1634,14 @@ void      WINAPI KeClearEvent(PRKEVENT);
 NTSTATUS  WINAPI KeDelayExecutionThread(KPROCESSOR_MODE,BOOLEAN,LARGE_INTEGER*);
 void      WINAPI KeEnterCriticalRegion(void);
 PKTHREAD  WINAPI KeGetCurrentThread(void);
+void      WINAPI KeLeaveCriticalRegion(void);
 void      WINAPI KeInitializeEvent(PRKEVENT,EVENT_TYPE,BOOLEAN);
 void      WINAPI KeInitializeMutex(PRKMUTEX,ULONG);
 void      WINAPI KeInitializeSemaphore(PRKSEMAPHORE,LONG,LONG);
 void      WINAPI KeInitializeSpinLock(KSPIN_LOCK*);
 void      WINAPI KeInitializeTimerEx(PKTIMER,TIMER_TYPE);
 void      WINAPI KeInitializeTimer(KTIMER*);
-void      WINAPI KeLeaveCriticalRegion(void);
+ULONG_PTR WINAPI KeIpiGenericCall(PKIPI_BROADCAST_WORKER,ULONG_PTR);
 void      WINAPI KeQuerySystemTime(LARGE_INTEGER*);
 void      WINAPI KeQueryTickCount(LARGE_INTEGER*);
 ULONG     WINAPI KeQueryTimeIncrement(void);

-- 
2.26.2