handle the WM_SIZE message and resize/move the controls appropriately
Modified: trunk/reactos/lib/aclui/aclui.c Modified: trunk/reactos/lib/aclui/aclui_De.rc Modified: trunk/reactos/lib/aclui/aclui_En.rc Modified: trunk/reactos/lib/aclui/aclui_Nl.rc Modified: trunk/reactos/lib/aclui/aclui_Sv.rc Modified: trunk/reactos/lib/aclui/checklist.c Modified: trunk/reactos/lib/aclui/misc.c Modified: trunk/reactos/lib/aclui/precomp.h Modified: trunk/reactos/lib/aclui/resource.h
--- trunk/reactos/lib/aclui/aclui.c 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/aclui.c 2005-08-06 01:14:09 UTC (rev 17092) @@ -30,12 +30,17 @@
HINSTANCE hDllInstance;
+static PCWSTR ObjectPickerAttributes[] =
+{
+ L"ObjectSid",
+};
+
static VOID
DestroySecurityPage(IN PSECURITY_PAGE sp)
{
- if(sp->hiUsrs != NULL)
+ if(sp->hiPrincipals != NULL)
{
- ImageList_Destroy(sp->hiUsrs);
+ ImageList_Destroy(sp->hiPrincipals);
} HeapFree(GetProcessHeap(), @@ -46,11 +51,11 @@
} static VOID
-FreeAceList(IN PACE_LISTITEM *AceListHead)
+FreePrincipalsList(IN PPRINCIPAL_LISTITEM *PrincipalsListHead)
{
- PACE_LISTITEM CurItem, NextItem;
+ PPRINCIPAL_LISTITEM CurItem, NextItem;
- CurItem = *AceListHead;
+ CurItem = *PrincipalsListHead;
while (CurItem != NULL)
{
/* free the SID string if present */
@@ -67,16 +72,16 @@
CurItem = NextItem; }
- *AceListHead = NULL;
+ *PrincipalsListHead = NULL;
}
-static PACE_LISTITEM -FindSidInAceList(IN PACE_LISTITEM AceListHead, - IN PSID Sid)
+static PPRINCIPAL_LISTITEM +FindSidInPrincipalsList(IN PPRINCIPAL_LISTITEM PrincipalsListHead, + IN PSID Sid)
{
- PACE_LISTITEM CurItem;
+ PPRINCIPAL_LISTITEM CurItem;
- for (CurItem = AceListHead;
+ for (CurItem = PrincipalsListHead;
CurItem != NULL;
CurItem = CurItem->Next)
{
@@ -91,7 +96,7 @@
} static VOID
-ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
+ReloadPrincipalsList(IN PSECURITY_PAGE sp)
{
PSECURITY_DESCRIPTOR SecurityDescriptor;
BOOL DaclPresent, DaclDefaulted;
@@ -99,7 +104,7 @@
HRESULT hRet; /* delete the cached ACL */
- FreeAceList(&sp->AceListHead);
+ FreePrincipalsList(&sp->PrincipalsListHead);
/* query the ACL */ hRet = sp->psi->lpVtbl->GetSecurity(sp->psi, @@ -113,7 +118,7 @@
&Dacl,
&DaclDefaulted))
{
- PACE_LISTITEM AceListItem, *NextAcePtr;
+ PPRINCIPAL_LISTITEM AceListItem, *NextAcePtr;
PSID Sid; PVOID Ace; ULONG AceIndex; @@ -121,7 +126,7 @@
SID_NAME_USE SidNameUse; DWORD LookupResult;
- NextAcePtr = &sp->AceListHead;
+ NextAcePtr = &sp->PrincipalsListHead;
for (AceIndex = 0; AceIndex < Dacl->AceCount; @@ -133,11 +138,11 @@
Sid = (PSID)&((PACCESS_ALLOWED_ACE)Ace)->SidStart;
- if (!FindSidInAceList(sp->AceListHead,
- Sid))
+ if (!FindSidInPrincipalsList(sp->PrincipalsListHead,
+ Sid))
{
SidLength = GetLengthSid(Sid);
-
+
AccountNameSize = 0; DomainNameSize = 0; @@ -153,7 +158,7 @@
/* allocate the ace */ AceListItem = HeapAlloc(GetProcessHeap(), 0,
- sizeof(ACE_LISTITEM) +
+ sizeof(PRINCIPAL_LISTITEM) +
SidLength + ((AccountNameSize + DomainNameSize) * sizeof(WCHAR))); if (AceListItem != NULL) @@ -183,7 +188,7 @@
continue; } }
-
+
if (AccountNameSize == 0)
{
AceListItem->AccountName = NULL;
@@ -206,9 +211,9 @@
{
LSA_HANDLE LsaHandle;
NTSTATUS Status;
-
+
AceListItem->DisplayString = NULL;
-
+
/* read the domain of the SID */ if (OpenLSAPolicyHandle(sp->ServerName, POLICY_LOOKUP_NAMES | POLICY_VIEW_LOCAL_INFORMATION, @@ -238,7 +243,7 @@
Domain = NULL; DomainName = NULL; }
-
+
AceListItem->SidNameUse = Names->Use; switch (Names->Use) @@ -272,7 +277,7 @@
if (AceListItem->DisplayString != NULL)
{
WCHAR *s;
-
+
/* NOTE: LSA_UNICODE_STRINGs are not always NULL-terminated! */ wcscpy(AceListItem->DisplayString, @@ -292,7 +297,7 @@
*(s++) = L')'; *s = L'\0'; }
-
+
/* mark the ace as a user unless it's a BUILTIN account */ if (PolicyAccountDomainInfo == NULL) @@ -302,26 +307,26 @@
} break; }
-
+
case SidTypeWellKnownGroup:
{
/* make the user believe this is a group */
AceListItem->SidNameUse = SidTypeGroup;
break;
}
-
+
default:
{
DPRINT("Unhandled SID type: 0x%x\n", Names->Use);
break;
}
}
-
+
if (PolicyAccountDomainInfo != NULL)
{
LsaFreeMemory(PolicyAccountDomainInfo);
}
-
+
LsaFreeMemory(ReferencedDomain); LsaFreeMemory(Names); } @@ -341,10 +346,10 @@
} static INT
-AddAceListEntry(IN PSECURITY_PAGE sp, - IN PACE_LISTITEM AceListItem, - IN INT Index, - IN BOOL Selected)
+AddPrincipalListEntry(IN PSECURITY_PAGE sp, + IN PPRINCIPAL_LISTITEM PrincipalListItem, + IN INT Index, + IN BOOL Selected)
{
LVITEM li;
@@ -353,8 +358,8 @@
li.iSubItem = 0; li.state = (Selected ? LVIS_SELECTED : 0); li.stateMask = LVIS_SELECTED;
- li.pszText = (AceListItem->DisplayString != NULL ? AceListItem->DisplayString : AceListItem->AccountName);
- switch (AceListItem->SidNameUse)
+ li.pszText = (PrincipalListItem->DisplayString != NULL ? PrincipalListItem->DisplayString : PrincipalListItem->AccountName);
+ switch (PrincipalListItem->SidNameUse)
{
case SidTypeUser:
li.iImage = 0;
@@ -366,42 +371,42 @@
li.iImage = -1; break; }
- li.lParam = (LPARAM)AceListItem;
+ li.lParam = (LPARAM)PrincipalListItem;
- return ListView_InsertItem(sp->hWndAceList,
+ return ListView_InsertItem(sp->hWndPrincipalsList,
&li); } static VOID
-FillUsersGroupsList(IN PSECURITY_PAGE sp)
+FillPrincipalsList(IN PSECURITY_PAGE sp)
{
LPARAM SelLParam;
- PACE_LISTITEM CurItem;
+ PPRINCIPAL_LISTITEM CurItem;
RECT rcLvClient;
- SelLParam = ListViewGetSelectedItemData(sp->hWndAceList);
+ SelLParam = ListViewGetSelectedItemData(sp->hWndPrincipalsList);
- DisableRedrawWindow(sp->hWndAceList);
+ DisableRedrawWindow(sp->hWndPrincipalsList);
- ListView_DeleteAllItems(sp->hWndAceList);
+ ListView_DeleteAllItems(sp->hWndPrincipalsList);
- ReloadUsersGroupsList(sp);
+ ReloadPrincipalsList(sp);
- for (CurItem = sp->AceListHead;
+ for (CurItem = sp->PrincipalsListHead;
CurItem != NULL;
CurItem = CurItem->Next)
{
- AddAceListEntry(sp,
- CurItem,
- -1,
- (SelLParam == (LPARAM)CurItem));
+ AddPrincipalListEntry(sp,
+ CurItem,
+ -1,
+ (SelLParam == (LPARAM)CurItem));
}
- EnableRedrawWindow(sp->hWndAceList);
+ EnableRedrawWindow(sp->hWndPrincipalsList);
- GetClientRect(sp->hWndAceList, &rcLvClient);
+ GetClientRect(sp->hWndPrincipalsList, &rcLvClient);
- ListView_SetColumnWidth(sp->hWndAceList,
+ ListView_SetColumnWidth(sp->hWndPrincipalsList,
0, rcLvClient.right); } @@ -409,7 +414,7 @@
static VOID
UpdateControlStates(IN PSECURITY_PAGE sp)
{
- PACE_LISTITEM Selected = (PACE_LISTITEM)ListViewGetSelectedItemData(sp->hWndAceList);
+ PPRINCIPAL_LISTITEM Selected = (PPRINCIPAL_LISTITEM)ListViewGetSelectedItemData(sp->hWndPrincipalsList);
EnableWindow(sp->hBtnRemove, Selected != NULL); EnableWindow(sp->hAceCheckList, Selected != NULL); @@ -570,80 +575,246 @@
} }
-static HRESULT -InitializeObjectPicker(IN PSECURITY_PAGE sp, - OUT IDsObjectPicker **pDsObjectPicker)
+static VOID +ResizeControls(IN PSECURITY_PAGE sp, + IN INT Width, + IN INT Height)
{
- HRESULT hRet;
+ HWND hWndAllow, hWndDeny;
+ RECT rcControl, rcControl2, rcControl3, rcWnd;
+ INT cxWidth, cxEdge, btnSpacing;
+ POINT pt, pt2;
+ HDWP dwp;
+ INT nControls = 7;
+ LVCOLUMN lvc;
- *pDsObjectPicker = NULL;
+ hWndAllow = GetDlgItem(sp->hWnd,
+ IDC_LABEL_ALLOW);
+ hWndDeny = GetDlgItem(sp->hWnd,
+ IDC_LABEL_DENY);
+
+ GetWindowRect(sp->hWnd,
+ &rcWnd);
- hRet = CoCreateInstance(&CLSID_DsObjectPicker,
- NULL,
- CLSCTX_INPROC_SERVER,
- &IID_IDsObjectPicker,
- (LPVOID*)pDsObjectPicker);
- if (SUCCEEDED(hRet))
+ cxEdge = GetSystemMetrics(SM_CXEDGE);
+
+ /* use the left margin of the principal list view control for all control
+ margins */
+ pt.x = 0;
+ pt.y = 0;
+ MapWindowPoints(sp->hWndPrincipalsList,
+ sp->hWnd,
+ &pt,
+ 1);
+ cxWidth = Width - (2 * pt.x);
+
+ if (sp->ObjectInfo.dwFlags & SI_ADVANCED)
{
- DSOP_INIT_INFO InitInfo;
- UINT i;
- PCWSTR Attributes[] =
+ nControls += 2;
+ }
+
+ if (!(dwp = BeginDeferWindowPos(nControls)))
+ {
+ return;
+ }
+
+ /* resize the Principal list view */
+ GetWindowRect(sp->hWndPrincipalsList,
+ &rcControl);
+ if (!(dwp = DeferWindowPos(dwp,
+ sp->hWndPrincipalsList,
+ NULL,
+ 0,
+ 0,
+ cxWidth,
+ rcControl.bottom - rcControl.top,
+ SWP_NOMOVE | SWP_NOZORDER)))
+ {
+ return;
+ }
+
+ /* move the Add Principal button */
+ GetWindowRect(sp->hBtnAdd,
+ &rcControl);
+ GetWindowRect(sp->hBtnRemove,
+ &rcControl2);
+ btnSpacing = rcControl2.left - rcControl.right;
+ pt2.x = 0;
+ pt2.y = 0;
+ MapWindowPoints(sp->hBtnAdd,
+ sp->hWnd,
+ &pt2,
+ 1);
+ if (!(dwp = DeferWindowPos(dwp,
+ sp->hBtnAdd,
+ NULL,
+ pt.x + cxWidth - (rcControl2.right - rcControl2.left) -
+ (rcControl.right - rcControl.left) -
+ btnSpacing - cxEdge,
+ pt2.y,
+ 0,
+ 0,
+ SWP_NOSIZE | SWP_NOZORDER)))
+ {
+ return;
+ }
+
+ /* move the Delete Principal button */
+ pt2.x = 0;
+ pt2.y = 0;
+ MapWindowPoints(sp->hBtnRemove,
+ sp->hWnd,
+ &pt2,
+ 1);
+ if (!(dwp = DeferWindowPos(dwp,
+ sp->hBtnRemove,
+ NULL,
+ pt.x + cxWidth - (rcControl2.right - rcControl2.left) - cxEdge,
+ pt2.y,
+ 0,
+ 0,
+ SWP_NOSIZE | SWP_NOZORDER)))
+ {
+ return;
+ }
+
+ /* move the Permissions For label */
+ GetWindowRect(hWndAllow,
+ &rcControl);
+ GetWindowRect(hWndDeny,
+ &rcControl2);
+ GetWindowRect(sp->hPermissionsForLabel,
+ &rcControl3);
+ pt2.x = 0;
+ pt2.y = 0;
+ MapWindowPoints(sp->hPermissionsForLabel,
+ sp->hWnd,
+ &pt2,
+ 1);
+ if (!(dwp = DeferWindowPos(dwp,
+ sp->hPermissionsForLabel,
+ NULL,
+ 0,
+ 0,
+ cxWidth - (rcControl2.right - rcControl2.left) -
+ (rcControl.right - rcControl.left) -
+ (2 * btnSpacing) - cxEdge,
+ rcControl3.bottom - rcControl3.top,
+ SWP_NOMOVE | SWP_NOZORDER)))
+ {
+ return;
+ }
+
+ /* move the Allow label */
+ pt2.x = 0;
+ pt2.y = 0;
+ MapWindowPoints(hWndAllow,
+ sp->hWnd,
+ &pt2,
+ 1);
+ if (!(dwp = DeferWindowPos(dwp,
+ hWndAllow,
+ NULL,
+ cxWidth - (rcControl2.right - rcControl2.left) -
+ (rcControl.right - rcControl.left) -
+ btnSpacing - cxEdge,
+ pt2.y,
+ 0,
+ 0,
+ SWP_NOSIZE | SWP_NOZORDER)))
+ {
+ return;
+ }
+
+ /* move the Deny label */
+ pt2.x = 0;
+ pt2.y = 0;
+ MapWindowPoints(hWndDeny,
+ sp->hWnd,
+ &pt2,
+ 1);
+ if (!(dwp = DeferWindowPos(dwp,
+ hWndDeny,
+ NULL,
+ cxWidth - (rcControl2.right - rcControl2.left) - cxEdge,
+ pt2.y,
+ 0,
+ 0,
+ SWP_NOSIZE | SWP_NOZORDER)))
+ {
+ return;
+ }
+
+ /* resize the Permissions check list box */
+ GetWindowRect(sp->hAceCheckList,
+ &rcControl);
+ GetWindowRect(sp->hBtnAdvanced,
+ &rcControl2);
+ GetWindowRect(GetDlgItem(sp->hWnd,
+ IDC_LABEL_ADVANCED),
+ &rcControl3);
+ if (!(dwp = DeferWindowPos(dwp,
+ sp->hAceCheckList,
+ NULL,
+ 0,
+ 0,
+ cxWidth,
+ ((sp->ObjectInfo.dwFlags & SI_ADVANCED) ?
+ Height - (rcControl.top - rcWnd.top) - (rcControl3.bottom - rcControl3.top) - pt.x - btnSpacing :
+ Height - (rcControl.top - rcWnd.top) - pt.x),
+ SWP_NOMOVE | SWP_NOZORDER)))
+ {
+ return;
+ }
+
+ if (sp->ObjectInfo.dwFlags & SI_ADVANCED)
+ {
+ /* move and resize the Advanced label */
+ if (!(dwp = DeferWindowPos(dwp,
+ GetDlgItem(sp->hWnd,
+ IDC_LABEL_ADVANCED),
+ NULL,
+ pt.x,
+ Height - (rcControl3.bottom - rcControl3.top) - pt.x,
+ cxWidth - (rcControl2.right - rcControl2.left) - cxEdge,
+ rcControl3.bottom - rcControl3.top,
+ SWP_NOZORDER)))
{
- L"ObjectSid",
- };
- DSOP_SCOPE_INIT_INFO Scopes[] =
- {
- {
- sizeof(DSOP_SCOPE_INIT_INFO),
- DSOP_SCOPE_TYPE_TARGET_COMPUTER,
- DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS | DSOP_SCOPE_FLAG_DEFAULT_FILTER_GROUPS |
- DSOP_SCOPE_FLAG_STARTING_SCOPE,
- {
- {
- 0,
- 0,
- 0
- },
- DSOP_DOWNLEVEL_FILTER_USERS | DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS |
- DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS | DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS
- },
- NULL,
- NULL,
- S_OK
- },
- };
-
- InitInfo.cbSize = sizeof(InitInfo);
- InitInfo.pwzTargetComputer = (PCWSTR)sp->ServerName;
- InitInfo.cDsScopeInfos = sizeof(Scopes) / sizeof(Scopes[0]);
- InitInfo.aDsScopeInfos = Scopes;
- InitInfo.flOptions = DSOP_FLAG_MULTISELECT | DSOP_SCOPE_TYPE_TARGET_COMPUTER;
- InitInfo.cAttributesToFetch = sizeof(Attributes) / sizeof(Attributes[0]);
- InitInfo.apwzAttributeNames = Attributes;
+ return;
+ }
- for (i = 0; i < InitInfo.cDsScopeInfos; i++)
+ /* move and resize the Advanced button */
+ if (!(dwp = DeferWindowPos(dwp,
+ sp->hBtnAdvanced,
+ NULL,
+ cxWidth - (rcControl2.right - rcControl2.left) + pt.x,
+ Height - (rcControl2.bottom - rcControl2.top) - pt.x,
+ 0,
+ 0,
+ SWP_NOSIZE | SWP_NOZORDER)))
{
- if ((sp->ObjectInfo.dwFlags & SI_SERVER_IS_DC) &&
- (InitInfo.aDsScopeInfos[i].flType & DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN))
- {
- /* only set the domain controller string if we know the target
- computer is a domain controller and the scope type is an
- up-level domain to which the target computer is joined */
- InitInfo.aDsScopeInfos[i].pwzDcName = InitInfo.pwzTargetComputer;
- }
+ return;
}
-
- hRet = (*pDsObjectPicker)->lpVtbl->Initialize(*pDsObjectPicker,
- &InitInfo);
-
- if (FAILED(hRet))
- {
- /* delete the object picker in case initialization failed! */
- (*pDsObjectPicker)->lpVtbl->Release(*pDsObjectPicker);
- }
}
- return hRet;
+ EndDeferWindowPos(dwp);
+
+ /* update the width of the principal list view column */
+ GetClientRect(sp->hWndPrincipalsList,
+ &rcControl);
+ lvc.mask = LVCF_WIDTH;
+ lvc.cx = rcControl.right;
+ ListView_SetColumn(sp->hWndPrincipalsList,
+ 0,
+ &lvc);
+
+ /* calculate the columns of the allow/deny checkboxes */
+ SetAceCheckListColumns(sp->hAceCheckList,
+ CLB_ALLOW,
+ hWndAllow);
+ SetAceCheckListColumns(sp->hAceCheckList,
+ CLB_DENY,
+ hWndDeny);
} static INT_PTR CALLBACK @@ -663,7 +834,7 @@
DWL_USER);
if (sp != NULL)
{
- if (pnmh->hwndFrom == sp->hWndAceList)
+ if (pnmh->hwndFrom == sp->hWndPrincipalsList)
{
switch (pnmh->code)
{
@@ -707,7 +878,7 @@
{
switch (LOWORD(wParam))
{
- case IDC_ACELIST_ADD:
+ case IDC_ADD_PRINCIPAL:
{
HRESULT hRet;
IDsObjectPicker *pDsObjectPicker = NULL;
@@ -716,7 +887,9 @@
sp = (PSECURITY_PAGE)GetWindowLongPtr(hwndDlg, DWL_USER);
- hRet = InitializeObjectPicker(sp,
+ hRet = InitializeObjectPicker(sp->ServerName,
+ &sp->ObjectInfo,
+ ObjectPickerAttributes,
&pDsObjectPicker);
if (SUCCEEDED(hRet))
{
@@ -737,6 +910,17 @@
break; }
+ case WM_SIZE:
+ {
+ sp = (PSECURITY_PAGE)GetWindowLongPtr(hwndDlg,
+ DWL_USER);
+
+ ResizeControls(sp,
+ (INT)LOWORD(lParam),
+ (INT)HIWORD(lParam));
+ break;
+ }
+
case WM_INITDIALOG:
{
sp = (PSECURITY_PAGE)((LPPROPSHEETPAGE)lParam)->lParam;
@@ -746,8 +930,9 @@
RECT rcLvClient; sp->hWnd = hwndDlg;
- sp->hWndAceList = GetDlgItem(hwndDlg, IDC_ACELIST);
- sp->hBtnRemove = GetDlgItem(hwndDlg, IDC_ACELIST_REMOVE);
+ sp->hWndPrincipalsList = GetDlgItem(hwndDlg, IDC_PRINCIPALS);
+ sp->hBtnAdd = GetDlgItem(hwndDlg, IDC_ADD_PRINCIPAL);
+ sp->hBtnRemove = GetDlgItem(hwndDlg, IDC_REMOVE_PRINCIPAL);
sp->hBtnAdvanced = GetDlgItem(hwndDlg, IDC_ADVANCED); sp->hAceCheckList = GetDlgItem(hwndDlg, IDC_ACE_CHECKLIST); sp->hPermissionsForLabel = GetDlgItem(hwndDlg, IDC_LABEL_PERMISSIONS_FOR); @@ -766,31 +951,31 @@
DWL_USER, (DWORD_PTR)sp);
- sp->hiUsrs = ImageList_LoadBitmap(hDllInstance,
+ sp->hiPrincipals = ImageList_LoadBitmap(hDllInstance,
MAKEINTRESOURCE(IDB_USRGRPIMAGES), 16, 3, 0); /* setup the listview control */
- ListView_SetExtendedListViewStyleEx(sp->hWndAceList,
+ ListView_SetExtendedListViewStyleEx(sp->hWndPrincipalsList,
LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
- ListView_SetImageList(sp->hWndAceList,
- sp->hiUsrs,
+ ListView_SetImageList(sp->hWndPrincipalsList,
+ sp->hiPrincipals,
LVSIL_SMALL);
- GetClientRect(sp->hWndAceList, &rcLvClient);
+ GetClientRect(sp->hWndPrincipalsList, &rcLvClient);
/* add a column to the list view */ lvc.mask = LVCF_FMT | LVCF_WIDTH; lvc.fmt = LVCFMT_LEFT; lvc.cx = rcLvClient.right;
- ListView_InsertColumn(sp->hWndAceList, 0, &lvc);
+ ListView_InsertColumn(sp->hWndPrincipalsList, 0, &lvc);
- FillUsersGroupsList(sp);
+ FillPrincipalsList(sp);
- ListViewSelectItem(sp->hWndAceList,
+ ListViewSelectItem(sp->hWndPrincipalsList,
0); /* calculate the columns of the allow/deny checkboxes */ @@ -841,6 +1026,8 @@
CLM_ENABLEQUICKSEARCH, TRUE, 0);
+ + UpdateControlStates(sp);
} break; }
--- trunk/reactos/lib/aclui/aclui_De.rc 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/aclui_De.rc 2005-08-06 01:14:09 UTC (rev 17092) @@ -6,9 +6,9 @@
FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "&Gruppen oder Benutzernamen:", -1, 7, 7, 105, 8
- CONTROL "", IDC_ACELIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 17, 213, 66, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
- PUSHBUTTON "&Hinzuf³gen...", IDC_ACELIST_ADD, 116, 87, 50, 14
- PUSHBUTTON "&Entfernen", IDC_ACELIST_REMOVE, 170, 87, 50, 14
+ CONTROL "", IDC_PRINCIPALS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 17, 213, 66, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
+ PUSHBUTTON "&Hinzuf³gen...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14
+ PUSHBUTTON "&Entfernen", IDC_REMOVE_PRINCIPAL, 170, 87, 50, 14
LTEXT "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX LTEXT "Erlauben", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER LTEXT "Verbieten", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
--- trunk/reactos/lib/aclui/aclui_En.rc 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/aclui_En.rc 2005-08-06 01:14:09 UTC (rev 17092) @@ -6,9 +6,9 @@
FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "&Group or user names:", -1, 7, 7, 105, 8
- CONTROL "", IDC_ACELIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 17, 213, 66, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
- PUSHBUTTON "A&dd...", IDC_ACELIST_ADD, 116, 87, 50, 14
- PUSHBUTTON "&Remove", IDC_ACELIST_REMOVE, 170, 87, 50, 14
+ CONTROL "", IDC_PRINCIPALS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 17, 213, 66, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
+ PUSHBUTTON "A&dd...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14
+ PUSHBUTTON "&Remove", IDC_REMOVE_PRINCIPAL, 170, 87, 50, 14
LTEXT "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX LTEXT "Allow", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER LTEXT "Deny", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
--- trunk/reactos/lib/aclui/aclui_Nl.rc 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/aclui_Nl.rc 2005-08-06 01:14:09 UTC (rev 17092) @@ -6,9 +6,9 @@
FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "&Groep of gebruikersnamen:", -1, 7, 7, 105, 8
- CONTROL "", IDC_ACELIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 17, 213, 66, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
- PUSHBUTTON "&Toevoegen...", IDC_ACELIST_ADD, 116, 87, 50, 14
- PUSHBUTTON "&Verwijderen", IDC_ACELIST_REMOVE, 170, 87, 50, 14
+ CONTROL "", IDC_PRINCIPALS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 17, 213, 66, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
+ PUSHBUTTON "&Toevoegen...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14
+ PUSHBUTTON "&Verwijderen", IDC_REMOVE_PRINCIPAL, 170, 87, 50, 14
LTEXT "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX LTEXT "Toestaan", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER LTEXT "Weigeren", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
--- trunk/reactos/lib/aclui/aclui_Sv.rc 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/aclui_Sv.rc 2005-08-06 01:14:09 UTC (rev 17092) @@ -24,9 +24,9 @@
FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "&Grupp eller anvõndarnamn:", -1, 7, 7, 105, 8
- CONTROL "", IDC_ACELIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 17, 213, 66, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
- PUSHBUTTON "&Lõgg till...", IDC_ACELIST_ADD, 116, 87, 50, 14
- PUSHBUTTON "&Ta bort", IDC_ACELIST_REMOVE, 170, 87, 50, 14
+ CONTROL "", IDC_PRINCIPALS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 17, 213, 66, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
+ PUSHBUTTON "&Lõgg till...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14
+ PUSHBUTTON "&Ta bort", IDC_REMOVE_PRINCIPAL, 170, 87, 50, 14
LTEXT "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX LTEXT "TillÕt", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER LTEXT "Neka", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
--- trunk/reactos/lib/aclui/checklist.c 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/checklist.c 2005-08-06 01:14:09 UTC (rev 17092) @@ -1776,6 +1776,7 @@
case CLM_SETCHECKBOXCOLUMN:
{
infoPtr->CheckBoxLeft[wParam != CLB_DENY] = (INT)lParam;
+ UpdateControl(infoPtr);
Ret = 1; break; }
--- trunk/reactos/lib/aclui/misc.c 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/misc.c 2005-08-06 01:14:09 UTC (rev 17092) @@ -204,3 +204,77 @@
&li); }
+HRESULT
+InitializeObjectPicker(IN PCWSTR ServerName,
+ IN PSI_OBJECT_INFO ObjectInfo,
+ IN PCWSTR Attributes[],
+ OUT IDsObjectPicker **pDsObjectPicker)
+{
+ HRESULT hRet;
+
+ *pDsObjectPicker = NULL;
+
+ hRet = CoCreateInstance(&CLSID_DsObjectPicker,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ &IID_IDsObjectPicker,
+ (LPVOID*)pDsObjectPicker);
+ if (SUCCEEDED(hRet))
+ {
+ DSOP_INIT_INFO InitInfo;
+ UINT i;
+ DSOP_SCOPE_INIT_INFO Scopes[] =
+ {
+ {
+ sizeof(DSOP_SCOPE_INIT_INFO),
+ DSOP_SCOPE_TYPE_TARGET_COMPUTER,
+ DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS | DSOP_SCOPE_FLAG_DEFAULT_FILTER_GROUPS |
+ DSOP_SCOPE_FLAG_STARTING_SCOPE,
+ {
+ {
+ 0,
+ 0,
+ 0
+ },
+ DSOP_DOWNLEVEL_FILTER_USERS | DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS |
+ DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS | DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS
+ },
+ NULL,
+ NULL,
+ S_OK
+ },
+ };
+
+ InitInfo.cbSize = sizeof(InitInfo);
+ InitInfo.pwzTargetComputer = ServerName;
+ InitInfo.cDsScopeInfos = sizeof(Scopes) / sizeof(Scopes[0]);
+ InitInfo.aDsScopeInfos = Scopes;
+ InitInfo.flOptions = DSOP_FLAG_MULTISELECT | DSOP_SCOPE_TYPE_TARGET_COMPUTER;
+ InitInfo.cAttributesToFetch = sizeof(Attributes) / sizeof(Attributes[0]);
+ InitInfo.apwzAttributeNames = Attributes;
+
+ for (i = 0; i < InitInfo.cDsScopeInfos; i++)
+ {
+ if ((ObjectInfo->dwFlags & SI_SERVER_IS_DC) &&
+ (InitInfo.aDsScopeInfos[i].flType & DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN))
+ {
+ /* only set the domain controller string if we know the target
+ computer is a domain controller and the scope type is an
+ up-level domain to which the target computer is joined */
+ InitInfo.aDsScopeInfos[i].pwzDcName = InitInfo.pwzTargetComputer;
+ }
+ }
+
+ hRet = (*pDsObjectPicker)->lpVtbl->Initialize(*pDsObjectPicker,
+ &InitInfo);
+
+ if (FAILED(hRet))
+ {
+ /* delete the object picker in case initialization failed! */
+ (*pDsObjectPicker)->lpVtbl->Release(*pDsObjectPicker);
+ }
+ }
+
+ return hRet;
+}
+
--- trunk/reactos/lib/aclui/precomp.h 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/precomp.h 2005-08-06 01:14:09 UTC (rev 17092) @@ -26,30 +26,33 @@
extern HINSTANCE hDllInstance;
-typedef struct _ACE_LISTITEM
+typedef struct _PRINCIPAL_LISTITEM
{
- struct _ACE_LISTITEM *Next;
+ struct _PRINCIPAL_LISTITEM *Next;
SID_NAME_USE SidNameUse; WCHAR *DisplayString; WCHAR *AccountName; WCHAR *DomainName;
-} ACE_LISTITEM, *PACE_LISTITEM;
+} PRINCIPAL_LISTITEM, *PPRINCIPAL_LISTITEM;
typedef struct _SECURITY_PAGE
{
HWND hWnd;
+ HWND hBtnAdd;
HWND hBtnRemove; HWND hBtnAdvanced; HWND hAceCheckList; HWND hPermissionsForLabel;
- /* Main ACE List */
- HWND hWndAceList;
- PACE_LISTITEM AceListHead;
+ /* Main Principals List */
+ HWND hWndPrincipalsList;
+ PPRINCIPAL_LISTITEM PrincipalsListHead;
+ INT ControlsMargin; +
INT SpecialPermCheckIndex;
- HIMAGELIST hiUsrs;
+ HIMAGELIST hiPrincipals;
LPSECURITYINFO psi; SI_OBJECT_INFO ObjectInfo; @@ -79,6 +82,12 @@
ListViewSelectItem(IN HWND hwnd, IN INT Index);
+HRESULT +InitializeObjectPicker(IN PCWSTR ServerName, + IN PSI_OBJECT_INFO ObjectInfo, + IN PCWSTR Attributes[], + OUT IDsObjectPicker **pDsObjectPicker); +
/* CHECKLIST CONTROL **********************************************************/ #define CIS_DENYDISABLED (0x8)
--- trunk/reactos/lib/aclui/resource.h 2005-08-05 23:29:52 UTC (rev 17091) +++ trunk/reactos/lib/aclui/resource.h 2005-08-06 01:14:09 UTC (rev 17092) @@ -3,9 +3,9 @@
#define IDD_SECPAGE 101
-#define IDC_ACELIST 1001
-#define IDC_ACELIST_ADD 1002
-#define IDC_ACELIST_REMOVE 1003
+#define IDC_PRINCIPALS 1001
+#define IDC_ADD_PRINCIPAL 1002
+#define IDC_REMOVE_PRINCIPAL 1003
#define IDC_ACE_CHECKLIST 1004 #define IDC_LABEL_ALLOW 1005 #define IDC_LABEL_DENY 1006