summaryrefslogtreecommitdiff
path: root/network/trans/WFPSampler/lib/HelperFunctions_GUID.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'network/trans/WFPSampler/lib/HelperFunctions_GUID.cpp')
-rw-r--r--network/trans/WFPSampler/lib/HelperFunctions_GUID.cpp318
1 files changed, 318 insertions, 0 deletions
diff --git a/network/trans/WFPSampler/lib/HelperFunctions_GUID.cpp b/network/trans/WFPSampler/lib/HelperFunctions_GUID.cpp
new file mode 100644
index 00000000..eda8106e
--- /dev/null
+++ b/network/trans/WFPSampler/lib/HelperFunctions_GUID.cpp
@@ -0,0 +1,318 @@
+////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2012 Microsoft Corporation. All Rights Reserved.
+//
+// Module Name:
+// HelperFunctions_GUID.cpp
+//
+// Abstract:
+// This module contains functions which assist in actions pertaining to GUIDs.
+//
+// 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>
+// {
+// GUID - Function pertains to GUID objects.
+// }
+// <Action>
+// {
+// Are - Function compares values.
+// Create - Function allocates and fills memory.
+// Destroy - Function cleans up and frees memory.
+// Is - Function compares values.
+// Populate - Function fills memory with values.
+// Purge - Function cleans up values.
+// }
+// <Modifier>
+// {
+// Equal - Function determines equality between values.
+// Null - Function determines if value is Null or empty.
+// String - Function acts on a null terminated wide character string.
+// }
+//
+// Private Functions:
+//
+// Public Functions:
+// HlprGUIDsAreEqual(),
+// HlprGUIDCreate(),
+// HlprGUIDCreateString(),
+// HlprGUIDDestroy(),
+// HlprGUIDDestroyString(),
+// HlprGUIDIsNull()
+// HlprGUIDPopulate(),
+// HlprGUIDPurge(),
+//
+// Author:
+// Dusty Harper (DHarper)
+//
+// Revision History:
+//
+// [ Month ][Day] [Year] - [Revision]-[ Comments ]
+// May 01, 2010 - 1.0 - Creation
+//
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include "HelperFunctions_Include.h" /// .
+
+static const GUID NULL_GUID = {0};
+
+/**
+ @helper_function="HlprGUIDPurge"
+
+ Purpose: Cleanup a GUID. <br>
+ <br>
+ Notes: <br>
+ <br>
+ MSDN_Ref: <br>
+*/
+VOID HlprGUIDPurge(_Inout_ GUID* pGUID)
+{
+ if(pGUID)
+ ZeroMemory(pGUID,
+ sizeof(GUID));
+
+ return;
+}
+
+/**
+ @helper_function="HlprGUIDDestroy"
+
+ Purpose: Cleanup and free a GUID. <br>
+ <br>
+ Notes: <br>
+ <br>
+ MSDN_Ref: <br>
+*/
+_At_(*ppGUID, _Post_ _Null_)
+VOID HlprGUIDDestroy(_Inout_ GUID** ppGUID)
+{
+ if(ppGUID)
+ {
+ if(*ppGUID)
+ HlprGUIDPurge(*ppGUID);
+
+ HLPR_DELETE(*ppGUID);
+ }
+
+ return;
+}
+
+/**
+ @helper_function="HlprGUIDPopulate"
+
+ Purpose: Populate a GUID with a random value. <br>
+ <br>
+ Notes: <br>
+ <br>
+ MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/AA379205.aspx <br>
+*/
+_Success_(return == NO_ERROR)
+UINT32 HlprGUIDPopulate(_Inout_ GUID* pGUID)
+{
+ UINT32 status = NO_ERROR;
+
+ if(pGUID)
+ {
+ status = UuidCreate(pGUID);
+
+ if(status != RPC_S_OK && // 0
+ status != RPC_S_UUID_LOCAL_ONLY) // 1824
+ {
+ // RPC_S_UUID_NO_ADDRESS // 1739
+ HlprLogError(L"HlprGUIDPopulate : UuidCreate() [status: %#x]",
+ status);
+ }
+ else
+ status = NO_ERROR;
+ }
+ else
+ {
+ status = ERROR_INVALID_PARAMETER;
+
+ HlprLogError(L"HlprGUIDPopulate() [status: %#x][pGUID: %#p]",
+ status,
+ pGUID);
+ }
+
+ return status;
+}
+
+/**
+ @helper_function="HlprGUIDCreate"
+
+ Purpose: Allocate and populate a GUID with a random value. <br>
+ <br>
+ Notes: The caller is responsible for freeing the allocated memory using
+ HlprGUIDDestroy(). <br>
+ <br>
+ MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/AA379205.aspx <br>
+*/
+_At_(*ppGUID, _Pre_ _Null_)
+_When_(return != NO_ERROR, _At_(*ppGUID, _Post_ _Null_))
+_When_(return == NO_ERROR, _At_(*ppGUID, _Post_ _Notnull_))
+_Success_(return == NO_ERROR)
+UINT32 HlprGUIDCreate(_Outptr_ GUID** ppGUID)
+{
+ UINT32 status = NO_ERROR;
+
+ if(ppGUID)
+ {
+ HLPR_NEW(*ppGUID,
+ GUID);
+ HLPR_BAIL_ON_ALLOC_FAILURE(*ppGUID,
+ status);
+
+ status = HlprGUIDPopulate(*ppGUID);
+
+ HLPR_BAIL_LABEL:
+
+ if(status != NO_ERROR)
+ {
+ HLPR_DELETE(*ppGUID);
+ }
+ }
+ else
+ {
+ status = ERROR_INVALID_PARAMETER;
+
+ HlprLogError(L"HlprGUIDCreate() [status: %#x][ppGUID: %#p]",
+ status,
+ ppGUID);
+ }
+
+ return status;
+}
+
+/**
+ @helper_function="HlprGUIDDestroyString"
+
+ Purpose: Cleanup and free a string representing a GUID. <br>
+ <br>
+ Notes: Use if string was allocated by HlprGUIDCreateString(). <br>
+ <br>
+ MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/AA378483.aspx <br>
+*/
+_When_(return != NO_ERROR, _At_(*ppGUIDString, _Post_ _Notnull_))
+_When_(return == NO_ERROR, _At_(*ppGUIDString, _Post_ _Null_))
+_Success_(return == NO_ERROR)
+UINT32 HlprGUIDDestroyString(_Inout_ PWSTR* ppGUIDString)
+{
+ UINT32 status = NO_ERROR;
+
+ if(ppGUIDString &&
+ *ppGUIDString)
+ {
+ status = RpcStringFree(ppGUIDString);
+ if(status != RPC_S_OK)
+ HlprLogError(L"HlprGUIDDestroyString : RpcStringFree() [status: %#x]",
+ status);
+ else
+ *ppGUIDString = 0;
+ }
+
+ return status;
+}
+
+/**
+ @helper_function="HlprGUIDCreateString"
+
+ Purpose: Allocate and populate a string representing the provided GUID. <br>
+ <br>
+ Notes: The caller is responsible for freeing the allocated memory using
+ HlprGUIDDestroyString(). <br>
+ <br>
+ MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/AA379352.aspx <br>
+*/
+_Success_(return != 0)
+PWSTR HlprGUIDCreateString(_In_ const GUID* pGUID)
+{
+ PWSTR pGUIDString = 0;
+
+ if(pGUID)
+ {
+ UINT32 status = NO_ERROR;
+
+ status = UuidToString(pGUID,
+ &pGUIDString);
+ if(status != NO_ERROR)
+ {
+ HlprLogError(L"HlprGUIDCreateString : UuidToString() [status: %#x]",
+ status);
+ }
+ }
+
+ return pGUIDString;
+}
+
+/**
+ @helper_function="HlprGUIDsAreEqual"
+
+ Purpose: Determine if two GUIDs are identical. <br>
+ <br>
+ Notes: <br>
+ <br>
+ MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/AA379329.aspx <br>
+*/
+BOOLEAN HlprGUIDsAreEqual(_In_ const GUID* pGUIDAlpha,
+ _In_ const GUID* pGUIDOmega)
+{
+ RPC_STATUS status = RPC_S_OK;
+ UINT32 areEqual = FALSE;
+
+ if(pGUIDAlpha == 0 ||
+ pGUIDOmega == 0)
+ {
+ if((pGUIDAlpha == 0 &&
+ pGUIDOmega) ||
+ (pGUIDAlpha &&
+ pGUIDOmega == 0))
+
+ HLPR_BAIL;
+ }
+
+ if(pGUIDAlpha == 0 &&
+ pGUIDOmega == 0)
+ {
+ areEqual = TRUE;
+
+ HLPR_BAIL;
+ }
+
+ areEqual = UuidEqual((UUID*)pGUIDAlpha,
+ (UUID*)pGUIDOmega,
+ &status);
+ if(status != RPC_S_OK)
+ HlprLogError(L"HlprGUIDsAreEqual : UuidEqual() [status %#x]",
+ status);
+
+ HLPR_BAIL_LABEL:
+
+ return (BOOLEAN)areEqual;
+}
+
+/**
+ @helper_function="HlprGUIDIsNull"
+
+ Purpose: Determine if a GUID is a NULL GUID. <br>
+ <br>
+ Notes: <br>
+ <br>
+ MSDN_Ref: <br>
+*/
+BOOLEAN HlprGUIDIsNull(_In_ const GUID* pGUID)
+{
+ return HlprGUIDsAreEqual(pGUID,
+ (GUID*)&NULL_GUID);;
+}