summaryrefslogtreecommitdiff
path: root/network/wlan/ihvsampleui/IHVSampleUI.cpp
blob: f93218bc298174ee459e83d88a53506c950bf0ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//
// Copyright (C) Microsoft Corporation 2005
// IHV UI Extension sample
//


#include "precomp.h"

CIHVClassFactory *g_pIHVClassFactory = NULL;

// instance handle to dll
HINSTANCE g_hInst;

// object ref count
long g_objRefCount = 0;
long g_serverLock = 0; //lock count on server

//
// DllRegisterServer - Adds entries to the system registry
//
STDAPI DllRegisterServer()
{
    HRESULT hr = S_OK;

    hr = CRegHelper::RegisterServer();

    return hr;
}

//
// DllUnregisterServer - Removes entries from the system registry
//
STDAPI DllUnregisterServer()
{
    HRESULT hr = S_OK;

    hr = CRegHelper::UnregisterServer();

    return hr;
}



//
// Used to determine whether the DLL can be unloaded by COM
//
STDAPI DllCanUnloadNow(void)
{
	if ((g_objRefCount == 0) && (g_serverLock == 0) /*&& (_Module.GetLockCount() == 0)*/)
	{
		return S_OK;
	}
	else
	{
		return S_FALSE;
	}
}



STDAPI 
DllGetClassObject(
   _In_ REFCLSID rclsid, 
   _In_ REFIID riid, 
   _Outptr_ LPVOID *ppv)
{
   HRESULT hr = E_NOINTERFACE;

   if (NULL == g_pIHVClassFactory)
   {
       g_pIHVClassFactory = new(std::nothrow) CIHVClassFactory();
       if (NULL == g_pIHVClassFactory)
       {
           hr = E_OUTOFMEMORY;
       }
   }

   if(NULL != g_pIHVClassFactory && 
        (rclsid == GUID_SAMPLE_IHVUI_CLSID || rclsid == IID_IWizardExtension))
   {
        hr = g_pIHVClassFactory->QueryInterface(riid, ppv);
   }
   return hr;
}


//+----------------------------------------------------------------------------
//
// Function:  DllMain
//
// Synopsis:  Main entry point into the DLL.
//
// Arguments: HINSTANCE  hinstDLL - Our HINSTANCE
//            DWORD  fdwReason - The reason we are being called.
//            LPVOID  lpvReserved - Reserved
//
// Returns:   BOOL WINAPI - TRUE - always
//
//+----------------------------------------------------------------------------
extern "C" 
BOOL WINAPI 
DllMain(
    HINSTANCE  hInstDLL, 
    DWORD  fdwReason, 
    LPVOID  lpvReserved
    ) 
{
    UNREFERENCED_PARAMETER(lpvReserved);

    if (DLL_PROCESS_ATTACH == fdwReason)
    {
        // Set our global instance handle
        g_hInst = hInstDLL;
        (VOID)DisableThreadLibraryCalls(hInstDLL);
    }
    else if (DLL_PROCESS_DETACH == fdwReason)
    {
    }

    return TRUE;
}