1 /* 2 * Copyright 2016 Alistair Leslie-Hughes 3 * 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. 8 * 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. 13 * 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 17 */ 18 #define COBJMACROS 19 #include <stdio.h> 20 21 #include "windows.h" 22 #include "ole2.h" 23 #include "oleauto.h" 24 #include "olectl.h" 25 #include "dispex.h" 26 27 #include "wine/test.h" 28 29 #include "netfw.h" 30 31 static void test_policy2_rules(INetFwPolicy2 *policy2) 32 { 33 HRESULT hr; 34 INetFwRules *rules, *rules2; 35 INetFwServiceRestriction *restriction; 36 37 hr = INetFwPolicy2_QueryInterface(policy2, &IID_INetFwRules, (void**)&rules); 38 ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr); 39 40 hr = INetFwPolicy2_get_Rules(policy2, &rules); 41 ok(hr == S_OK, "got %08x\n", hr); 42 43 hr = INetFwPolicy2_get_Rules(policy2, &rules2); 44 ok(hr == S_OK, "got %08x\n", hr); 45 ok(rules == rules2, "Different pointers\n"); 46 47 hr = INetFwPolicy2_get_ServiceRestriction(policy2, &restriction); 48 todo_wine ok(hr == S_OK, "got %08x\n", hr); 49 if(hr == S_OK) 50 { 51 INetFwRules *rules3; 52 53 hr = INetFwServiceRestriction_get_Rules(restriction, &rules3); 54 ok(hr == S_OK, "got %08x\n", hr); 55 ok(rules != rules3, "same pointers\n"); 56 57 if(rules3) 58 INetFwRules_Release(rules3); 59 INetFwServiceRestriction_Release(restriction); 60 } 61 62 INetFwRules_Release(rules); 63 INetFwRules_Release(rules2); 64 } 65 66 static void test_interfaces(void) 67 { 68 INetFwMgr *manager; 69 INetFwPolicy *policy; 70 INetFwPolicy2 *policy2; 71 HRESULT hr; 72 73 hr = CoCreateInstance(&CLSID_NetFwMgr, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, 74 &IID_INetFwMgr, (void**)&manager); 75 ok(hr == S_OK, "NetFwMgr create failed: %08x\n", hr); 76 77 hr = INetFwMgr_QueryInterface(manager, &IID_INetFwPolicy, (void**)&policy); 78 ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr); 79 80 hr = INetFwMgr_QueryInterface(manager, &IID_INetFwPolicy2, (void**)&policy2); 81 ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr); 82 83 hr = INetFwMgr_get_LocalPolicy(manager, &policy); 84 ok(hr == S_OK, "got 0x%08x\n", hr); 85 86 hr = INetFwPolicy_QueryInterface(policy, &IID_INetFwPolicy2, (void**)&policy2); 87 ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr); 88 89 INetFwPolicy_Release(policy); 90 91 hr = CoCreateInstance(&CLSID_NetFwPolicy2, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, 92 &IID_INetFwPolicy2, (void**)&policy2); 93 if(hr == S_OK) 94 { 95 test_policy2_rules(policy2); 96 97 INetFwPolicy2_Release(policy2); 98 } 99 else 100 win_skip("NetFwPolicy2 object is not supported: %08x\n", hr); 101 102 INetFwMgr_Release(manager); 103 } 104 105 START_TEST(policy) 106 { 107 INetFwMgr *manager; 108 HRESULT hr; 109 110 CoInitialize(NULL); 111 112 hr = CoCreateInstance(&CLSID_NetFwMgr, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, 113 &IID_INetFwMgr, (void**)&manager); 114 if(FAILED(hr)) 115 { 116 win_skip("NetFwMgr object is not supported: %08x\n", hr); 117 CoUninitialize(); 118 return; 119 } 120 121 INetFwMgr_Release(manager); 122 123 test_interfaces(); 124 125 126 CoUninitialize(); 127 } 128