Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenlanconnectui.cpp
Go to the documentation of this file.
00001 #include <precomp.h> 00002 00003 WINE_DEFAULT_DEBUG_CHANNEL (shell); 00004 00008 00009 typedef enum 00010 { 00011 NET_TYPE_CLIENT = 1, 00012 NET_TYPE_SERVICE = 2, 00013 NET_TYPE_PROTOCOL = 3 00014 } NET_TYPE; 00015 00016 typedef struct 00017 { 00018 NET_TYPE Type; 00019 DWORD dwCharacteristics; 00020 LPWSTR szHelp; 00021 INetCfgComponent *pNCfgComp; 00022 UINT NumPropDialogOpen; 00023 } NET_ITEM, *PNET_ITEM; 00024 00025 class CNetConnectionPropertyUi: 00026 public INetConnectionPropertyUi2, 00027 public INetLanConnectionUiInfo, 00028 public INetConnectionConnectUi 00029 { 00030 public: 00031 CNetConnectionPropertyUi(); 00032 00033 // IUnknown 00034 virtual HRESULT WINAPI QueryInterface(REFIID riid, LPVOID *ppvOut); 00035 virtual ULONG WINAPI AddRef(); 00036 virtual ULONG WINAPI Release(); 00037 00038 // INetConnectionPropertyUi2 00039 virtual HRESULT WINAPI AddPages(HWND hwndParent, LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam); 00040 virtual HRESULT WINAPI GetIcon(DWORD dwSize, HICON *phIcon); 00041 00042 // INetLanConnectionUiInfo 00043 virtual HRESULT WINAPI GetDeviceGuid(GUID *pGuid); 00044 00045 // INetConnectionConnectUi 00046 virtual HRESULT WINAPI SetConnection(INetConnection* pCon); 00047 virtual HRESULT WINAPI Connect(HWND hwndParent, DWORD dwFlags); 00048 virtual HRESULT WINAPI Disconnect(HWND hwndParent, DWORD dwFlags); 00049 00050 private: 00051 BOOL GetINetCfgComponent(INetCfg *pNCfg, INetCfgComponent ** pOut); 00052 VOID EnumComponents(HWND hDlgCtrl, INetCfg *pNCfg, const GUID *CompGuid, UINT Type); 00053 VOID InitializeLANPropertiesUIDlg(HWND hwndDlg); 00054 VOID ShowNetworkComponentProperties(HWND hwndDlg); 00055 static INT_PTR CALLBACK LANPropertiesUIDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 00056 00057 INetConnection * pCon; 00058 INetCfgLock *NCfgLock; 00059 INetCfg * pNCfg; 00060 NETCON_PROPERTIES * pProperties; 00061 LONG ref; 00062 }; 00063 00064 CNetConnectionPropertyUi::CNetConnectionPropertyUi() 00065 { 00066 ref = 0; 00067 pCon = NULL; 00068 pNCfg = NULL; 00069 NCfgLock = NULL; 00070 pProperties = NULL; 00071 } 00072 00073 HPROPSHEETPAGE 00074 InitializePropertySheetPage(LPWSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle) 00075 { 00076 PROPSHEETPAGEW ppage; 00077 00078 memset(&ppage, 0x0, sizeof(PROPSHEETPAGEW)); 00079 ppage.dwSize = sizeof(PROPSHEETPAGEW); 00080 ppage.dwFlags = PSP_DEFAULT; 00081 ppage.pszTemplate = resname; 00082 ppage.pfnDlgProc = dlgproc; 00083 ppage.lParam = lParam; 00084 ppage.hInstance = netshell_hInstance; 00085 if (szTitle) 00086 { 00087 ppage.dwFlags |= PSP_USETITLE; 00088 ppage.pszTitle = szTitle; 00089 } 00090 return CreatePropertySheetPageW(&ppage); 00091 } 00092 00093 VOID 00094 AddItemToListView(HWND hDlgCtrl, PNET_ITEM pItem, LPWSTR szName, BOOL bChecked) 00095 { 00096 LVITEMW lvItem; 00097 00098 ZeroMemory(&lvItem, sizeof(lvItem)); 00099 lvItem.mask = LVIF_TEXT | LVIF_PARAM; 00100 lvItem.pszText = szName; 00101 lvItem.lParam = (LPARAM)pItem; 00102 lvItem.iItem = ListView_GetItemCount(hDlgCtrl); 00103 lvItem.iItem = SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&lvItem); 00104 ListView_SetCheckState(hDlgCtrl, lvItem.iItem, bChecked); 00105 } 00106 00107 BOOL 00108 CNetConnectionPropertyUi::GetINetCfgComponent(INetCfg *pNCfg, INetCfgComponent ** pOut) 00109 { 00110 LPWSTR pName; 00111 HRESULT hr; 00112 INetCfgComponent * pNCg; 00113 ULONG Fetched; 00114 IEnumNetCfgComponent * pEnumCfg; 00115 00116 hr = pNCfg->EnumComponents(&GUID_DEVCLASS_NET, &pEnumCfg); 00117 if (FAILED(hr)) 00118 { 00119 return FALSE; 00120 } 00121 00122 while (pEnumCfg->Next(1, &pNCg, &Fetched) == S_OK) 00123 { 00124 hr = pNCg->GetDisplayName(&pName); 00125 if (SUCCEEDED(hr)) 00126 { 00127 if (!_wcsicmp(pName, pProperties->pszwDeviceName)) 00128 { 00129 *pOut = pNCg; 00130 pEnumCfg->Release(); 00131 return TRUE; 00132 } 00133 CoTaskMemFree(pName); 00134 } 00135 pNCg->Release(); 00136 } 00137 pEnumCfg->Release(); 00138 return FALSE; 00139 } 00140 00141 VOID 00142 CNetConnectionPropertyUi::EnumComponents(HWND hDlgCtrl, INetCfg *pNCfg, const GUID *CompGuid, UINT Type) 00143 { 00144 HRESULT hr; 00145 IEnumNetCfgComponent * pENetCfg; 00146 INetCfgComponent *pNCfgComp, *pAdapterCfgComp; 00147 INetCfgComponentBindings * pCompBind; 00148 ULONG Num; 00149 DWORD dwCharacteristics; 00150 LPOLESTR pDisplayName, pHelpText; 00151 PNET_ITEM pItem; 00152 BOOL bChecked; 00153 00154 hr = pNCfg->EnumComponents(CompGuid, &pENetCfg); 00155 if (FAILED(hr)) 00156 { 00157 pNCfg->Release(); 00158 return; 00159 } 00160 while(pENetCfg->Next(1, &pNCfgComp, &Num) == S_OK) 00161 { 00162 hr = pNCfgComp->GetCharacteristics(&dwCharacteristics); 00163 if (SUCCEEDED(hr) && (dwCharacteristics & NCF_HIDDEN)) 00164 { 00165 pNCfgComp->Release(); 00166 continue; 00167 } 00168 pDisplayName = NULL; 00169 pHelpText = NULL; 00170 hr = pNCfgComp->GetDisplayName(&pDisplayName); 00171 hr = pNCfgComp->GetHelpText(&pHelpText); 00172 bChecked = TRUE; //ReactOS hack 00173 hr = pNCfgComp->QueryInterface(IID_INetCfgComponentBindings, (LPVOID*)&pCompBind); 00174 if (SUCCEEDED(hr)) 00175 { 00176 if (GetINetCfgComponent(pNCfg, &pAdapterCfgComp)) 00177 { 00178 hr = pCompBind->IsBoundTo(pAdapterCfgComp); 00179 if (hr == S_OK) 00180 bChecked = TRUE; 00181 else 00182 bChecked = FALSE; 00183 pAdapterCfgComp->Release(); 00184 pCompBind->Release(); 00185 } 00186 } 00187 00188 pItem = (NET_ITEM*)CoTaskMemAlloc(sizeof(NET_ITEM)); 00189 if (!pItem) 00190 continue; 00191 00192 pItem->dwCharacteristics = dwCharacteristics; 00193 pItem->szHelp = pHelpText; 00194 pItem->Type = (NET_TYPE)Type; 00195 pItem->pNCfgComp = pNCfgComp; 00196 pItem->NumPropDialogOpen = 0; 00197 00198 AddItemToListView(hDlgCtrl, pItem, pDisplayName, bChecked); 00199 CoTaskMemFree(pDisplayName); 00200 } 00201 pENetCfg->Release(); 00202 } 00203 00204 VOID 00205 CNetConnectionPropertyUi::InitializeLANPropertiesUIDlg(HWND hwndDlg) 00206 { 00207 HRESULT hr; 00208 INetCfg *pNCfg; 00209 INetCfgLock *pNCfgLock; 00210 HWND hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMPONENTSLIST); 00211 LVCOLUMNW lc; 00212 RECT rc; 00213 DWORD dwStyle; 00214 LPWSTR pDisplayName; 00215 LVITEMW li; 00216 00217 SendDlgItemMessageW(hwndDlg, IDC_NETCARDNAME, WM_SETTEXT, 0, (LPARAM)pProperties->pszwDeviceName); 00218 if (pProperties->dwCharacter & NCCF_SHOW_ICON) 00219 { 00220 /* check show item on taskbar*/ 00221 SendDlgItemMessageW(hwndDlg, IDC_SHOWTASKBAR, BM_SETCHECK, BST_CHECKED, 0); 00222 } 00223 if (pProperties->dwCharacter & NCCF_NOTIFY_DISCONNECTED) 00224 { 00225 /* check notify item */ 00226 SendDlgItemMessageW(hwndDlg, IDC_NOTIFYNOCONNECTION, BM_SETCHECK, BST_CHECKED, 0); 00227 } 00228 00229 memset(&lc, 0, sizeof(LV_COLUMN)); 00230 lc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT; 00231 lc.fmt = LVCFMT_FIXED_WIDTH; 00232 if (GetClientRect(hDlgCtrl, &rc)) 00233 { 00234 lc.mask |= LVCF_WIDTH; 00235 lc.cx = rc.right - rc.left; 00236 } 00237 lc.pszText = (LPWSTR)L""; 00238 (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 0, (LPARAM)&lc); 00239 dwStyle = (DWORD) SendMessage(hDlgCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0); 00240 dwStyle = dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES; 00241 SendMessage(hDlgCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle); 00242 00243 hr = CoCreateInstance(CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER, IID_INetCfg, (LPVOID*)&pNCfg); 00244 if (FAILED(hr)) 00245 return; 00246 00247 hr = pNCfg->QueryInterface(IID_INetCfgLock, (LPVOID*)&pNCfgLock); 00248 hr = pNCfgLock->AcquireWriteLock(100, L"", &pDisplayName); 00249 if (hr == S_FALSE) 00250 { 00251 CoTaskMemFree(pDisplayName); 00252 return; 00253 } 00254 00255 NCfgLock = pNCfgLock; 00256 hr = pNCfg->Initialize(NULL); 00257 if (FAILED(hr)) 00258 { 00259 pNCfg->Release(); 00260 return; 00261 } 00262 00263 EnumComponents(hDlgCtrl, pNCfg, &GUID_DEVCLASS_NETCLIENT, NET_TYPE_CLIENT); 00264 EnumComponents(hDlgCtrl, pNCfg, &GUID_DEVCLASS_NETSERVICE, NET_TYPE_SERVICE); 00265 EnumComponents(hDlgCtrl, pNCfg, &GUID_DEVCLASS_NETTRANS, NET_TYPE_PROTOCOL); 00266 this->pNCfg = pNCfg; 00267 00268 ZeroMemory(&li, sizeof(li)); 00269 li.mask = LVIF_STATE; 00270 li.stateMask = (UINT)-1; 00271 li.state = LVIS_FOCUSED|LVIS_SELECTED; 00272 (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li); 00273 } 00274 00275 VOID 00276 CNetConnectionPropertyUi::ShowNetworkComponentProperties(HWND hwndDlg) 00277 { 00278 LVITEMW lvItem; 00279 HWND hDlgCtrl; 00280 UINT Index, Count; 00281 HRESULT hr; 00282 INetCfgComponent *pNCfgComp; 00283 PNET_ITEM pItem; 00284 00285 hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMPONENTSLIST); 00286 Count = ListView_GetItemCount(hDlgCtrl); 00287 if (!Count) 00288 return; 00289 00290 ZeroMemory(&lvItem, sizeof(LVITEMW)); 00291 lvItem.mask = LVIF_PARAM | LVIF_STATE; 00292 lvItem.stateMask = (UINT)-1; 00293 for (Index = 0; Index < Count; Index++) 00294 { 00295 lvItem.iItem = Index; 00296 if (SendMessageW(hDlgCtrl, LVM_GETITEMW, 0, (LPARAM)&lvItem)) 00297 { 00298 if (lvItem.state & LVIS_SELECTED) 00299 break; 00300 } 00301 } 00302 00303 if (!(lvItem.state & LVIS_SELECTED)) 00304 { 00305 return; 00306 } 00307 00308 pItem = (PNET_ITEM)lvItem.lParam; 00309 pNCfgComp = (INetCfgComponent*)pItem->pNCfgComp; 00310 hr = pNCfgComp->RaisePropertyUi(GetParent(hwndDlg), NCRP_QUERY_PROPERTY_UI, (INetConnectionConnectUi*)this); 00311 if (SUCCEEDED(hr)) 00312 { 00313 hr = pNCfgComp->RaisePropertyUi(GetParent(hwndDlg), NCRP_SHOW_PROPERTY_UI, (INetConnectionConnectUi*)this); 00314 } 00315 } 00316 00317 INT_PTR 00318 CALLBACK 00319 CNetConnectionPropertyUi::LANPropertiesUIDlg( 00320 HWND hwndDlg, 00321 UINT uMsg, 00322 WPARAM wParam, 00323 LPARAM lParam) 00324 { 00325 PROPSHEETPAGE *page; 00326 LPNMLISTVIEW lppl; 00327 LVITEMW li; 00328 PNET_ITEM pItem; 00329 CNetConnectionPropertyUi * This; 00330 LPPSHNOTIFY lppsn; 00331 DWORD dwShowIcon; 00332 HRESULT hr; 00333 WCHAR szKey[200]; 00334 LPOLESTR pStr; 00335 HKEY hKey; 00336 00337 switch(uMsg) 00338 { 00339 case WM_INITDIALOG: 00340 page = (PROPSHEETPAGE*)lParam; 00341 This = (CNetConnectionPropertyUi*)page->lParam; 00342 This->InitializeLANPropertiesUIDlg(hwndDlg); 00343 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)This); 00344 return TRUE; 00345 case WM_NOTIFY: 00346 lppl = (LPNMLISTVIEW) lParam; 00347 lppsn = (LPPSHNOTIFY) lParam; 00348 if (lppsn->hdr.code == PSN_APPLY) 00349 { 00350 This = (CNetConnectionPropertyUi*)GetWindowLongPtr(hwndDlg, DWLP_USER); 00351 if (This->pNCfg) 00352 { 00353 hr = This->pNCfg->Apply(); 00354 if (FAILED(hr)) 00355 return PSNRET_INVALID; 00356 } 00357 00358 if (SendDlgItemMessageW(hwndDlg, IDC_SHOWTASKBAR, BM_GETCHECK, 0, 0) == BST_CHECKED) 00359 dwShowIcon = 1; 00360 else 00361 dwShowIcon = 0; 00362 00363 00364 if (StringFromCLSID((CLSID)This->pProperties->guidId, &pStr) == ERROR_SUCCESS) 00365 { 00366 swprintf(szKey, L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection", pStr); 00367 CoTaskMemFree(pStr); 00368 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szKey, 0, KEY_WRITE, &hKey) == ERROR_SUCCESS) 00369 { 00370 RegSetValueExW(hKey, L"ShowIcon", 0, REG_DWORD, (LPBYTE)&dwShowIcon, sizeof(DWORD)); 00371 RegCloseKey(hKey); 00372 } 00373 } 00374 00375 return PSNRET_NOERROR; 00376 } 00377 #if 0 00378 else if (lppsn->hdr.code == PSN_CANCEL) 00379 { 00380 This = (CNetConnectionPropertyUi*)GetWindowLongPtr(hwndDlg, DWLP_USER); 00381 if (This->pNCfg) 00382 { 00383 hr = This->pNCfg->Cancel(); 00384 if (SUCCEEDED(hr)) 00385 return PSNRET_NOERROR; 00386 else 00387 return PSNRET_INVALID; 00388 } 00389 return PSNRET_NOERROR; 00390 } 00391 #endif 00392 if (lppl->hdr.code == LVN_ITEMCHANGING) 00393 { 00394 ZeroMemory(&li, sizeof(li)); 00395 li.mask = LVIF_PARAM; 00396 li.iItem = lppl->iItem; 00397 if (!SendMessageW(lppl->hdr.hwndFrom, LVM_GETITEMW, 0, (LPARAM)&li)) 00398 return TRUE; 00399 00400 pItem = (PNET_ITEM)li.lParam; 00401 if (!pItem) 00402 return TRUE; 00403 00404 if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED)) 00405 { 00406 /* new focused item */ 00407 if (pItem->dwCharacteristics & NCF_NOT_USER_REMOVABLE) 00408 EnableWindow(GetDlgItem(hwndDlg, IDC_UNINSTALL), FALSE); 00409 else 00410 EnableWindow(GetDlgItem(hwndDlg, IDC_UNINSTALL), TRUE); 00411 00412 if (pItem->dwCharacteristics & NCF_HAS_UI) 00413 EnableWindow(GetDlgItem(hwndDlg, IDC_PROPERTIES), TRUE); 00414 else 00415 EnableWindow(GetDlgItem(hwndDlg, IDC_PROPERTIES), FALSE); 00416 00417 SendDlgItemMessageW(hwndDlg, IDC_DESCRIPTION, WM_SETTEXT, 0, (LPARAM)pItem->szHelp); 00418 } 00419 } 00420 break; 00421 case WM_COMMAND: 00422 if (LOWORD(wParam) == IDC_PROPERTIES) 00423 { 00424 This = (CNetConnectionPropertyUi*) GetWindowLongPtr(hwndDlg, DWLP_USER); 00425 This->ShowNetworkComponentProperties(hwndDlg); 00426 return FALSE; 00427 } 00428 break; 00429 } 00430 return FALSE; 00431 } 00432 00433 HRESULT 00434 WINAPI 00435 CNetConnectionPropertyUi::QueryInterface( 00436 REFIID iid, 00437 LPVOID *ppvObj) 00438 { 00439 LPOLESTR pStr; 00440 *ppvObj = NULL; 00441 00442 if (IsEqualIID (iid, IID_IUnknown) || 00443 IsEqualIID (iid, IID_INetConnectionPropertyUi) || 00444 IsEqualIID (iid, IID_INetConnectionPropertyUi2)) 00445 { 00446 *ppvObj = (INetConnectionPropertyUi2*)this; 00447 AddRef(); 00448 return S_OK; 00449 } 00450 else if (IsEqualIID(iid, IID_INetLanConnectionUiInfo)) 00451 { 00452 *ppvObj = (INetLanConnectionUiInfo*)this; 00453 AddRef(); 00454 return S_OK; 00455 } 00456 else if (IsEqualIID(iid, IID_INetConnectionConnectUi)) 00457 { 00458 *ppvObj = (INetConnectionConnectUi*)this; 00459 AddRef(); 00460 return S_OK; 00461 } 00462 00463 StringFromCLSID((CLSID)iid, &pStr); 00464 MessageBoxW(NULL, pStr, L"INetConnectionPropertyUi_fnQueryInterface", MB_OK); 00465 CoTaskMemFree(pStr); 00466 return E_NOINTERFACE; 00467 } 00468 00469 ULONG 00470 WINAPI 00471 CNetConnectionPropertyUi::AddRef() 00472 { 00473 ULONG refCount = InterlockedIncrement(&ref); 00474 00475 return refCount; 00476 } 00477 00478 ULONG 00479 WINAPI 00480 CNetConnectionPropertyUi::Release() 00481 { 00482 ULONG refCount = InterlockedDecrement(&ref); 00483 00484 if (!refCount) 00485 { 00486 if (pNCfg) 00487 { 00488 pNCfg->Uninitialize(); 00489 pNCfg->Release(); 00490 } 00491 if (NCfgLock) 00492 { 00493 NCfgLock->Release(); 00494 } 00495 if (pProperties) 00496 { 00497 NcFreeNetconProperties(pProperties); 00498 } 00499 delete this; 00500 } 00501 00502 return refCount; 00503 } 00504 00505 HRESULT 00506 WINAPI 00507 CNetConnectionPropertyUi::AddPages( 00508 HWND hwndParent, 00509 LPFNADDPROPSHEETPAGE pfnAddPage, 00510 LPARAM lParam) 00511 { 00512 HPROPSHEETPAGE hProp; 00513 BOOL ret; 00514 HRESULT hr = E_FAIL; 00515 INITCOMMONCONTROLSEX initEx; 00516 00517 initEx.dwSize = sizeof(initEx); 00518 initEx.dwICC = ICC_LISTVIEW_CLASSES; 00519 if(!InitCommonControlsEx(&initEx)) 00520 return E_FAIL; 00521 00522 hr = pCon->GetProperties(&pProperties); 00523 if (FAILED(hr)) 00524 return hr; 00525 00526 hProp = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_NETPROPERTIES), LANPropertiesUIDlg, (LPARAM)this, pProperties->pszwName); 00527 if (hProp) 00528 { 00529 ret = (*pfnAddPage)(hProp, lParam); 00530 if (ret) 00531 { 00532 hr = NOERROR; 00533 } 00534 else 00535 { 00536 DestroyPropertySheetPage(hProp); 00537 } 00538 } 00539 return hr; 00540 } 00541 00542 HRESULT 00543 WINAPI 00544 CNetConnectionPropertyUi::GetIcon( 00545 DWORD dwSize, 00546 HICON *phIcon) 00547 { 00548 return E_NOTIMPL; 00549 } 00550 00551 HRESULT 00552 WINAPI 00553 CNetConnectionPropertyUi::GetDeviceGuid(GUID *pGuid) 00554 { 00555 CopyMemory(pGuid, &pProperties->guidId, sizeof(GUID)); 00556 return S_OK; 00557 } 00558 00559 HRESULT 00560 WINAPI 00561 CNetConnectionPropertyUi::SetConnection(INetConnection* pCon) 00562 { 00563 if (this->pCon) 00564 this->pCon->Release(); 00565 00566 if (!pCon) 00567 return E_POINTER; 00568 00569 this->pCon = pCon; 00570 pCon->AddRef(); 00571 return S_OK; 00572 } 00573 00574 HRESULT 00575 WINAPI 00576 CNetConnectionPropertyUi::Connect( 00577 HWND hwndParent, 00578 DWORD dwFlags) 00579 { 00580 if (!pCon) 00581 return E_POINTER; //FIXME 00582 00583 00584 if (dwFlags & NCUC_NO_UI) 00585 return pCon->Connect(); 00586 00587 return E_FAIL; 00588 } 00589 00590 HRESULT 00591 WINAPI 00592 CNetConnectionPropertyUi::Disconnect( 00593 HWND hwndParent, 00594 DWORD dwFlags) 00595 { 00596 WCHAR szBuffer[100]; 00597 swprintf(szBuffer, L"INetConnectionConnectUi_fnDisconnect flags %x\n", dwFlags); 00598 MessageBoxW(NULL, szBuffer, NULL, MB_OK); 00599 00600 return S_OK; 00601 } 00602 00603 HRESULT WINAPI LanConnectUI_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv) 00604 { 00605 TRACE("LanConnectUI_Constructor\n"); 00606 00607 if (!ppv) 00608 return E_POINTER; 00609 00610 if (pUnkOuter) 00611 return CLASS_E_NOAGGREGATION; 00612 00613 CNetConnectionPropertyUi *pConPropUi = new CNetConnectionPropertyUi; 00614 if (!pConPropUi) 00615 return E_OUTOFMEMORY; 00616 00617 pConPropUi->AddRef(); 00618 HRESULT hr = pConPropUi->QueryInterface(riid, ppv); 00619 pConPropUi->Release(); 00620 00621 return hr; 00622 } Generated on Sat May 26 2012 04:24:01 for ReactOS by
1.7.6.1
|