[Win32SS] Add Driver Callback

Add user driver callback to be used later on.
This commit is contained in:
James Tabor 2019-06-21 13:10:03 -05:00
parent d182f449fc
commit 40c42305c3
3 changed files with 36 additions and 1 deletions

View file

@ -18,7 +18,8 @@
#define USER32_CALLBACK_DDEGET (14)
#define USER32_CALLBACK_SETOBM (15)
#define USER32_CALLBACK_LPK (16)
#define USER32_CALLBACK_MAXIMUM (16)
#define USER32_CALLBACK_UMPD (17)
#define USER32_CALLBACK_MAXIMUM (17)
typedef struct _WINDOWPROC_CALLBACK_ARGUMENTS
{
@ -186,4 +187,6 @@ NTSTATUS WINAPI
User32CallOBMFromKernel(PVOID Arguments, ULONG ArgumentLength);
NTSTATUS WINAPI
User32CallLPKFromKernel(PVOID Arguments, ULONG ArgumentLength);
NTSTATUS WINAPI
User32CallUMPDFromKernel(PVOID Arguments, ULONG ArgumentLength);
#endif /* __INCLUDE_USER32_CALLBACK_H */

View file

@ -1208,5 +1208,30 @@ co_IntSetupOBM(VOID)
IntCbFreeMemory(Argument);
}
LRESULT
APIENTRY
co_UserCBClientPrinterThunk( PVOID pkt, INT InSize, PVOID pvOutData, INT OutSize )
{
ULONG ResultLength;
PVOID ResultPointer;
NTSTATUS Status;
UserLeaveCo();
Status = KeUserModeCallback(USER32_CALLBACK_UMPD,
0,
0,
&ResultPointer,
&ResultLength);
UserEnterCo();
if (!NT_SUCCESS(Status))
{
ERR("User UMPD callback failed!\n");
}
return 0;
}
/* EOF */

View file

@ -206,6 +206,7 @@ PVOID apfnDispatch[USER32_CALLBACK_MAXIMUM + 1] =
User32CallDDEGetFromKernel,
User32CallOBMFromKernel,
User32CallLPKFromKernel,
User32CallUMPDFromKernel,
};
@ -663,3 +664,9 @@ NTSTATUS WINAPI User32CallLPKFromKernel(PVOID Arguments, ULONG ArgumentLength)
return ZwCallbackReturn(&bResult, sizeof(BOOL), STATUS_SUCCESS);
}
NTSTATUS WINAPI User32CallUMPDFromKernel(PVOID Arguments, ULONG ArgumentLength)
{
// = GdiPrinterThunk( , , );
return ZwCallbackReturn(Arguments, ArgumentLength, STATUS_SUCCESS);
}