[ros-diffs] [ekohl] 33921: Enable the user to modify the profile information of a user account.

ekohl at svn.reactos.org ekohl at svn.reactos.org
Tue Jun 10 23:56:19 CEST 2008


Author: ekohl
Date: Tue Jun 10 16:56:19 2008
New Revision: 33921

URL: http://svn.reactos.org/svn/reactos?rev=33921&view=rev
Log:
Enable the user to modify the profile information of a user account.

Modified:
    trunk/reactos/dll/cpl/usrmgr/userprops.c

Modified: trunk/reactos/dll/cpl/usrmgr/userprops.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/usrmgr/userprops.c?rev=33921&r1=33920&r2=33921&view=diff
==============================================================================
--- trunk/reactos/dll/cpl/usrmgr/userprops.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/usrmgr/userprops.c [iso-8859-1] Tue Jun 10 16:56:19 2008
@@ -18,10 +18,16 @@
 
 #define VALID_GENERAL_FLAGS (UF_PASSWD_CANT_CHANGE | UF_DONT_EXPIRE_PASSWD | UF_ACCOUNTDISABLE | UF_LOCKOUT)
 
+typedef struct _PROFILE_USER_DATA
+{
+    TCHAR szUserName[1];
+} PROFILE_USER_DATA, *PPROFILE_USER_DATA;
+
 
 
 static VOID
-GetProfileData(HWND hwndDlg, LPTSTR lpUserName)
+GetUserProfileData(HWND hwndDlg,
+                   PPROFILE_USER_DATA pUserData)
 {
     PUSER_INFO_3 userInfo = NULL;
     NET_API_STATUS status;
@@ -30,7 +36,7 @@
     INT i;
     INT nSel;
 
-    status = NetUserGetInfo(NULL, lpUserName, 3, (LPBYTE*)&userInfo);
+    status = NetUserGetInfo(NULL, pUserData->szUserName, 3, (LPBYTE*)&userInfo);
     if (status != NERR_Success)
         return;
 
@@ -67,6 +73,118 @@
                 CB_SETCURSEL, nSel, 0);
 
     NetApiBufferFree(userInfo);
+}
+
+
+static BOOL
+SetUserProfileData(HWND hwndDlg,
+                   PPROFILE_USER_DATA pUserData)
+{
+    PUSER_INFO_3 pUserInfo = NULL;
+    LPTSTR pszProfilePath = NULL;
+    LPTSTR pszScriptPath = NULL;
+    LPTSTR pszHomeDir = NULL;
+    LPTSTR pszHomeDrive = NULL;
+    NET_API_STATUS status;
+#if 0
+    DWORD dwIndex;
+#endif
+    INT nLength;
+    INT nIndex;
+
+    NetUserGetInfo(NULL, pUserData->szUserName, 3, (LPBYTE*)&pUserInfo);
+
+    /* Get the profile path */
+    nLength = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_USER_PROFILE_PATH));
+    if (nLength == 0)
+    {
+        pUserInfo->usri3_profile = NULL;
+    }
+    else
+    {
+        pszProfilePath = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR));
+        GetDlgItemText(hwndDlg, IDC_USER_PROFILE_PATH, pszProfilePath, nLength + 1);
+        pUserInfo->usri3_profile = pszProfilePath;
+    }
+
+    /* Get the script path */
+    nLength = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_USER_PROFILE_SCRIPT));
+    if (nLength == 0)
+    {
+        pUserInfo->usri3_script_path = NULL;
+    }
+    else
+    {
+        pszScriptPath = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR));
+        GetDlgItemText(hwndDlg, IDC_USER_PROFILE_SCRIPT, pszScriptPath, nLength + 1);
+        pUserInfo->usri3_script_path = pszScriptPath;
+    }
+
+    if (IsDlgButtonChecked(hwndDlg, IDC_USER_PROFILE_LOCAL) == BST_CHECKED)
+    {
+        /* Local home directory */
+        nLength = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_USER_PROFILE_LOCAL_PATH));
+        if (nLength == 0)
+        {
+            pUserInfo->usri3_home_dir = NULL;
+        }
+        else
+        {
+            pszHomeDir = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR));
+            GetDlgItemText(hwndDlg, IDC_USER_PROFILE_LOCAL_PATH, pszHomeDir, nLength + 1);
+            pUserInfo->usri3_home_dir = pszHomeDir;
+        }
+    }
+    else
+    {
+        /* Remote home directory */
+        nLength = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_USER_PROFILE_REMOTE_PATH));
+        if (nLength == 0)
+        {
+            pUserInfo->usri3_home_dir = NULL;
+        }
+        else
+        {
+            pszHomeDir = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR));
+            GetDlgItemText(hwndDlg, IDC_USER_PROFILE_REMOTE_PATH, pszHomeDir, nLength + 1);
+            pUserInfo->usri3_home_dir = pszHomeDir;
+        }
+
+        nIndex = SendMessage(GetDlgItem(hwndDlg, IDC_USER_PROFILE_DRIVE), CB_GETCURSEL, 0, 0);
+        if (nIndex != CB_ERR)
+        {
+            nLength = SendMessage(GetDlgItem(hwndDlg, IDC_USER_PROFILE_DRIVE), CB_GETLBTEXTLEN, nIndex, 0);
+            pszHomeDrive = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR));
+            SendMessage(GetDlgItem(hwndDlg, IDC_USER_PROFILE_DRIVE), CB_GETLBTEXT, nIndex, (LPARAM)pszHomeDrive);
+            pUserInfo->usri3_home_dir_drive = pszHomeDrive;
+        }
+    }
+
+#if 0
+    status = NetUserSetInfo(NULL, pUserData->szUserName, 3, (LPBYTE)pUserInfo, &dwIndex);
+    if (status != NERR_Success)
+    {
+        DebugPrintf(_T("Status: %lu  Index: %lu"), status, dwIndex);
+    }
+#else
+    status = NERR_Success;
+#endif
+
+    if (pszProfilePath)
+        HeapFree(GetProcessHeap(), 0, pszProfilePath);
+
+    if (pszScriptPath)
+        HeapFree(GetProcessHeap(), 0, pszScriptPath);
+
+    if (pszHomeDir)
+        HeapFree(GetProcessHeap(), 0, pszHomeDir);
+
+    if (pszHomeDrive)
+        HeapFree(GetProcessHeap(), 0, pszHomeDrive);
+
+    NetApiBufferFree(pUserInfo);
+
+    return (status == NERR_Success);
 }
 
 
