2 * Copyright (C) 2007 Jeff Latimer
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "hnetcfg_private.h"
23 static HINSTANCE instance
;
25 typedef HRESULT (*fnCreateInstance
)( IUnknown
*pUnkOuter
, LPVOID
*ppObj
);
29 IClassFactory IClassFactory_iface
;
30 fnCreateInstance pfnCreateInstance
;
33 static inline hnetcfg_cf
*impl_from_IClassFactory( IClassFactory
*iface
)
35 return CONTAINING_RECORD(iface
, hnetcfg_cf
, IClassFactory_iface
);
38 static HRESULT WINAPI
hnetcfg_cf_QueryInterface( IClassFactory
*iface
, REFIID riid
, LPVOID
*ppobj
)
40 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
41 IsEqualGUID(riid
, &IID_IClassFactory
))
43 IClassFactory_AddRef( iface
);
47 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
51 static ULONG WINAPI
hnetcfg_cf_AddRef( IClassFactory
*iface
)
56 static ULONG WINAPI
hnetcfg_cf_Release( IClassFactory
*iface
)
61 static HRESULT WINAPI
hnetcfg_cf_CreateInstance( IClassFactory
*iface
, LPUNKNOWN pOuter
,
62 REFIID riid
, LPVOID
*ppobj
)
64 hnetcfg_cf
*This
= impl_from_IClassFactory( iface
);
68 TRACE("%p %s %p\n", pOuter
, debugstr_guid(riid
), ppobj
);
73 return CLASS_E_NOAGGREGATION
;
75 r
= This
->pfnCreateInstance( pOuter
, (LPVOID
*)&punk
);
79 r
= IUnknown_QueryInterface( punk
, riid
, ppobj
);
83 IUnknown_Release( punk
);
87 static HRESULT WINAPI
hnetcfg_cf_LockServer( IClassFactory
*iface
, BOOL dolock
)
89 FIXME("(%p)->(%d)\n", iface
, dolock
);
93 static const struct IClassFactoryVtbl hnetcfg_cf_vtbl
=
95 hnetcfg_cf_QueryInterface
,
98 hnetcfg_cf_CreateInstance
,
102 static hnetcfg_cf fw_manager_cf
= { { &hnetcfg_cf_vtbl
}, NetFwMgr_create
};
103 static hnetcfg_cf fw_app_cf
= { { &hnetcfg_cf_vtbl
}, NetFwAuthorizedApplication_create
};
104 static hnetcfg_cf fw_openport_cf
= { { &hnetcfg_cf_vtbl
}, NetFwOpenPort_create
};
105 static hnetcfg_cf fw_policy2_cf
= { { &hnetcfg_cf_vtbl
}, NetFwPolicy2_create
};
107 BOOL WINAPI
DllMain(HINSTANCE hInstDLL
, DWORD fdwReason
, LPVOID reserved
)
109 TRACE("(0x%p, %d, %p)\n", hInstDLL
, fdwReason
, reserved
);
112 case DLL_WINE_PREATTACH
:
114 case DLL_PROCESS_ATTACH
:
116 DisableThreadLibraryCalls(hInstDLL
);
118 case DLL_PROCESS_DETACH
:
126 HRESULT WINAPI
DllGetClassObject( REFCLSID rclsid
, REFIID iid
, LPVOID
*ppv
)
128 IClassFactory
*cf
= NULL
;
130 TRACE("%s %s %p\n", debugstr_guid(rclsid
), debugstr_guid(iid
), ppv
);
132 if (IsEqualGUID( rclsid
, &CLSID_NetFwMgr
))
134 cf
= &fw_manager_cf
.IClassFactory_iface
;
136 else if (IsEqualGUID( rclsid
, &CLSID_NetFwAuthorizedApplication
))
138 cf
= &fw_app_cf
.IClassFactory_iface
;
140 else if (IsEqualGUID( rclsid
, &CLSID_NetFwOpenPort
))
142 cf
= &fw_openport_cf
.IClassFactory_iface
;
144 else if (IsEqualGUID( rclsid
, &CLSID_NetFwPolicy2
))
146 cf
= &fw_policy2_cf
.IClassFactory_iface
;
149 if (!cf
) return CLASS_E_CLASSNOTAVAILABLE
;
150 return IClassFactory_QueryInterface( cf
, iid
, ppv
);
153 HRESULT WINAPI
DllCanUnloadNow( void )
158 /***********************************************************************
159 * DllRegisterServer (HNETCFG.@)
161 HRESULT WINAPI
DllRegisterServer(void)
163 return __wine_register_resources( instance
);
166 /***********************************************************************
167 * DllUnregisterServer (HNETCFG.@)
169 HRESULT WINAPI
DllUnregisterServer(void)
171 return __wine_unregister_resources( instance
);