handle the WM_SIZE message and resize/move the controls appropriately

svn path=/trunk/; revision=17092
This commit is contained in:
Thomas Bluemel 2005-08-06 01:14:09 +00:00
parent 406b162be2
commit 044ab19d99
9 changed files with 422 additions and 151 deletions

View file

@ -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 @@ DestroySecurityPage(IN PSECURITY_PAGE sp)
}
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 @@ FreeAceList(IN PACE_LISTITEM *AceListHead)
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 @@ FindSidInAceList(IN PACE_LISTITEM AceListHead,
}
static VOID
ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
ReloadPrincipalsList(IN PSECURITY_PAGE sp)
{
PSECURITY_DESCRIPTOR SecurityDescriptor;
BOOL DaclPresent, DaclDefaulted;
@ -99,7 +104,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
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 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
&Dacl,
&DaclDefaulted))
{
PACE_LISTITEM AceListItem, *NextAcePtr;
PPRINCIPAL_LISTITEM AceListItem, *NextAcePtr;
PSID Sid;
PVOID Ace;
ULONG AceIndex;
@ -121,7 +126,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
SID_NAME_USE SidNameUse;
DWORD LookupResult;
NextAcePtr = &sp->AceListHead;
NextAcePtr = &sp->PrincipalsListHead;
for (AceIndex = 0;
AceIndex < Dacl->AceCount;
@ -133,11 +138,11 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
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 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
/* 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 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
continue;
}
}
if (AccountNameSize == 0)
{
AceListItem->AccountName = NULL;
@ -206,9 +211,9 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
{
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 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
Domain = NULL;
DomainName = NULL;
}
AceListItem->SidNameUse = Names->Use;
switch (Names->Use)
@ -272,7 +277,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
if (AceListItem->DisplayString != NULL)
{
WCHAR *s;
/* NOTE: LSA_UNICODE_STRINGs are not always NULL-terminated! */
wcscpy(AceListItem->DisplayString,
@ -292,7 +297,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
*(s++) = L')';
*s = L'\0';
}
/* mark the ace as a user unless it's a
BUILTIN account */
if (PolicyAccountDomainInfo == NULL)
@ -302,26 +307,26 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
}
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 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
}
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 @@ AddAceListEntry(IN PSECURITY_PAGE sp,
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 @@ AddAceListEntry(IN PSECURITY_PAGE sp,
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 @@ FillUsersGroupsList(IN PSECURITY_PAGE sp)
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 @@ LoadPermissionsList(IN PSECURITY_PAGE sp,
}
}
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;
for (i = 0; i < InitInfo.cDsScopeInfos; i++)
{
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))
/* 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)))
{
/* delete the object picker in case initialization failed! */
(*pDsObjectPicker)->lpVtbl->Release(*pDsObjectPicker);
return;
}
}
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 @@ SecurityPageProc(IN HWND hwndDlg,
DWL_USER);
if (sp != NULL)
{
if (pnmh->hwndFrom == sp->hWndAceList)
if (pnmh->hwndFrom == sp->hWndPrincipalsList)
{
switch (pnmh->code)
{
@ -707,7 +878,7 @@ SecurityPageProc(IN HWND hwndDlg,
{
switch (LOWORD(wParam))
{
case IDC_ACELIST_ADD:
case IDC_ADD_PRINCIPAL:
{
HRESULT hRet;
IDsObjectPicker *pDsObjectPicker = NULL;
@ -716,7 +887,9 @@ SecurityPageProc(IN HWND hwndDlg,
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 @@ SecurityPageProc(IN HWND hwndDlg,
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 @@ SecurityPageProc(IN HWND hwndDlg,
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 @@ SecurityPageProc(IN HWND hwndDlg,
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 @@ SecurityPageProc(IN HWND hwndDlg,
CLM_ENABLEQUICKSEARCH,
TRUE,
0);
UpdateControlStates(sp);
}
break;
}

View file

@ -6,9 +6,9 @@ CAPTION "Sicherheit"
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

View file

@ -6,9 +6,9 @@ CAPTION "Security"
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

View file

@ -6,9 +6,9 @@ CAPTION "Beveiling"
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

View file

@ -24,9 +24,9 @@ CAPTION "S
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

View file

@ -1776,6 +1776,7 @@ CheckListWndProc(IN HWND hwnd,
case CLM_SETCHECKBOXCOLUMN:
{
infoPtr->CheckBoxLeft[wParam != CLB_DENY] = (INT)lParam;
UpdateControl(infoPtr);
Ret = 1;
break;
}

View file

@ -204,3 +204,77 @@ ListViewSelectItem(IN HWND hwnd,
&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;
}

View file

@ -26,30 +26,33 @@ ULONG DbgPrint(PCH Format,...);
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 @@ BOOL
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)

View file

@ -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