Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygennetid.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS System Control Panel Applet 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: dll/win32/netid/netid.c 00005 * PURPOSE: Network ID Page 00006 * COPYRIGHT: Thomas Weidenmueller <w3seek@reactos.org> 00007 * Dmitry Chapyshev <dmitry@reactos.org> 00008 * 00009 */ 00010 00011 #include <windows.h> 00012 #include <tchar.h> 00013 #include <lm.h> 00014 #include <prsht.h> 00015 #include "resource.h" 00016 00017 static INT_PTR CALLBACK 00018 NetIDPageProc(IN HWND hwndDlg, 00019 IN UINT uMsg, 00020 IN WPARAM wParam, 00021 IN LPARAM lParam); 00022 00023 static HINSTANCE hDllInstance; 00024 00025 00026 static 00027 INT_PTR CALLBACK 00028 DNSSuffixPropDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) 00029 { 00030 switch (Msg) 00031 { 00032 case WM_COMMAND: 00033 { 00034 switch (LOWORD(wParam)) 00035 { 00036 case IDCANCEL: 00037 case IDOK: 00038 EndDialog(hDlg, LOWORD(wParam)); 00039 break; 00040 } 00041 } 00042 break; 00043 } 00044 00045 return FALSE; 00046 } 00047 00048 static VOID 00049 SetRadioBtnState(HWND hDlg, BOOL IsDomain) 00050 { 00051 SendDlgItemMessage(hDlg, 1008, BM_SETCHECK, (WPARAM)IsDomain, 0); 00052 SendDlgItemMessage(hDlg, 1004, BM_SETCHECK, (WPARAM)!IsDomain, 0); 00053 EnableWindow(GetDlgItem(hDlg, 116), IsDomain); 00054 EnableWindow(GetDlgItem(hDlg, 1007), !IsDomain); 00055 } 00056 00057 static VOID 00058 DisableControls(HWND hDlg) 00059 { 00060 EnableWindow(GetDlgItem(hDlg, 1008), FALSE); 00061 EnableWindow(GetDlgItem(hDlg, 1004), FALSE); 00062 EnableWindow(GetDlgItem(hDlg, 116), FALSE); 00063 EnableWindow(GetDlgItem(hDlg, 1007), FALSE); 00064 } 00065 00066 static 00067 BOOL 00068 IsValidComputerName(LPCWSTR s) 00069 { 00070 int i; 00071 00072 for (i = 0; i <= wcslen(s); i++) 00073 { 00074 if (s[i] == L'!' || s[i] == L'@' || s[i] == L'#' || s[i] == L'$' 00075 || s[i] == L'^' || s[i] == L'&' || s[i] == L'\\' || s[i] == L'|' 00076 || s[i] == L')' || s[i] == L'(' || s[i] == L'{' || s[i] == L'"' 00077 || s[i] == L'}' || s[i] == L'~' || s[i] == L'/' || s[i] == L'\'' 00078 || s[i] == L'=' || s[i] == L':' || s[i] == L';' || s[i] == L'+' 00079 || s[i] == L'<' || s[i] == L'>' || s[i] == L'?' || s[i] == L'[' 00080 || s[i] == L']' || s[i] == L'`' || s[i] == L'%' || s[i] == L'_' 00081 || s[i] == L'.') 00082 return FALSE; 00083 } 00084 00085 return TRUE; 00086 } 00087 00088 static 00089 INT_PTR CALLBACK 00090 NetworkPropDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) 00091 { 00092 switch (Msg) 00093 { 00094 case WM_INITDIALOG: 00095 { 00096 LPWKSTA_INFO_101 wki = NULL; 00097 DWORD Size = MAX_COMPUTERNAME_LENGTH + 1; 00098 TCHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1]; 00099 TCHAR MsgText[MAX_PATH * 2]; 00100 LPWSTR JoinName; 00101 NETSETUP_JOIN_STATUS JoinStatus; 00102 00103 if (LoadString(hDllInstance, 25, MsgText, sizeof(MsgText) / sizeof(TCHAR))) 00104 SetDlgItemText(hDlg, 1017, MsgText); 00105 00106 SendMessage(GetDlgItem(hDlg, 1002), EM_SETLIMITTEXT, MAX_COMPUTERNAME_LENGTH, 0); 00107 00108 if (GetComputerName(ComputerName, &Size)) 00109 { 00110 SetDlgItemText(hDlg, 1002, ComputerName); 00111 SetDlgItemText(hDlg, 1001, ComputerName); 00112 } 00113 00114 if (NetGetJoinInformation(NULL, &JoinName, &JoinStatus) != NERR_Success) 00115 { 00116 SetRadioBtnState(hDlg, FALSE); 00117 00118 if (NetWkstaGetInfo(NULL, 00119 101, 00120 (LPBYTE*)&wki) == NERR_Success) 00121 { 00122 SetDlgItemText(hDlg, 00123 1007, 00124 wki->wki101_langroup); 00125 } 00126 else DisableControls(hDlg); 00127 00128 if (wki) NetApiBufferFree(wki); 00129 } 00130 else 00131 { 00132 switch (JoinStatus) 00133 { 00134 case NetSetupDomainName: 00135 SetDlgItemText(hDlg, 116, JoinName); 00136 SetRadioBtnState(hDlg, TRUE); 00137 break; 00138 00139 case NetSetupWorkgroupName: 00140 SetDlgItemText(hDlg, 1007, JoinName); 00141 SetRadioBtnState(hDlg, FALSE); 00142 break; 00143 00144 case NetSetupUnjoined: 00145 break; 00146 00147 case NetSetupUnknownStatus: 00148 default: 00149 { 00150 SetRadioBtnState(hDlg, FALSE); 00151 00152 if (NetWkstaGetInfo(NULL, 00153 101, 00154 (LPBYTE*)&wki) == NERR_Success) 00155 { 00156 SetDlgItemText(hDlg, 00157 1007, 00158 wki->wki101_langroup); 00159 } 00160 else DisableControls(hDlg); 00161 00162 if (wki) NetApiBufferFree(wki); 00163 break; 00164 } 00165 } 00166 00167 if (JoinName) NetApiBufferFree(JoinName); 00168 } 00169 } 00170 break; 00171 00172 case WM_COMMAND: 00173 { 00174 switch (LOWORD(wParam)) 00175 { 00176 case 1002: 00177 if (HIWORD(wParam) == EN_CHANGE) 00178 { 00179 TCHAR szText[MAX_COMPUTERNAME_LENGTH + 1]; 00180 00181 GetWindowText(GetDlgItem(hDlg, 1002), szText, MAX_COMPUTERNAME_LENGTH + 1); 00182 SetDlgItemText(hDlg, 1001, szText); 00183 } 00184 break; 00185 00186 case 1008: /* Domain radio button */ 00187 case 1004: /* Workgroup radio button */ 00188 if (SendDlgItemMessage(hDlg, 1008, BM_GETCHECK, 0, 0) == BST_CHECKED) 00189 SetRadioBtnState(hDlg, TRUE); 00190 else 00191 SetRadioBtnState(hDlg, FALSE); 00192 break; 00193 00194 case 1003: 00195 DialogBox(hDllInstance, 00196 MAKEINTRESOURCE(IDD_PROPPAGEDNSANDNETBIOS), 00197 hDlg, 00198 DNSSuffixPropDlgProc); 00199 break; 00200 00201 case IDOK: 00202 { 00203 DWORD Size = MAX_COMPUTERNAME_LENGTH + 1; 00204 TCHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1]; 00205 TCHAR NewComputerName[MAX_COMPUTERNAME_LENGTH + 1]; 00206 00207 if (GetComputerName(ComputerName, &Size)) 00208 { 00209 if (GetWindowText(GetDlgItem(hDlg, 1002), 00210 NewComputerName, 00211 (MAX_COMPUTERNAME_LENGTH + 1))) 00212 { 00213 if (_tcscmp(ComputerName, NewComputerName) != 0) 00214 { 00215 if (!IsValidComputerName(NewComputerName)) 00216 { 00217 TCHAR szText[MAX_PATH], szMsgText[MAX_PATH]; 00218 00219 LoadString(hDllInstance, 1030, szText, sizeof(szText) / sizeof(TCHAR)); 00220 00221 swprintf(szMsgText, szText, NewComputerName); 00222 MessageBox(hDlg, szMsgText, NULL, MB_OK | MB_ICONERROR); 00223 SetFocus(GetDlgItem(hDlg, 1002)); 00224 break; 00225 } 00226 else if (!SetComputerName(NewComputerName)) 00227 { 00228 TCHAR szMsgText[MAX_PATH]; 00229 00230 LoadString(hDllInstance, 4001, szMsgText, sizeof(szMsgText) / sizeof(TCHAR)); 00231 00232 MessageBox(hDlg, szMsgText, NULL, MB_OK | MB_ICONERROR); 00233 } 00234 else 00235 { 00236 TCHAR szMsgTitle[MAX_PATH], szMsgText[MAX_PATH]; 00237 00238 LoadString(hDllInstance, 4000, szMsgTitle, sizeof(szMsgTitle) / sizeof(TCHAR)); 00239 LoadString(hDllInstance, 24, szMsgText, sizeof(szMsgText) / sizeof(TCHAR)); 00240 00241 MessageBox(hDlg, szMsgText, szMsgTitle, MB_OK | MB_ICONINFORMATION); 00242 00243 NetIDPageProc(GetParent(hDlg), WM_INITDIALOG, 0, 0); 00244 } 00245 } 00246 } 00247 } 00248 00249 EndDialog(hDlg, LOWORD(wParam)); 00250 } 00251 break; 00252 00253 case IDCANCEL: 00254 EndDialog(hDlg, LOWORD(wParam)); 00255 break; 00256 } 00257 } 00258 break; 00259 } 00260 00261 return FALSE; 00262 } 00263 00264 static INT_PTR CALLBACK 00265 NetIDPageProc(IN HWND hwndDlg, 00266 IN UINT uMsg, 00267 IN WPARAM wParam, 00268 IN LPARAM lParam) 00269 { 00270 INT_PTR Ret = 0; 00271 00272 UNREFERENCED_PARAMETER(lParam); 00273 00274 switch (uMsg) 00275 { 00276 case WM_INITDIALOG: 00277 { 00278 /* Display computer name */ 00279 LPWKSTA_INFO_101 wki = NULL; 00280 DWORD Size = MAX_COMPUTERNAME_LENGTH + 1; 00281 TCHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1]; 00282 if (GetComputerName(ComputerName,&Size)) 00283 { 00284 SetDlgItemText(hwndDlg, 00285 IDC_COMPUTERNAME, 00286 ComputerName); 00287 } 00288 if (NetWkstaGetInfo(NULL, 00289 101, 00290 (LPBYTE*)&wki) == NERR_Success) 00291 { 00292 SetDlgItemText(hwndDlg, 00293 IDC_WORKGROUPDOMAIN_NAME, 00294 wki->wki101_langroup); 00295 } 00296 00297 if (wki) NetApiBufferFree(wki); 00298 00299 Ret = TRUE; 00300 break; 00301 } 00302 00303 case WM_COMMAND: 00304 switch (LOWORD(wParam)) 00305 { 00306 case IDC_NETWORK_PROPERTY: 00307 DialogBox(hDllInstance, 00308 MAKEINTRESOURCE(IDD_PROPPAGECOMPNAMECHENGE), 00309 hwndDlg, 00310 NetworkPropDlgProc); 00311 break; 00312 } 00313 break; 00314 } 00315 00316 return Ret; 00317 } 00318 00319 HPROPSHEETPAGE WINAPI 00320 CreateNetIDPropertyPage(VOID) 00321 { 00322 PROPSHEETPAGE psp = {0}; 00323 00324 psp.dwSize = sizeof(psp); 00325 psp.dwFlags = PSP_DEFAULT; 00326 psp.hInstance = hDllInstance; 00327 psp.pszTemplate = MAKEINTRESOURCE(IDD_PROPPAGECOMPUTER); 00328 psp.pfnDlgProc = NetIDPageProc; 00329 00330 return CreatePropertySheetPage(&psp); 00331 } 00332 00333 BOOL WINAPI 00334 DllMain(IN HINSTANCE hinstDLL, 00335 IN DWORD dwReason, 00336 IN LPVOID lpvReserved) 00337 { 00338 switch (dwReason) 00339 { 00340 case DLL_PROCESS_ATTACH: 00341 hDllInstance = hinstDLL; 00342 DisableThreadLibraryCalls(hinstDLL); 00343 break; 00344 } 00345 00346 return TRUE; 00347 } Generated on Fri May 25 2012 04:23:37 for ReactOS by
1.7.6.1
|