summaryrefslogtreecommitdiff
path: root/network/wlan/ihvsampleui/iunk.h
diff options
context:
space:
mode:
authorkarlf <[email protected]>2016-08-11 13:28:13 -0700
committerkarlf <[email protected]>2016-08-11 13:28:13 -0700
commit96eb96dfb613e4c745db6bd1f53a92fe7e2290fc (patch)
treead5f3ede5cbcd6b598677ce41bcf8318471bdd92 /network/wlan/ihvsampleui/iunk.h
parent687b274aa38fd05c8c26e3068932121876d7f745 (diff)
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'network/wlan/ihvsampleui/iunk.h')
-rw-r--r--network/wlan/ihvsampleui/iunk.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/network/wlan/ihvsampleui/iunk.h b/network/wlan/ihvsampleui/iunk.h
new file mode 100644
index 00000000..9b8242c5
--- /dev/null
+++ b/network/wlan/ihvsampleui/iunk.h
@@ -0,0 +1,54 @@
+//
+// Copyright (C) Microsoft Corporation 2005
+// IHV UI Extension sample
+//
+
+// Common macro based implementation of IUnknown
+// using a interface table approach
+
+#define IMPLEMENT_REFCOUNT()\
+ ULONG m_crefCount;\
+ \
+ STDMETHODIMP_(ULONG) AddRef(void)\
+ {\
+ return InterlockedIncrement((PLONG)&m_crefCount);\
+ }\
+ \
+ _At_(this, __drv_aliasesMem)\
+ STDMETHODIMP_(ULONG) Release(void)\
+ {\
+ ULONG res = InterlockedDecrement((PLONG)&m_crefCount);\
+ if (res == 0)\
+ {\
+ delete this;\
+ }\
+ return res;\
+ }
+
+#define BEGIN_INTERFACE_TABLE()\
+ IMPLEMENT_REFCOUNT()\
+ STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject)\
+ {\
+ if (riid == IID_IUnknown)\
+ {\
+ *ppvObject = reinterpret_cast<IUnknown*>(this);\
+ }
+
+#define IMPLEMENTS_INTERFACE(Itf)\
+ else if (riid == IID_ ## Itf)\
+ {\
+ *ppvObject = static_cast<Itf*>(this);\
+ }
+
+#define END_INTERFACE_TABLE()\
+ else \
+ {\
+ *ppvObject = NULL;\
+ return E_NOINTERFACE;\
+ }\
+ \
+ reinterpret_cast<IUnknown *>(*ppvObject)->AddRef();\
+ \
+ return S_OK;\
+ }
+