_IRQL_requires_same_
inline VOID KrnlHlprRedirectDataPurge(_Inout_ REDIRECT_DATA* pRedirectData)
{
#if DBG
   
   DbgPrintEx(DPFLTR_IHVNETWORK_ID,
              DPFLTR_INFO_LEVEL,
              " ---> KrnlHlprRedirectDataPurge()\n");

#endif /// DBG
   
   NT_ASSERT(pRedirectData);

   if(pRedirectData->pWritableLayerData)
   {
      FwpsApplyModifiedLayerData(pRedirectData->classifyHandle,
                                 pRedirectData->pWritableLayerData,
                                 FWPS_CLASSIFY_FLAG_REAUTHORIZE_IF_MODIFIED_BY_OTHERS);

      pRedirectData->pWritableLayerData = 0;
   }

   if(pRedirectData->classifyHandle)
   {
      if(pRedirectData->isPended)
      {
         FwpsCompleteClassify(pRedirectData->classifyHandle,
                              0,
                              pRedirectData->pClassifyOut);

         pRedirectData->isPended = FALSE;
      }

#if(NTDDI_VERSION >= NTDDI_WIN8)

      if(pRedirectData->redirectHandle)
      {
         FwpsRedirectHandleDestroy(pRedirectData->redirectHandle);

         pRedirectData->redirectHandle = 0;
      }

#endif

      FwpsReleaseClassifyHandle(pRedirectData->classifyHandle);

      pRedirectData->classifyHandle = 0;
   }

   RtlZeroMemory(pRedirectData,
                 sizeof(REDIRECT_DATA));

#if DBG
   
   DbgPrintEx(DPFLTR_IHVNETWORK_ID,
              DPFLTR_INFO_LEVEL,
              " <--- KrnlHlprRedirectDataPurge()\n");

#endif /// DBG
   
   return;
}
_IRQL_requires_same_
inline VOID KrnlHlprPendDataPurge(_Inout_ PEND_DATA* pPendData)
{
#if DBG
   
   DbgPrintEx(DPFLTR_IHVNETWORK_ID,
              DPFLTR_INFO_LEVEL,
              " ---> KrnlHlprPendDataPurge()\n");

#endif /// DBG
   
   NT_ASSERT(pPendData);

#if(NTDDI_VERSION >= NTDDI_WIN7)

   if(pPendData->layerID == FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4 ||
      pPendData->layerID == FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6)
   {
      if(pPendData->classifyHandle &&
         pPendData->isPended)
      {
         FwpsCompleteClassify(pPendData->classifyHandle,
                              0,
                              &(pPendData->classifyOut));


         FwpsReleaseClassifyHandle(pPendData->classifyHandle);

         pPendData->classifyHandle = 0;
         pPendData->pPCPendData    = 0;
         pPendData->isPended       = FALSE;
      }
   }
   else

#endif /// (NTDDI_VERSION >= NTDDI_WIN7)

   {
      if(pPendData->completionContext &&
         pPendData->isPended)
      {
         FwpsCompleteOperation(pPendData->completionContext,
                               pPendData->pNBL);

         pPendData->completionContext      = 0;
         pPendData->pNBL                   = 0;
         pPendData->pPendAuthorizationData = 0;
         pPendData->isPended               = FALSE;
      }
   }

   RtlZeroMemory(pPendData,
                 sizeof(PEND_DATA));

#if DBG
   
   DbgPrintEx(DPFLTR_IHVNETWORK_ID,
              DPFLTR_INFO_LEVEL,
              " <--- KrnlHlprPendDataPurge()\n");

#endif /// DBG
   
   return;
}