ReactOS 0.4.17-dev-1164-g974a446
kse.h
Go to the documentation of this file.
1/*
2* PROJECT: ReactOS Kernel
3* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4* PURPOSE: Kernel Shim Engine types
5* COPYRIGHT: Copyright 2020 Hervé Poussineau <hpoussin@reactos.org>
6* COPYRIGHT: Copyright 2020-2026 Mark Jansen <mark.jansen@reactos.org>
7*/
8
9#pragma once
10
11#define KseHookFunction 0
12#define KseHookIRPCallback 1
13#define KseHookInvalid 2
14
15#define KseHookCallbackDriverInit 1
16#define KseHookCallbackDriverStartIo 2
17#define KseHookCallbackDriverUnload 3
18#define KseHookCallbackAddDevice 4
19#define KseHookCallbackMajorFunction 100
20
21typedef struct _KSE_HOOK
22{
24 union
25 {
26 PCHAR FunctionName; // if Type == KseHookFunction
27 ULONG CallbackId; // if Type == KseHookIRPCallback, KseHookCallback..
28 };
30 PVOID OriginalFunction; // if Type == KseHookFunction
32
33
34#define KseCollectionNtExport 0
35#define KseCollectionHalExport 1
36#define KseCollectionDriverExport 2
37#define KseCollectionCallback 3
38#define KseCollectionInvalid 4
39
41{
43 PWCHAR ExportDriverName; // if Type == KseCollectionDriverExport
46
47
48typedef VOID
50 _In_ PUNICODE_STRING BaseName,
52 _In_ ULONG SizeOfImage,
53 _In_ ULONG TimeDateStamp,
54 _In_ ULONG CheckSum);
55
56typedef VOID
59
60
62{
69
70
72(NTAPI KSE_GET_IO_CALLBACKS)(
74typedef KSE_GET_IO_CALLBACKS *PKSE_GET_IO_CALLBACKS;
75
76typedef NTSTATUS
77(NTAPI KSE_SET_COMPLETION_HOOK)(
82typedef KSE_SET_COMPLETION_HOOK *PKSE_SET_COMPLETION_HOOK;
83
84
86{
90
91typedef struct _KSE_SHIM
92{
94 const GUID* ShimGuid;
101
102
103/* Exported functions */
104//KseQueryDeviceData
105//KseQueryDeviceDataList
106//KseQueryDeviceFlags
107//KseSetDeviceFlags
108
110NTAPI
113 _In_ PVOID Ignored,
115
117NTAPI
120 _In_ PVOID Ignored,
123
125NTAPI
128 _In_ PVOID Unknown1,
129 _In_ PVOID Unknown2);
130
131/* PRIVATE ROUTINES **********************************************************/
132
133CODE_SEG("INIT")
135NTAPI
137 _In_ ULONG BootPhase,
138 _In_ PLOADER_PARAMETER_BLOCK LoaderBlock);
139
141NTAPI
144
146NTAPI
148 _In_ PLDR_DATA_TABLE_ENTRY LdrEntry);
149
151NTAPI
154
155VOID
156NTAPI
159 _Inout_ PKSE_SHIM* Shims,
160 _Inout_ PULONG NumberOfShims);
161
162/* Driver database (drvmain.sdb) */
163CODE_SEG("INIT")
165NTAPI
167 _In_ PVOID DatabaseImage,
168 _In_ ULONG DatabaseSize);
169
170VOID
171NTAPI
174 _Inout_ PKSE_SHIM* Shims,
175 _Inout_ PULONG NumberOfShims);
176
177CODE_SEG("INIT")
179NTAPI
181
182CODE_SEG("INIT")
184NTAPI
#define CODE_SEG(...)
#define VOID
Definition: acefi.h:82
@ INIT
Definition: arabic.c:42
LONG NTSTATUS
Definition: precomp.h:26
LPWSTR Name
Definition: desk.c:124
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
#define NTSTATUS
Definition: precomp.h:19
NTSTATUS NTAPI KseInitialize(_In_ ULONG BootPhase, _In_ PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: kse.c:403
struct _KSE_CALLBACK_ROUTINES * PKSE_CALLBACK_ROUTINES
NTSTATUS NTAPI KseIgnoreFreePoolTagInitialize(VOID)
Definition: ignorepooltag.c:59
_In_ PIRP Irp
Definition: kse.h:79
struct _KSE_HOOK KSE_HOOK
PKSE_SHIM NTAPI KsepFindShim(_In_ PCUNICODE_STRING Name)
Definition: kse.c:82
VOID NTAPI KseDbGetShimsForDriver(_In_ PLDR_DATA_TABLE_ENTRY LdrEntry, _Inout_ PKSE_SHIM *Shims, _Inout_ PULONG NumberOfShims)
Definition: ksedb.c:199
struct _KSE_CALLBACK_ROUTINES KSE_CALLBACK_ROUTINES
VOID NTAPI KsepAddShimByName(_In_ PCUNICODE_STRING Name, _Inout_ PKSE_SHIM *Shims, _Inout_ PULONG NumberOfShims)
Definition: kse.c:107
NTSTATUS NTAPI KseDriverLoadImage(_In_ PLDR_DATA_TABLE_ENTRY LdrEntry)
Definition: kse.c:773
struct _KSE_DRIVER_IO_CALLBACKS KSE_DRIVER_IO_CALLBACKS
NTSTATUS NTAPI KseDbInitialize(_In_ PVOID DatabaseImage, _In_ ULONG DatabaseSize)
Definition: ksedb.c:92
VOID(NTAPI * PKSE_HOOK_DRIVER_UNTARGETED)(_In_ PVOID BaseAddress)
Definition: kse.h:57
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE CompletionRoutine
Definition: kse.h:80
KSE_GET_IO_CALLBACKS * PKSE_GET_IO_CALLBACKS
Definition: kse.h:74
struct _KSE_DRIVER_IO_CALLBACKS * PKSE_DRIVER_IO_CALLBACKS
NTSTATUS NTAPI KseRegisterShimEx(_In_ PKSE_SHIM Shim, _In_ PVOID Ignored, _In_ ULONG Flags, _In_opt_ PVOID DriverObject)
Definition: kse.c:474
struct _KSE_SHIM * PKSE_SHIM
NTSTATUS NTAPI KseDriverScopeInitialize(VOID)
Definition: driverscope.c:353
struct _KSE_HOOK * PKSE_HOOK
VOID(NTAPI * PKSE_HOOK_DRIVER_TARGETED)(_In_ PUNICODE_STRING BaseName, _In_ PVOID BaseAddress, _In_ ULONG SizeOfImage, _In_ ULONG TimeDateStamp, _In_ ULONG CheckSum)
Definition: kse.h:49
NTSTATUS NTAPI KseShimDriverIoCallbacks(_In_ PDRIVER_OBJECT DriverObject)
Definition: kse.c:301
struct _KSE_SHIM KSE_SHIM
NTSTATUS NTAPI KseUnregisterShim(_In_ PKSE_SHIM Shim, _In_ PVOID Unknown1, _In_ PVOID Unknown2)
Definition: kse.c:551
struct _KSE_HOOK_COLLECTION KSE_HOOK_COLLECTION
NTSTATUS NTAPI KseRegisterShim(_In_ PKSE_SHIM Shim, _In_ PVOID Ignored, _In_ ULONG Flags)
Definition: kse.c:464
KSE_SET_COMPLETION_HOOK * PKSE_SET_COMPLETION_HOOK
Definition: kse.h:82
struct _KSE_HOOK_COLLECTION * PKSE_HOOK_COLLECTION
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID * BaseAddress
Definition: mmfuncs.h:408
#define _Inout_
Definition: no_sal2.h:162
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
Definition: xml2sdb.h:89
PKSE_GET_IO_CALLBACKS KseGetIoCallbacksRoutine
Definition: kse.h:87
PKSE_SET_COMPLETION_HOOK KseSetCompletionHookRoutine
Definition: kse.h:88
PDRIVER_UNLOAD DriverUnload
Definition: kse.h:65
PDRIVER_ADD_DEVICE AddDevice
Definition: kse.h:66
PDRIVER_STARTIO DriverStartIo
Definition: kse.h:64
PDRIVER_INITIALIZE DriverInit
Definition: kse.h:63
PWCHAR ExportDriverName
Definition: kse.h:43
PKSE_HOOK HookArray
Definition: kse.h:44
Definition: kse.h:22
PCHAR FunctionName
Definition: kse.h:26
ULONG CallbackId
Definition: kse.h:27
PVOID OriginalFunction
Definition: kse.h:30
ULONG Type
Definition: kse.h:23
PVOID HookFunction
Definition: kse.h:29
Definition: kse.h:92
const GUID * ShimGuid
Definition: kse.h:94
PKSE_HOOK_COLLECTION HookCollectionsArray
Definition: kse.h:99
PWCHAR ShimName
Definition: kse.h:95
PKSE_CALLBACK_ROUTINES KseCallbackRoutines
Definition: kse.h:96
ULONG Size
Definition: kse.h:93
PKSE_HOOK_DRIVER_UNTARGETED ShimmedDriverUntargetedNotification
Definition: kse.h:98
PKSE_HOOK_DRIVER_TARGETED ShimmedDriverTargetedNotification
Definition: kse.h:97
Definition: btrfs_drv.h:1876
uint32_t * PULONG
Definition: typedefs.h:59
#define NTAPI
Definition: typedefs.h:36
uint16_t * PWCHAR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
_In_ UCHAR MajorFunction
Definition: wdfdevice.h:1703
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213
DRIVER_STARTIO * PDRIVER_STARTIO
Definition: iotypes.h:2260
DRIVER_UNLOAD * PDRIVER_UNLOAD
Definition: iotypes.h:2268
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
Definition: iotypes.h:2850
DRIVER_ADD_DEVICE * PDRIVER_ADD_DEVICE
Definition: iotypes.h:2231
DRIVER_DISPATCH * PDRIVER_DISPATCH
Definition: iotypes.h:2277
#define IRP_MJ_MAXIMUM_FUNCTION
DRIVER_INITIALIZE * PDRIVER_INITIALIZE
Definition: iotypes.h:2250