@@ -76,21 +194,38 @@
                     WPARAM wParam,
                     LPARAM lParam)
 {
+    PPROFILE_USER_DATA pUserData;
 
     UNREFERENCED_PARAMETER(lParam);
     UNREFERENCED_PARAMETER(wParam);
     UNREFERENCED_PARAMETER(hwndDlg);
 
+    pUserData= (PPROFILE_USER_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
+
     switch (uMsg)
     {
         case WM_INITDIALOG:
-            GetProfileData(hwndDlg,
-                           (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
+            pUserData = (PPROFILE_USER_DATA)HeapAlloc(GetProcessHeap(),
+                                                      HEAP_ZERO_MEMORY,
+                                                      sizeof(PROFILE_USER_DATA) + 
+                                                      lstrlen((LPTSTR)((PROPSHEETPAGE *)lParam)->lParam) * sizeof(TCHAR));
+            lstrcpy(pUserData->szUserName, (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
+
+            SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pUserData);
+
+            GetUserProfileData(hwndDlg,
+                               pUserData);
             break;
 
         case WM_COMMAND:
             switch (LOWORD(wParam))
             {
+                case IDC_USER_PROFILE_PATH:
+                case IDC_USER_PROFILE_SCRIPT:
+                    if (HIWORD(wParam) == EN_CHANGE)
+                        PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+                    break;
+
                 case IDC_USER_PROFILE_LOCAL:
                     EnableWindow(GetDlgItem(hwndDlg, IDC_USER_PROFILE_LOCAL_PATH), TRUE);
                     EnableWindow(GetDlgItem(hwndDlg, IDC_USER_PROFILE_DRIVE), FALSE);
@@ -102,6 +237,18 @@
                     EnableWindow(GetDlgItem(hwndDlg, IDC_USER_PROFILE_DRIVE), TRUE);
                     EnableWindow(GetDlgItem(hwndDlg, IDC_USER_PROFILE_REMOTE_PATH), TRUE);
                     break;
+            }
+            break;
+
+        case WM_DESTROY:
+            HeapFree(GetProcessHeap(), 0, pUserData);
+            break;
+
+        case WM_NOTIFY:
+            if (((LPPSHNOTIFY)lParam)->hdr.code == PSN_APPLY)
+            {
+                SetUserProfileData(hwndDlg, pUserData);
+                return TRUE;
             }
             break;
     }
@@ -231,7 +378,7 @@
 
 
 static VOID
-GetGeneralUserData(HWND hwndDlg,
+GetUserGeneralData(HWND hwndDlg,
                    PGENERAL_USER_DATA pUserData)
 {
     PUSER_INFO_3 pUserInfo = NULL;
@@ -253,7 +400,7 @@
 
 
 static BOOL
-SetGeneralUserData(HWND hwndDlg,
+SetUserGeneralData(HWND hwndDlg,
                    PGENERAL_USER_DATA pUserData)
 {
     PUSER_INFO_3 pUserInfo = NULL;
@@ -344,7 +491,7 @@
 
             SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pUserData);
 
-            GetGeneralUserData(hwndDlg,
+            GetUserGeneralData(hwndDlg,
                                pUserData);
             break;
 
@@ -390,7 +537,7 @@
         case WM_NOTIFY:
             if (((LPPSHNOTIFY)lParam)->hdr.code == PSN_APPLY)
             {
-                SetGeneralUserData(hwndDlg, pUserData);
+                SetUserGeneralData(hwndDlg, pUserData);
                 return TRUE;
             }
             break;



More information about the Ros-diffs mailing list