ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

netid.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.