mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 12:23:31 +00:00
- Acquire INetCfgLock before enumerating the items
- Check if a network component is enabled for a specific network adapter - Get INetCfgComponent from the INetComponent - Use ReportView for component dialog svn path=/trunk/; revision=36041
This commit is contained in:
@@ -24,6 +24,7 @@ typedef struct
|
||||
{
|
||||
INetConnectionPropertyUi *lpVtbl;
|
||||
INetConnection * pCon;
|
||||
INetCfgLock *NCfgLock;
|
||||
INetCfg * pNCfg;
|
||||
LONG ref;
|
||||
}INetConnectionPropertyUiImpl, *LPINetConnectionPropertyUiImpl;
|
||||
@@ -49,7 +50,7 @@ InitializePropertySheetPage(LPWSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWS
|
||||
}
|
||||
|
||||
VOID
|
||||
AddItemToListView(HWND hDlgCtrl, PNET_ITEM pItem, LPWSTR szName)
|
||||
AddItemToListView(HWND hDlgCtrl, PNET_ITEM pItem, LPWSTR szName, BOOL bChecked)
|
||||
{
|
||||
LVITEMW lvItem;
|
||||
|
||||
@@ -59,20 +60,63 @@ AddItemToListView(HWND hDlgCtrl, PNET_ITEM pItem, LPWSTR szName)
|
||||
lvItem.lParam = (LPARAM)pItem;
|
||||
lvItem.iItem = ListView_GetItemCount(hDlgCtrl);
|
||||
lvItem.iItem = SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&lvItem);
|
||||
ListView_SetCheckState(hDlgCtrl, lvItem.iItem, TRUE);
|
||||
ListView_SetCheckState(hDlgCtrl, lvItem.iItem, bChecked);
|
||||
}
|
||||
|
||||
BOOL
|
||||
GetINetCfgComponent(INetCfg * pNCfg, INetConnection * pNetCon, INetCfgComponent ** pOut)
|
||||
{
|
||||
LPWSTR pName;
|
||||
HRESULT hr;
|
||||
NETCON_PROPERTIES* pProps;
|
||||
INetCfgComponent * pNCg;
|
||||
ULONG Fetched;
|
||||
IEnumNetCfgComponent * pEnumCfg;
|
||||
|
||||
hr = INetConnection_GetProperties(pNetCon, &pProps);
|
||||
if (FAILED(hr))
|
||||
return FALSE;
|
||||
|
||||
hr = INetCfg_EnumComponents(pNCfg, &GUID_DEVCLASS_NET, &pEnumCfg);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
NcFreeNetconProperties(pProps);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
while(IEnumNetCfgComponent_Next(pEnumCfg, 1, &pNCg, &Fetched) == S_OK)
|
||||
{
|
||||
hr = INetCfgComponent_GetDisplayName(pNCg, &pName);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
if (!wcsicmp(pName, pProps->pszwDeviceName))
|
||||
{
|
||||
*pOut = pNCg;
|
||||
IEnumNetCfgComponent_Release(pEnumCfg);
|
||||
NcFreeNetconProperties(pProps);
|
||||
return TRUE;
|
||||
}
|
||||
CoTaskMemFree(pName);
|
||||
}
|
||||
INetCfgComponent_Release(pNCg);
|
||||
}
|
||||
IEnumNetCfgComponent_Release(pEnumCfg);
|
||||
NcFreeNetconProperties(pProps);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
VOID
|
||||
EnumComponents(HWND hDlgCtrl, INetCfg * pNCfg, const GUID * CompGuid, UINT Type)
|
||||
EnumComponents(HWND hDlgCtrl, INetConnectionPropertyUiImpl * This, INetCfg * pNCfg, const GUID * CompGuid, UINT Type)
|
||||
{
|
||||
HRESULT hr;
|
||||
IEnumNetCfgComponent * pENetCfg;
|
||||
INetCfgComponent *pNCfgComp;
|
||||
INetCfgComponent *pNCfgComp, *pAdapterCfgComp;
|
||||
INetCfgComponentBindings * pCompBind;
|
||||
ULONG Num;
|
||||
DWORD dwCharacteristics;
|
||||
LPOLESTR pDisplayName, pHelpText;
|
||||
PNET_ITEM pItem;
|
||||
|
||||
BOOL bChecked;
|
||||
|
||||
hr = INetCfg_EnumComponents(pNCfg, CompGuid, &pENetCfg);
|
||||
if (FAILED(hr))
|
||||
@@ -92,16 +136,29 @@ EnumComponents(HWND hDlgCtrl, INetCfg * pNCfg, const GUID * CompGuid, UINT Type)
|
||||
pHelpText = NULL;
|
||||
hr = INetCfgComponent_GetDisplayName(pNCfgComp, &pDisplayName);
|
||||
hr = INetCfgComponent_GetHelpText(pNCfgComp, &pHelpText);
|
||||
hr = INetCfgComponent_QueryInterface(pNCfgComp, &IID_INetCfgComponentBindings, (LPVOID*)&pCompBind);
|
||||
|
||||
pItem = CoTaskMemAlloc(sizeof(NET_ITEM));
|
||||
if (!pItem)
|
||||
continue;
|
||||
bChecked = FALSE;
|
||||
if (GetINetCfgComponent(pNCfg, This->pCon, &pAdapterCfgComp))
|
||||
{
|
||||
hr = INetCfgComponentBindings_IsBoundTo(pCompBind, pAdapterCfgComp);
|
||||
if (hr == S_OK)
|
||||
bChecked = TRUE;
|
||||
else
|
||||
bChecked = FALSE;
|
||||
INetCfgComponent_Release(pAdapterCfgComp);
|
||||
}
|
||||
pItem = CoTaskMemAlloc(sizeof(NET_ITEM));
|
||||
if (!pItem)
|
||||
continue;
|
||||
pItem->dwCharacteristics = dwCharacteristics;
|
||||
pItem->szHelp = pHelpText;
|
||||
pItem->Type = Type;
|
||||
pItem->pNCfgComp = pNCfgComp;
|
||||
pItem->NumPropDialogOpen = 0;
|
||||
AddItemToListView(hDlgCtrl, pItem, pDisplayName);
|
||||
|
||||
|
||||
AddItemToListView(hDlgCtrl, pItem, pDisplayName, bChecked);
|
||||
CoTaskMemFree(pDisplayName);
|
||||
}
|
||||
IEnumNetCfgComponent_Release(pENetCfg);
|
||||
@@ -113,11 +170,14 @@ InitializeLANPropertiesUIDlg(HWND hwndDlg, INetConnectionPropertyUiImpl * This)
|
||||
{
|
||||
HRESULT hr;
|
||||
INetCfg * pNCfg;
|
||||
INetCfgLock * pNCfgLock;
|
||||
HWND hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMPONENTSLIST);
|
||||
LVCOLUMNW lc;
|
||||
RECT rc;
|
||||
DWORD dwStyle;
|
||||
NETCON_PROPERTIES * pProperties;
|
||||
LPWSTR pDisplayName;
|
||||
LVITEMW li;
|
||||
|
||||
hr = INetConnection_GetProperties(This->pCon, &pProperties);
|
||||
if (FAILED(hr))
|
||||
@@ -155,6 +215,15 @@ InitializeLANPropertiesUIDlg(HWND hwndDlg, INetConnectionPropertyUiImpl * This)
|
||||
if (FAILED(hr))
|
||||
return;
|
||||
|
||||
hr = INetCfgLock_QueryInterface(pNCfg, &IID_INetCfgLock, (LPVOID*)&pNCfgLock);
|
||||
hr = INetCfgLock_AcquireWriteLock(pNCfgLock, 100, L"", &pDisplayName);
|
||||
if (hr == S_FALSE)
|
||||
{
|
||||
CoTaskMemFree(pDisplayName);
|
||||
return;
|
||||
}
|
||||
|
||||
This->NCfgLock = pNCfgLock;
|
||||
hr = INetCfg_Initialize(pNCfg, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
@@ -162,10 +231,16 @@ InitializeLANPropertiesUIDlg(HWND hwndDlg, INetConnectionPropertyUiImpl * This)
|
||||
return;
|
||||
}
|
||||
|
||||
EnumComponents(hDlgCtrl, pNCfg, &GUID_DEVCLASS_NETCLIENT, NET_TYPE_CLIENT);
|
||||
EnumComponents(hDlgCtrl, pNCfg, &GUID_DEVCLASS_NETSERVICE, NET_TYPE_SERVICE);
|
||||
EnumComponents(hDlgCtrl, pNCfg, &GUID_DEVCLASS_NETTRANS, NET_TYPE_PROTOCOL);
|
||||
EnumComponents(hDlgCtrl, This, pNCfg, &GUID_DEVCLASS_NETCLIENT, NET_TYPE_CLIENT);
|
||||
EnumComponents(hDlgCtrl, This, pNCfg, &GUID_DEVCLASS_NETSERVICE, NET_TYPE_SERVICE);
|
||||
EnumComponents(hDlgCtrl, This, pNCfg, &GUID_DEVCLASS_NETTRANS, NET_TYPE_PROTOCOL);
|
||||
This->pNCfg = pNCfg;
|
||||
|
||||
ZeroMemory(&li, sizeof(li));
|
||||
li.mask = LVIF_STATE;
|
||||
li.stateMask = (UINT)-1;
|
||||
li.state = LVIS_FOCUSED|LVIS_SELECTED;
|
||||
(void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
|
||||
}
|
||||
|
||||
VOID
|
||||
@@ -180,8 +255,7 @@ ShowNetworkComponentProperties(
|
||||
INetConnectionPropertyUi * pConUI = NULL;
|
||||
INetCfgComponent * pNCfgComp;
|
||||
PNET_ITEM pItem;
|
||||
INetCfgLock * pLock;
|
||||
LPWSTR pLockApp;
|
||||
WCHAR szBuffer[200];
|
||||
|
||||
hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMPONENTSLIST);
|
||||
Count = ListView_GetItemCount(hDlgCtrl);
|
||||
@@ -228,26 +302,15 @@ ShowNetworkComponentProperties(
|
||||
pItem = (PNET_ITEM)lvItem.lParam;
|
||||
pNCfgComp = (INetCfgComponent*) pItem->pNCfgComp;
|
||||
|
||||
hr = INetCfg_QueryInterface(This->pNCfg, &IID_INetCfgLock, (LPVOID*)&pLock);
|
||||
if (FAILED(hr))
|
||||
return;
|
||||
|
||||
hr = INetCfgLock_AcquireWriteLock(pLock, 10000, L"", &pLockApp);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
CoTaskMemFree(pLockApp);
|
||||
INetConnectionPropertyUi_Release(pConUI);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
hr = INetCfgComponent_RaisePropertyUi(pNCfgComp, GetParent(hwndDlg), NCRP_QUERY_PROPERTY_UI, (IUnknown*)pConUI);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = INetCfgComponent_RaisePropertyUi(pNCfgComp, GetParent(hwndDlg), NCRP_SHOW_PROPERTY_UI, (IUnknown*)pConUI);
|
||||
}
|
||||
|
||||
INetCfgLock_ReleaseWriteLock(pLock);
|
||||
swprintf(szBuffer, L"result %08x", hr);
|
||||
MessageBoxW(NULL, szBuffer, NULL, MB_OK);
|
||||
|
||||
INetConnectionPropertyUi_Release(pConUI);
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
|
||||
CAPTION "Allgemein"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "List3", IDC_COMPONENTSLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP | LVS_EX_FULLROWSELECT, 9, 71, 230, 55
|
||||
CONTROL "", IDC_COMPONENTSLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 9, 71, 230, 55
|
||||
LTEXT "Verbindung herstellen über:", -1, 9,9,217,8
|
||||
EDITTEXT IDC_NETCARDNAME, 9, 21, 230, 12, WS_BORDER | WS_TABSTOP | ES_READONLY
|
||||
PUSHBUTTON "&Konfigurieren", IDC_CONFIGURE, 189, 38, 50, 14
|
||||
|
||||
@@ -5,7 +5,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
|
||||
CAPTION "General"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "", IDC_COMPONENTSLIST, "SysListView32", LVS_LIST | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 9, 71, 230, 55
|
||||
CONTROL "", IDC_COMPONENTSLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 9, 71, 230, 55
|
||||
LTEXT "Connect Using:", -1, 9,9,217,8
|
||||
EDITTEXT IDC_NETCARDNAME, 9, 21, 230, 12, WS_BORDER | WS_DISABLED | WS_TABSTOP
|
||||
PUSHBUTTON "&Configure", IDC_CONFIGURE, 189, 38, 50, 14
|
||||
|
||||
@@ -5,7 +5,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
|
||||
CAPTION "Îáùèå"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "", IDC_COMPONENTSLIST, "SysListView32", LVS_LIST | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 9, 71, 230, 55
|
||||
CONTROL "", IDC_COMPONENTSLIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 9, 71, 230, 55
|
||||
LTEXT "Ïîäêëþ÷åíèå ÷åðåç:", -1, 9, 9, 217, 8
|
||||
EDITTEXT IDC_NETCARDNAME, 9, 21, 230, 12, WS_BORDER | WS_DISABLED | WS_TABSTOP
|
||||
PUSHBUTTON "&Íàñòðîèòü...", IDC_CONFIGURE, 174, 38, 65, 14
|
||||
|
||||
Reference in New Issue
Block a user