Sample Code

windows driver samples/ Windows Filtering Platform Sample/ C++/ lib/ HelperFunctions_Strings.cpp/

////////////////////////////////////////////////////////////////////////////////////////////////////
//
//   Copyright (c) 2012 Microsoft Corporation.  All Rights Reserved.
//
//   Module Name:
//      HelperFunctions_Strings.cpp
//
//   Abstract:
//      This module contains functions which assist in actions pertaining to strings.
//
//   Naming Convention:
//
//      <Scope><Module><Object><Action><Modifier>
//  
//      i.e.
//
//       <Scope>
//          {
//                    - Function is likely visible to other modules
//          }
//       <Module>
//          {
//            Hlpr    - Function is from HelperFunctions_* Modules.
//          }
//       <Object>
//          {
//            Strings - Function pertains to null terminated wide character strings.
//          }
//       <Action>
//          {
//            Are     - Function compares values.
//          }
//       <Modifier>
//          {
//            Equal   - Function determines equality between values.
//          }
//
//   Private Functions:
//
//   Public Functions:
//      HlprStringsAreEqual(),
//
//   Author:
//      Dusty Harper      (DHarper)
//
//   Revision History:
//
//      [ Month ][Day] [Year] - [Revision]-[ Comments ]
//      May       01,   2010  -     1.0   -  Creation
//
////////////////////////////////////////////////////////////////////////////////////////////////////

#include "HelperFunctions_Include.h" /// .

/**
  @helper_function="HlprStringsAreEqual"
 
   Purpose:  Determine if two strings are identical.                                            <br>
                                                                                                <br>
   Notes:    Function is overloaded.                                                            <br>
                                                                                                <br>
   MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/E0Z9K731.aspx              <br>
             HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/CHD90W8E.aspx              <br>
*/
BOOLEAN HlprStringsAreEqual(_In_reads_(stringSizeAlpha) PCWSTR pStringAlpha,
                            _In_ SIZE_T stringSizeAlpha,
                            _In_reads_(stringSizeOmega) PCWSTR pStringOmega,
                            _In_ SIZE_T stringSizeOmega,
                            _In_ BOOLEAN isCaseSensitive)                    /* FALSE */
{
   BOOLEAN areEqual = FALSE;

   if(pStringAlpha &&
      pStringOmega)
   {
      if(stringSizeAlpha != stringSizeOmega)
         HLPR_BAIL;

      if(pStringAlpha == pStringOmega)
         areEqual = TRUE;
      else
      {
         if(stringSizeAlpha != stringSizeOmega)
            HLPR_BAIL;

         if(isCaseSensitive)
         {
            if(wcscmp(pStringAlpha,
                      pStringOmega))
               HLPR_BAIL;
         }
         else
         {
            if(_wcsnicmp(pStringAlpha,
                         pStringOmega,
                         stringSizeAlpha))
               HLPR_BAIL;
         }

         areEqual = TRUE;
      }
   }

   HLPR_BAIL_LABEL:

   return areEqual;
}

/**
 @helper_function="HlprStringsAreEqual"
 
   Purpose:  Determine if two strings are identical.                                            <br>
                                                                                                <br>
   Notes:    Function is overloaded.                                                            <br>
                                                                                                <br>
   MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/MS647539.aspx              <br>
*/
BOOLEAN HlprStringsAreEqual(_In_opt_ PCWSTR pStringAlpha,
                            _In_opt_ PCWSTR pStringOmega,
                            _In_ BOOLEAN isCaseSensitive) /* FALSE */
{
   BOOLEAN areEqual = FALSE;

   if(pStringAlpha &&
      pStringOmega)
   {
      UINT32 status    = NO_ERROR;
      size_t alphaSize = 0;
      size_t omegaSize = 0;

      status = StringCchLength(pStringAlpha,
                               STRSAFE_MAX_CCH,
                               &alphaSize);
      if(FAILED(status))
      {
         HlprLogError(L"HlprStringsAreEqual : StringCchLength() [status = %#x]",
                      status);

         HLPR_BAIL;
      }
      
      status = StringCchLength(pStringOmega,
                               STRSAFE_MAX_CCH,
                               &omegaSize);
      if(FAILED(status))
      {
         HlprLogError(L"HlprStringsAreEqual : StringCchLength() [status = %#x]",
                      status);

         HLPR_BAIL;
      }

      areEqual = HlprStringsAreEqual(pStringAlpha,
                                     alphaSize,
                                     pStringOmega,
                                     omegaSize,
                                     isCaseSensitive);
   }

   HLPR_BAIL_LABEL:

   return areEqual;
}

/**
 @helper_function="HlprStringsAreEqual"
 
   Purpose:  Determine if two strings are identical.                                            <br>
                                                                                                <br>
   Notes:    Function is overloaded.                                                            <br>
                                                                                                <br>
   MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/AA380518.aspx              <br>
*/
BOOLEAN HlprStringsAreEqual(_In_ const UNICODE_STRING* pUnicodeStringAlpha,
                            _In_ const UNICODE_STRING* pUnicodeStringOmega,
                            _In_ BOOLEAN isCaseSensitive)                   /* FALSE */
{
   BOOLEAN areEqual = FALSE;

#pragma warning(push)
#pragma warning(disable: 26018) /// constrined by UNICODE_STRING::Length

   if(pUnicodeStringAlpha &&
      pUnicodeStringAlpha->Length &&
      pUnicodeStringOmega &&
      pUnicodeStringOmega->Length)
      areEqual = HlprStringsAreEqual(pUnicodeStringAlpha->Buffer,
                                     pUnicodeStringAlpha->Length,
                                     pUnicodeStringOmega->Buffer,
                                     pUnicodeStringOmega->Length,
                                     isCaseSensitive);

#pragma warning(pop)

   return areEqual;
}

Our Services

  • What our customers say about us?

© 2011-2025 All Rights Reserved. Joya Systems. 4425 South Mopac Building II Suite 101 Austin, TX 78735 Tel: 800-DEV-KERNEL

Privacy Policy. Terms of use. Valid XHTML & CSS