mirror of
https://github.com/reactos/reactos.git
synced 2024-10-03 16:05:37 +00:00
handle the WM_SIZE message and resize/move the controls appropriately
svn path=/trunk/; revision=17092
This commit is contained in:
parent
406b162be2
commit
044ab19d99
|
@ -30,12 +30,17 @@
|
||||||
|
|
||||||
HINSTANCE hDllInstance;
|
HINSTANCE hDllInstance;
|
||||||
|
|
||||||
|
static PCWSTR ObjectPickerAttributes[] =
|
||||||
|
{
|
||||||
|
L"ObjectSid",
|
||||||
|
};
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
DestroySecurityPage(IN PSECURITY_PAGE sp)
|
DestroySecurityPage(IN PSECURITY_PAGE sp)
|
||||||
{
|
{
|
||||||
if(sp->hiUsrs != NULL)
|
if(sp->hiPrincipals != NULL)
|
||||||
{
|
{
|
||||||
ImageList_Destroy(sp->hiUsrs);
|
ImageList_Destroy(sp->hiPrincipals);
|
||||||
}
|
}
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(),
|
HeapFree(GetProcessHeap(),
|
||||||
|
@ -46,11 +51,11 @@ DestroySecurityPage(IN PSECURITY_PAGE sp)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
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)
|
while (CurItem != NULL)
|
||||||
{
|
{
|
||||||
/* free the SID string if present */
|
/* free the SID string if present */
|
||||||
|
@ -67,16 +72,16 @@ FreeAceList(IN PACE_LISTITEM *AceListHead)
|
||||||
CurItem = NextItem;
|
CurItem = NextItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
*AceListHead = NULL;
|
*PrincipalsListHead = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PACE_LISTITEM
|
static PPRINCIPAL_LISTITEM
|
||||||
FindSidInAceList(IN PACE_LISTITEM AceListHead,
|
FindSidInPrincipalsList(IN PPRINCIPAL_LISTITEM PrincipalsListHead,
|
||||||
IN PSID Sid)
|
IN PSID Sid)
|
||||||
{
|
{
|
||||||
PACE_LISTITEM CurItem;
|
PPRINCIPAL_LISTITEM CurItem;
|
||||||
|
|
||||||
for (CurItem = AceListHead;
|
for (CurItem = PrincipalsListHead;
|
||||||
CurItem != NULL;
|
CurItem != NULL;
|
||||||
CurItem = CurItem->Next)
|
CurItem = CurItem->Next)
|
||||||
{
|
{
|
||||||
|
@ -91,7 +96,7 @@ FindSidInAceList(IN PACE_LISTITEM AceListHead,
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
ReloadPrincipalsList(IN PSECURITY_PAGE sp)
|
||||||
{
|
{
|
||||||
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
||||||
BOOL DaclPresent, DaclDefaulted;
|
BOOL DaclPresent, DaclDefaulted;
|
||||||
|
@ -99,7 +104,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
HRESULT hRet;
|
HRESULT hRet;
|
||||||
|
|
||||||
/* delete the cached ACL */
|
/* delete the cached ACL */
|
||||||
FreeAceList(&sp->AceListHead);
|
FreePrincipalsList(&sp->PrincipalsListHead);
|
||||||
|
|
||||||
/* query the ACL */
|
/* query the ACL */
|
||||||
hRet = sp->psi->lpVtbl->GetSecurity(sp->psi,
|
hRet = sp->psi->lpVtbl->GetSecurity(sp->psi,
|
||||||
|
@ -113,7 +118,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
&Dacl,
|
&Dacl,
|
||||||
&DaclDefaulted))
|
&DaclDefaulted))
|
||||||
{
|
{
|
||||||
PACE_LISTITEM AceListItem, *NextAcePtr;
|
PPRINCIPAL_LISTITEM AceListItem, *NextAcePtr;
|
||||||
PSID Sid;
|
PSID Sid;
|
||||||
PVOID Ace;
|
PVOID Ace;
|
||||||
ULONG AceIndex;
|
ULONG AceIndex;
|
||||||
|
@ -121,7 +126,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
SID_NAME_USE SidNameUse;
|
SID_NAME_USE SidNameUse;
|
||||||
DWORD LookupResult;
|
DWORD LookupResult;
|
||||||
|
|
||||||
NextAcePtr = &sp->AceListHead;
|
NextAcePtr = &sp->PrincipalsListHead;
|
||||||
|
|
||||||
for (AceIndex = 0;
|
for (AceIndex = 0;
|
||||||
AceIndex < Dacl->AceCount;
|
AceIndex < Dacl->AceCount;
|
||||||
|
@ -133,11 +138,11 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
|
|
||||||
Sid = (PSID)&((PACCESS_ALLOWED_ACE)Ace)->SidStart;
|
Sid = (PSID)&((PACCESS_ALLOWED_ACE)Ace)->SidStart;
|
||||||
|
|
||||||
if (!FindSidInAceList(sp->AceListHead,
|
if (!FindSidInPrincipalsList(sp->PrincipalsListHead,
|
||||||
Sid))
|
Sid))
|
||||||
{
|
{
|
||||||
SidLength = GetLengthSid(Sid);
|
SidLength = GetLengthSid(Sid);
|
||||||
|
|
||||||
AccountNameSize = 0;
|
AccountNameSize = 0;
|
||||||
DomainNameSize = 0;
|
DomainNameSize = 0;
|
||||||
|
|
||||||
|
@ -153,7 +158,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
/* allocate the ace */
|
/* allocate the ace */
|
||||||
AceListItem = HeapAlloc(GetProcessHeap(),
|
AceListItem = HeapAlloc(GetProcessHeap(),
|
||||||
0,
|
0,
|
||||||
sizeof(ACE_LISTITEM) +
|
sizeof(PRINCIPAL_LISTITEM) +
|
||||||
SidLength +
|
SidLength +
|
||||||
((AccountNameSize + DomainNameSize) * sizeof(WCHAR)));
|
((AccountNameSize + DomainNameSize) * sizeof(WCHAR)));
|
||||||
if (AceListItem != NULL)
|
if (AceListItem != NULL)
|
||||||
|
@ -183,7 +188,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AccountNameSize == 0)
|
if (AccountNameSize == 0)
|
||||||
{
|
{
|
||||||
AceListItem->AccountName = NULL;
|
AceListItem->AccountName = NULL;
|
||||||
|
@ -206,9 +211,9 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
{
|
{
|
||||||
LSA_HANDLE LsaHandle;
|
LSA_HANDLE LsaHandle;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
AceListItem->DisplayString = NULL;
|
AceListItem->DisplayString = NULL;
|
||||||
|
|
||||||
/* read the domain of the SID */
|
/* read the domain of the SID */
|
||||||
if (OpenLSAPolicyHandle(sp->ServerName,
|
if (OpenLSAPolicyHandle(sp->ServerName,
|
||||||
POLICY_LOOKUP_NAMES | POLICY_VIEW_LOCAL_INFORMATION,
|
POLICY_LOOKUP_NAMES | POLICY_VIEW_LOCAL_INFORMATION,
|
||||||
|
@ -238,7 +243,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
Domain = NULL;
|
Domain = NULL;
|
||||||
DomainName = NULL;
|
DomainName = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
AceListItem->SidNameUse = Names->Use;
|
AceListItem->SidNameUse = Names->Use;
|
||||||
|
|
||||||
switch (Names->Use)
|
switch (Names->Use)
|
||||||
|
@ -272,7 +277,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
if (AceListItem->DisplayString != NULL)
|
if (AceListItem->DisplayString != NULL)
|
||||||
{
|
{
|
||||||
WCHAR *s;
|
WCHAR *s;
|
||||||
|
|
||||||
/* NOTE: LSA_UNICODE_STRINGs are not always NULL-terminated! */
|
/* NOTE: LSA_UNICODE_STRINGs are not always NULL-terminated! */
|
||||||
|
|
||||||
wcscpy(AceListItem->DisplayString,
|
wcscpy(AceListItem->DisplayString,
|
||||||
|
@ -292,7 +297,7 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
*(s++) = L')';
|
*(s++) = L')';
|
||||||
*s = L'\0';
|
*s = L'\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* mark the ace as a user unless it's a
|
/* mark the ace as a user unless it's a
|
||||||
BUILTIN account */
|
BUILTIN account */
|
||||||
if (PolicyAccountDomainInfo == NULL)
|
if (PolicyAccountDomainInfo == NULL)
|
||||||
|
@ -302,26 +307,26 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SidTypeWellKnownGroup:
|
case SidTypeWellKnownGroup:
|
||||||
{
|
{
|
||||||
/* make the user believe this is a group */
|
/* make the user believe this is a group */
|
||||||
AceListItem->SidNameUse = SidTypeGroup;
|
AceListItem->SidNameUse = SidTypeGroup;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT("Unhandled SID type: 0x%x\n", Names->Use);
|
DPRINT("Unhandled SID type: 0x%x\n", Names->Use);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PolicyAccountDomainInfo != NULL)
|
if (PolicyAccountDomainInfo != NULL)
|
||||||
{
|
{
|
||||||
LsaFreeMemory(PolicyAccountDomainInfo);
|
LsaFreeMemory(PolicyAccountDomainInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
LsaFreeMemory(ReferencedDomain);
|
LsaFreeMemory(ReferencedDomain);
|
||||||
LsaFreeMemory(Names);
|
LsaFreeMemory(Names);
|
||||||
}
|
}
|
||||||
|
@ -341,10 +346,10 @@ ReloadUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT
|
static INT
|
||||||
AddAceListEntry(IN PSECURITY_PAGE sp,
|
AddPrincipalListEntry(IN PSECURITY_PAGE sp,
|
||||||
IN PACE_LISTITEM AceListItem,
|
IN PPRINCIPAL_LISTITEM PrincipalListItem,
|
||||||
IN INT Index,
|
IN INT Index,
|
||||||
IN BOOL Selected)
|
IN BOOL Selected)
|
||||||
{
|
{
|
||||||
LVITEM li;
|
LVITEM li;
|
||||||
|
|
||||||
|
@ -353,8 +358,8 @@ AddAceListEntry(IN PSECURITY_PAGE sp,
|
||||||
li.iSubItem = 0;
|
li.iSubItem = 0;
|
||||||
li.state = (Selected ? LVIS_SELECTED : 0);
|
li.state = (Selected ? LVIS_SELECTED : 0);
|
||||||
li.stateMask = LVIS_SELECTED;
|
li.stateMask = LVIS_SELECTED;
|
||||||
li.pszText = (AceListItem->DisplayString != NULL ? AceListItem->DisplayString : AceListItem->AccountName);
|
li.pszText = (PrincipalListItem->DisplayString != NULL ? PrincipalListItem->DisplayString : PrincipalListItem->AccountName);
|
||||||
switch (AceListItem->SidNameUse)
|
switch (PrincipalListItem->SidNameUse)
|
||||||
{
|
{
|
||||||
case SidTypeUser:
|
case SidTypeUser:
|
||||||
li.iImage = 0;
|
li.iImage = 0;
|
||||||
|
@ -366,42 +371,42 @@ AddAceListEntry(IN PSECURITY_PAGE sp,
|
||||||
li.iImage = -1;
|
li.iImage = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
li.lParam = (LPARAM)AceListItem;
|
li.lParam = (LPARAM)PrincipalListItem;
|
||||||
|
|
||||||
return ListView_InsertItem(sp->hWndAceList,
|
return ListView_InsertItem(sp->hWndPrincipalsList,
|
||||||
&li);
|
&li);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
FillUsersGroupsList(IN PSECURITY_PAGE sp)
|
FillPrincipalsList(IN PSECURITY_PAGE sp)
|
||||||
{
|
{
|
||||||
LPARAM SelLParam;
|
LPARAM SelLParam;
|
||||||
PACE_LISTITEM CurItem;
|
PPRINCIPAL_LISTITEM CurItem;
|
||||||
RECT rcLvClient;
|
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 != NULL;
|
||||||
CurItem = CurItem->Next)
|
CurItem = CurItem->Next)
|
||||||
{
|
{
|
||||||
AddAceListEntry(sp,
|
AddPrincipalListEntry(sp,
|
||||||
CurItem,
|
CurItem,
|
||||||
-1,
|
-1,
|
||||||
(SelLParam == (LPARAM)CurItem));
|
(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,
|
0,
|
||||||
rcLvClient.right);
|
rcLvClient.right);
|
||||||
}
|
}
|
||||||
|
@ -409,7 +414,7 @@ FillUsersGroupsList(IN PSECURITY_PAGE sp)
|
||||||
static VOID
|
static VOID
|
||||||
UpdateControlStates(IN PSECURITY_PAGE sp)
|
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->hBtnRemove, Selected != NULL);
|
||||||
EnableWindow(sp->hAceCheckList, Selected != NULL);
|
EnableWindow(sp->hAceCheckList, Selected != NULL);
|
||||||
|
@ -570,80 +575,246 @@ LoadPermissionsList(IN PSECURITY_PAGE sp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT
|
static VOID
|
||||||
InitializeObjectPicker(IN PSECURITY_PAGE sp,
|
ResizeControls(IN PSECURITY_PAGE sp,
|
||||||
OUT IDsObjectPicker **pDsObjectPicker)
|
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,
|
cxEdge = GetSystemMetrics(SM_CXEDGE);
|
||||||
NULL,
|
|
||||||
CLSCTX_INPROC_SERVER,
|
/* use the left margin of the principal list view control for all control
|
||||||
&IID_IDsObjectPicker,
|
margins */
|
||||||
(LPVOID*)pDsObjectPicker);
|
pt.x = 0;
|
||||||
if (SUCCEEDED(hRet))
|
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;
|
nControls += 2;
|
||||||
UINT i;
|
}
|
||||||
PCWSTR Attributes[] =
|
|
||||||
|
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",
|
return;
|
||||||
};
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hRet = (*pDsObjectPicker)->lpVtbl->Initialize(*pDsObjectPicker,
|
/* move and resize the Advanced button */
|
||||||
&InitInfo);
|
if (!(dwp = DeferWindowPos(dwp,
|
||||||
|
sp->hBtnAdvanced,
|
||||||
if (FAILED(hRet))
|
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! */
|
return;
|
||||||
(*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
|
static INT_PTR CALLBACK
|
||||||
|
@ -663,7 +834,7 @@ SecurityPageProc(IN HWND hwndDlg,
|
||||||
DWL_USER);
|
DWL_USER);
|
||||||
if (sp != NULL)
|
if (sp != NULL)
|
||||||
{
|
{
|
||||||
if (pnmh->hwndFrom == sp->hWndAceList)
|
if (pnmh->hwndFrom == sp->hWndPrincipalsList)
|
||||||
{
|
{
|
||||||
switch (pnmh->code)
|
switch (pnmh->code)
|
||||||
{
|
{
|
||||||
|
@ -707,7 +878,7 @@ SecurityPageProc(IN HWND hwndDlg,
|
||||||
{
|
{
|
||||||
switch (LOWORD(wParam))
|
switch (LOWORD(wParam))
|
||||||
{
|
{
|
||||||
case IDC_ACELIST_ADD:
|
case IDC_ADD_PRINCIPAL:
|
||||||
{
|
{
|
||||||
HRESULT hRet;
|
HRESULT hRet;
|
||||||
IDsObjectPicker *pDsObjectPicker = NULL;
|
IDsObjectPicker *pDsObjectPicker = NULL;
|
||||||
|
@ -716,7 +887,9 @@ SecurityPageProc(IN HWND hwndDlg,
|
||||||
sp = (PSECURITY_PAGE)GetWindowLongPtr(hwndDlg,
|
sp = (PSECURITY_PAGE)GetWindowLongPtr(hwndDlg,
|
||||||
DWL_USER);
|
DWL_USER);
|
||||||
|
|
||||||
hRet = InitializeObjectPicker(sp,
|
hRet = InitializeObjectPicker(sp->ServerName,
|
||||||
|
&sp->ObjectInfo,
|
||||||
|
ObjectPickerAttributes,
|
||||||
&pDsObjectPicker);
|
&pDsObjectPicker);
|
||||||
if (SUCCEEDED(hRet))
|
if (SUCCEEDED(hRet))
|
||||||
{
|
{
|
||||||
|
@ -737,6 +910,17 @@ SecurityPageProc(IN HWND hwndDlg,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case WM_SIZE:
|
||||||
|
{
|
||||||
|
sp = (PSECURITY_PAGE)GetWindowLongPtr(hwndDlg,
|
||||||
|
DWL_USER);
|
||||||
|
|
||||||
|
ResizeControls(sp,
|
||||||
|
(INT)LOWORD(lParam),
|
||||||
|
(INT)HIWORD(lParam));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
sp = (PSECURITY_PAGE)((LPPROPSHEETPAGE)lParam)->lParam;
|
sp = (PSECURITY_PAGE)((LPPROPSHEETPAGE)lParam)->lParam;
|
||||||
|
@ -746,8 +930,9 @@ SecurityPageProc(IN HWND hwndDlg,
|
||||||
RECT rcLvClient;
|
RECT rcLvClient;
|
||||||
|
|
||||||
sp->hWnd = hwndDlg;
|
sp->hWnd = hwndDlg;
|
||||||
sp->hWndAceList = GetDlgItem(hwndDlg, IDC_ACELIST);
|
sp->hWndPrincipalsList = GetDlgItem(hwndDlg, IDC_PRINCIPALS);
|
||||||
sp->hBtnRemove = GetDlgItem(hwndDlg, IDC_ACELIST_REMOVE);
|
sp->hBtnAdd = GetDlgItem(hwndDlg, IDC_ADD_PRINCIPAL);
|
||||||
|
sp->hBtnRemove = GetDlgItem(hwndDlg, IDC_REMOVE_PRINCIPAL);
|
||||||
sp->hBtnAdvanced = GetDlgItem(hwndDlg, IDC_ADVANCED);
|
sp->hBtnAdvanced = GetDlgItem(hwndDlg, IDC_ADVANCED);
|
||||||
sp->hAceCheckList = GetDlgItem(hwndDlg, IDC_ACE_CHECKLIST);
|
sp->hAceCheckList = GetDlgItem(hwndDlg, IDC_ACE_CHECKLIST);
|
||||||
sp->hPermissionsForLabel = GetDlgItem(hwndDlg, IDC_LABEL_PERMISSIONS_FOR);
|
sp->hPermissionsForLabel = GetDlgItem(hwndDlg, IDC_LABEL_PERMISSIONS_FOR);
|
||||||
|
@ -766,31 +951,31 @@ SecurityPageProc(IN HWND hwndDlg,
|
||||||
DWL_USER,
|
DWL_USER,
|
||||||
(DWORD_PTR)sp);
|
(DWORD_PTR)sp);
|
||||||
|
|
||||||
sp->hiUsrs = ImageList_LoadBitmap(hDllInstance,
|
sp->hiPrincipals = ImageList_LoadBitmap(hDllInstance,
|
||||||
MAKEINTRESOURCE(IDB_USRGRPIMAGES),
|
MAKEINTRESOURCE(IDB_USRGRPIMAGES),
|
||||||
16,
|
16,
|
||||||
3,
|
3,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
/* setup the listview control */
|
/* setup the listview control */
|
||||||
ListView_SetExtendedListViewStyleEx(sp->hWndAceList,
|
ListView_SetExtendedListViewStyleEx(sp->hWndPrincipalsList,
|
||||||
LVS_EX_FULLROWSELECT,
|
LVS_EX_FULLROWSELECT,
|
||||||
LVS_EX_FULLROWSELECT);
|
LVS_EX_FULLROWSELECT);
|
||||||
ListView_SetImageList(sp->hWndAceList,
|
ListView_SetImageList(sp->hWndPrincipalsList,
|
||||||
sp->hiUsrs,
|
sp->hiPrincipals,
|
||||||
LVSIL_SMALL);
|
LVSIL_SMALL);
|
||||||
|
|
||||||
GetClientRect(sp->hWndAceList, &rcLvClient);
|
GetClientRect(sp->hWndPrincipalsList, &rcLvClient);
|
||||||
|
|
||||||
/* add a column to the list view */
|
/* add a column to the list view */
|
||||||
lvc.mask = LVCF_FMT | LVCF_WIDTH;
|
lvc.mask = LVCF_FMT | LVCF_WIDTH;
|
||||||
lvc.fmt = LVCFMT_LEFT;
|
lvc.fmt = LVCFMT_LEFT;
|
||||||
lvc.cx = rcLvClient.right;
|
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);
|
0);
|
||||||
|
|
||||||
/* calculate the columns of the allow/deny checkboxes */
|
/* calculate the columns of the allow/deny checkboxes */
|
||||||
|
@ -841,6 +1026,8 @@ SecurityPageProc(IN HWND hwndDlg,
|
||||||
CLM_ENABLEQUICKSEARCH,
|
CLM_ENABLEQUICKSEARCH,
|
||||||
TRUE,
|
TRUE,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
UpdateControlStates(sp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@ CAPTION "Sicherheit"
|
||||||
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "&Gruppen oder Benutzernamen:", -1, 7, 7, 105, 8
|
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
|
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_ACELIST_ADD, 116, 87, 50, 14
|
PUSHBUTTON "&Hinzufügen...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14
|
||||||
PUSHBUTTON "&Entfernen", IDC_ACELIST_REMOVE, 170, 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 "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX
|
||||||
LTEXT "Erlauben", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER
|
LTEXT "Erlauben", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER
|
||||||
LTEXT "Verbieten", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
|
LTEXT "Verbieten", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
|
||||||
|
|
|
@ -6,9 +6,9 @@ CAPTION "Security"
|
||||||
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "&Group or user names:", -1, 7, 7, 105, 8
|
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
|
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_ACELIST_ADD, 116, 87, 50, 14
|
PUSHBUTTON "A&dd...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14
|
||||||
PUSHBUTTON "&Remove", IDC_ACELIST_REMOVE, 170, 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 "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX
|
||||||
LTEXT "Allow", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER
|
LTEXT "Allow", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER
|
||||||
LTEXT "Deny", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
|
LTEXT "Deny", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
|
||||||
|
|
|
@ -6,9 +6,9 @@ CAPTION "Beveiling"
|
||||||
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "&Groep of gebruikersnamen:", -1, 7, 7, 105, 8
|
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
|
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_ACELIST_ADD, 116, 87, 50, 14
|
PUSHBUTTON "&Toevoegen...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14
|
||||||
PUSHBUTTON "&Verwijderen", IDC_ACELIST_REMOVE, 170, 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 "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX
|
||||||
LTEXT "Toestaan", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER
|
LTEXT "Toestaan", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER
|
||||||
LTEXT "Weigeren", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
|
LTEXT "Weigeren", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
|
||||||
|
|
|
@ -24,9 +24,9 @@ CAPTION "S
|
||||||
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "&Grupp eller användarnamn:", -1, 7, 7, 105, 8
|
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
|
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_ACELIST_ADD, 116, 87, 50, 14
|
PUSHBUTTON "&Lägg till...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14
|
||||||
PUSHBUTTON "&Ta bort", IDC_ACELIST_REMOVE, 170, 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 "", 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 "Tillåt", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER
|
||||||
LTEXT "Neka", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
|
LTEXT "Neka", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER
|
||||||
|
|
|
@ -1776,6 +1776,7 @@ CheckListWndProc(IN HWND hwnd,
|
||||||
case CLM_SETCHECKBOXCOLUMN:
|
case CLM_SETCHECKBOXCOLUMN:
|
||||||
{
|
{
|
||||||
infoPtr->CheckBoxLeft[wParam != CLB_DENY] = (INT)lParam;
|
infoPtr->CheckBoxLeft[wParam != CLB_DENY] = (INT)lParam;
|
||||||
|
UpdateControl(infoPtr);
|
||||||
Ret = 1;
|
Ret = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,3 +204,77 @@ ListViewSelectItem(IN HWND hwnd,
|
||||||
&li);
|
&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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,30 +26,33 @@ ULONG DbgPrint(PCH Format,...);
|
||||||
|
|
||||||
extern HINSTANCE hDllInstance;
|
extern HINSTANCE hDllInstance;
|
||||||
|
|
||||||
typedef struct _ACE_LISTITEM
|
typedef struct _PRINCIPAL_LISTITEM
|
||||||
{
|
{
|
||||||
struct _ACE_LISTITEM *Next;
|
struct _PRINCIPAL_LISTITEM *Next;
|
||||||
SID_NAME_USE SidNameUse;
|
SID_NAME_USE SidNameUse;
|
||||||
WCHAR *DisplayString;
|
WCHAR *DisplayString;
|
||||||
WCHAR *AccountName;
|
WCHAR *AccountName;
|
||||||
WCHAR *DomainName;
|
WCHAR *DomainName;
|
||||||
} ACE_LISTITEM, *PACE_LISTITEM;
|
} PRINCIPAL_LISTITEM, *PPRINCIPAL_LISTITEM;
|
||||||
|
|
||||||
typedef struct _SECURITY_PAGE
|
typedef struct _SECURITY_PAGE
|
||||||
{
|
{
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
|
HWND hBtnAdd;
|
||||||
HWND hBtnRemove;
|
HWND hBtnRemove;
|
||||||
HWND hBtnAdvanced;
|
HWND hBtnAdvanced;
|
||||||
HWND hAceCheckList;
|
HWND hAceCheckList;
|
||||||
HWND hPermissionsForLabel;
|
HWND hPermissionsForLabel;
|
||||||
|
|
||||||
/* Main ACE List */
|
/* Main Principals List */
|
||||||
HWND hWndAceList;
|
HWND hWndPrincipalsList;
|
||||||
PACE_LISTITEM AceListHead;
|
PPRINCIPAL_LISTITEM PrincipalsListHead;
|
||||||
|
|
||||||
|
INT ControlsMargin;
|
||||||
|
|
||||||
INT SpecialPermCheckIndex;
|
INT SpecialPermCheckIndex;
|
||||||
|
|
||||||
HIMAGELIST hiUsrs;
|
HIMAGELIST hiPrincipals;
|
||||||
|
|
||||||
LPSECURITYINFO psi;
|
LPSECURITYINFO psi;
|
||||||
SI_OBJECT_INFO ObjectInfo;
|
SI_OBJECT_INFO ObjectInfo;
|
||||||
|
@ -79,6 +82,12 @@ BOOL
|
||||||
ListViewSelectItem(IN HWND hwnd,
|
ListViewSelectItem(IN HWND hwnd,
|
||||||
IN INT Index);
|
IN INT Index);
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
InitializeObjectPicker(IN PCWSTR ServerName,
|
||||||
|
IN PSI_OBJECT_INFO ObjectInfo,
|
||||||
|
IN PCWSTR Attributes[],
|
||||||
|
OUT IDsObjectPicker **pDsObjectPicker);
|
||||||
|
|
||||||
/* CHECKLIST CONTROL **********************************************************/
|
/* CHECKLIST CONTROL **********************************************************/
|
||||||
|
|
||||||
#define CIS_DENYDISABLED (0x8)
|
#define CIS_DENYDISABLED (0x8)
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
|
|
||||||
#define IDD_SECPAGE 101
|
#define IDD_SECPAGE 101
|
||||||
|
|
||||||
#define IDC_ACELIST 1001
|
#define IDC_PRINCIPALS 1001
|
||||||
#define IDC_ACELIST_ADD 1002
|
#define IDC_ADD_PRINCIPAL 1002
|
||||||
#define IDC_ACELIST_REMOVE 1003
|
#define IDC_REMOVE_PRINCIPAL 1003
|
||||||
#define IDC_ACE_CHECKLIST 1004
|
#define IDC_ACE_CHECKLIST 1004
|
||||||
#define IDC_LABEL_ALLOW 1005
|
#define IDC_LABEL_ALLOW 1005
|
||||||
#define IDC_LABEL_DENY 1006
|
#define IDC_LABEL_DENY 1006
|
||||||
|
|
Loading…
Reference in a new issue