diff options
-rw-r--r-- | CRT/kcrt.c | 6 | ||||
-rw-r--r-- | README.md | 5 |
2 files changed, 8 insertions, 3 deletions
@@ -264,10 +264,14 @@ void __cdecl _CRT_DriverUnload(_In_ struct _DRIVER_OBJECT * DriverObject) NTSTATUS __cdecl _CRT_DriverEntry(_In_ struct _DRIVER_OBJECT * DriverObject, _In_ PUNICODE_STRING RegistryPath) { + NTSTATUS retval; + KCRT_OnDriverEntry(); + retval = DriverEntry(DriverObject, RegistryPath); + /* support for service stopping and CRT de-init */ DriverObject->DriverUnload = _CRT_DriverUnload; - return DriverEntry(DriverObject, RegistryPath); + return retval; } @@ -82,8 +82,9 @@ NTSTATUS MyDriverEntry(_In_ struct _DRIVER_OBJECT * DriverObject, _In_ PUNICODE_ } ``` -shouldn't be used. Instead the function `DriverUnload` will be called. -So make sure that the symbol `DriverUnload` exists and has the usual ddk function signature: +**must not** used. Overwriting `DriverObject->DriverUnload` with your own function may BSOD. +Instead the function `DriverUnload` will be called. +Make sure that the symbol `DriverUnload` exists and has the usual ddk function signature: `void DriverUnload(_In_ struct _DRIVER_OBJECT * DriverObject)`. This is required to make ctors/dtors work without calling additional functions in `DriverEntry` / `DriverUnload`. |