//////////////////////////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 2014 Microsoft Corporation. All Rights Reserved. // // Module Name: // Framework_Events.cpp // // Abstract: // // Author: // Dusty Harper (DHarper) // // Revision History: // // [ Month ][Day] [Year] - [Revision]-[ Comments ] // May 01, 2010 - 1.0 - Creation // December 13, 2013 - 1.1 - Add support for multiple injectors and redirectors // //////////////////////////////////////////////////////////////////////////////////////////////////// #include "Framework_WFPSamplerCalloutDriver.h" /// . #include "Framework_Include.h" /// . #include "Framework_Events.tmh" /// $(OBJ_PATH)\$(O)\ /** @framework_function="EventDriverUnload" Purpose: Callback function responding to Driver Unload Events.

Notes:

MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Hardware/FF541694.aspx
*/ _IRQL_requires_(PASSIVE_LEVEL) _IRQL_requires_same_ _Function_class_(EVT_WDF_DRIVER_UNLOAD) VOID EventDriverUnload(_In_ WDFDRIVER wdfDriver) { #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " ---> EventDriverUnload()\n"); #endif /// DBG UNREFERENCED_PARAMETER(wdfDriver); #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " <--- EventDriverUnload()\n"); #endif /// DBG WPP_CLEANUP(wdfDriver); return; } /** @framework_function="EventCleanupDriverObject" Purpose: Callback function responding to Driver Cleanup Events.

Notes:

MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Hardware/FF540840.aspx
*/ _IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_same_ _Function_class_(EVT_WDF_OBJECT_CONTEXT_CLEANUP) VOID EventCleanupDriverObject(_In_ WDFOBJECT driverObject) { #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " ---> EventCleanupDriverObject()\n"); #endif /// DBG UNREFERENCED_PARAMETER(driverObject); #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " <--- EventCleanupDriverObject()\n"); #endif /// DBG return; } /** @framework_function="EventCleanupDeviceObject" Purpose: Callback function responding to Object Cleanup Events.

Notes:

MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Hardware/FF540840.aspx
HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Hardware/FF549133.aspx
*/ _IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_same_ _Function_class_(EVT_WDF_OBJECT_CONTEXT_CLEANUP) VOID EventCleanupDeviceObject(_In_ WDFOBJECT deviceObject) { #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " ---> EventCleanupDeviceObject()\n"); #endif /// DBG UNREFERENCED_PARAMETER(deviceObject); KrnlHlprExposedCalloutsUnregister(); for(UINT32 index = 0; index <= UNIVERSAL_INDEX; index++) { #if(NTDDI_VERSION >= NTDDI_WIN8) if(g_WFPSamplerDeviceData.ppRedirectionHandles[index]) KrnlHlprFwpsRedirectHandleDestroy(g_WFPSamplerDeviceData.ppRedirectionHandles[index]); #endif /// (NTDDI_VERSION >= NTDDI_WIN8) if(g_WFPSamplerDeviceData.ppOutboundInjectionHandles[index]) KrnlHlprInjectionHandleDataDestroy(&(g_WFPSamplerDeviceData.ppOutboundInjectionHandles[index])); if(g_WFPSamplerDeviceData.ppInboundInjectionHandles[index]) KrnlHlprInjectionHandleDataDestroy(&(g_WFPSamplerDeviceData.ppInboundInjectionHandles[index])); if(g_WFPSamplerDeviceData.ppIPv6OutboundInjectionHandles[index]) KrnlHlprInjectionHandleDataDestroy(&(g_WFPSamplerDeviceData.ppIPv6OutboundInjectionHandles[index])); if(g_WFPSamplerDeviceData.ppIPv6InboundInjectionHandles[index]) KrnlHlprInjectionHandleDataDestroy(&(g_WFPSamplerDeviceData.ppIPv6InboundInjectionHandles[index])); if(g_WFPSamplerDeviceData.ppIPv4OutboundInjectionHandles[index]) KrnlHlprInjectionHandleDataDestroy(&(g_WFPSamplerDeviceData.ppIPv4OutboundInjectionHandles[index])); if(g_WFPSamplerDeviceData.ppIPv4InboundInjectionHandles[index]) KrnlHlprInjectionHandleDataDestroy(&(g_WFPSamplerDeviceData.ppIPv4InboundInjectionHandles[index])); } if(g_WFPSamplerDeviceData.pEngineHandle) KrnlHlprFwpmSessionDestroyEngineHandle(&(g_WFPSamplerDeviceData.pEngineHandle)); FwpmBfeStateUnsubscribeChanges(g_bfeSubscriptionHandle); if(g_pNDISPoolData) KrnlHlprNDISPoolDataDestroy(&g_pNDISPoolData); UnregisterPowerStateChangeCallback(&g_deviceExtension); if(g_pPowerStateExitIOWorkItem) { IoFreeWorkItem(g_pPowerStateExitIOWorkItem); g_pPowerStateExitIOWorkItem = 0; } if(g_pPowerStateEnterIOWorkItem) { IoFreeWorkItem(g_pPowerStateEnterIOWorkItem); g_pPowerStateEnterIOWorkItem = 0; } #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " <--- EventCleanupDeviceObject()\n"); #endif /// DBG return; } /** @framework_function="EventIODeviceControl" Purpose: Callback function responding to IO Control Events.

Notes:

MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Hardware/FF541758.aspx
*/ _IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_requires_same_ _Function_class_(EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL) VOID EventIODeviceControl(_In_ WDFQUEUE wdfQueue, _In_ WDFREQUEST wdfRequest, _In_ size_t outputBufferLength, _In_ size_t inputBufferLength, _In_ ULONG ioControlCode) { #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " ---> EventIODeviceControl()\n"); #endif /// DBG UNREFERENCED_PARAMETER(wdfQueue); UNREFERENCED_PARAMETER(wdfRequest); UNREFERENCED_PARAMETER(outputBufferLength); UNREFERENCED_PARAMETER(inputBufferLength); UNREFERENCED_PARAMETER(ioControlCode); #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " <--- EventIODeviceControl()\n"); #endif /// DBG return; } /** @framework_function="EventIORead" Purpose: Callback function responding to IO Read Events.

Notes:

MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Hardware/FF541776.aspx
*/ _IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_requires_same_ _Function_class_(EVT_WDF_IO_QUEUE_IO_READ) VOID EventIORead(_In_ WDFQUEUE wdfQueue, _In_ WDFREQUEST wdfRequest, _In_ size_t length) { #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " ---> EventIORead()\n"); #endif /// DBG UNREFERENCED_PARAMETER(wdfQueue); UNREFERENCED_PARAMETER(wdfRequest); UNREFERENCED_PARAMETER(length); #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " <--- EventIORead()\n"); #endif /// DBG return; } /** @framework_function="EventIOWrite" Purpose: Callback function responding to IO Write Events.

Notes:

MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Hardware/FF541813.aspx
*/ _IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_requires_same_ _Function_class_(EVT_WDF_IO_QUEUE_IO_WRITE) VOID EventIOWrite(_In_ WDFQUEUE wdfQueue, _In_ WDFREQUEST wdfRequest, _In_ size_t length) { #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " ---> EventIOWrite()\n"); #endif /// DBG UNREFERENCED_PARAMETER(wdfQueue); UNREFERENCED_PARAMETER(wdfRequest); UNREFERENCED_PARAMETER(length); #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " <--- EventIOWrite()\n"); #endif /// DBG return; }