Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

483 lines
13 KiB

/*****************************************************************************
D I A L O G S
Name: dialogs.c
Date: 21-Jan-1994
Creator: Unknown
Description:
Dialog handling routines.
*****************************************************************************/
#include <windows.h>
#include <nddeapi.h>
#include <strsafe.h>
#include "common.h"
#include "clipbook.h"
#include "clipbrd.h"
#include "clpbkdlg.h"
#include "cvutil.h"
#include "dialogs.h"
#include "helpids.h"
#include "debugout.h"
#include "ismember.h"
#include "shares.h"
/*
* ConnectDlgProc
*/
INT_PTR CALLBACK ConnectDlgProc (
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
szConvPartner[0] = '\0';
break;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
GetDlgItemText (hwnd, IDC_CONNECTNAME, szConvPartner, 32);
EndDialog (hwnd, 1);
break;
case IDCANCEL:
szConvPartner[0] = '\0';
EndDialog (hwnd, 0);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*
* ShareDlgProc
*
* Note: this routine expectes a PNDDESHAREINFO in lParam!
*/
INT_PTR CALLBACK ShareDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
static PNDDESHAREINFO lpDdeS;
DWORD dwTrustOptions;
DWORD adwTrust[3];
BOOL bRet = TRUE;
// These vars are used for determining if I'm owner of the page
PSID psidPage;
BOOL fDump;
DWORD cbSD;
UINT uRet;
PSECURITY_DESCRIPTOR pSD = NULL;
LPHELPINFO lphi;
const DWORD aHelpIDs[] =
{
IDC_STARTAPP, IDH_STARTAPP,
IDC_MINIMIZED, IDH_MINIMIZED,
IDC_PERMISSIONS, IDH_PERMISSIONS,
0, 0
};
UINT iCtrlId;
switch (message)
{
case WM_INITDIALOG:
lpDdeS = (PNDDESHAREINFO)lParam;
// set share, always static
SetDlgItemText (hwnd, IDC_STATICSHARENAME, lpDdeS->lpszShareName+1 );
// If the current user doesn't own the page, we gray out the
// "start app" and "run minimized" checkboxes
EnableWindow(GetDlgItem(hwnd, IDC_STARTAPP), FALSE);
EnableWindow(GetDlgItem(hwnd, IDC_MINIMIZED), FALSE);
EnableWindow(GetDlgItem(hwnd, 207), FALSE);
// Figure out who owns the page
psidPage = NULL;
if (!(pSD = LocalAlloc(LPTR, 50)))
{
PERROR(TEXT("Couldn't alloc 50 bytes\r\n"));
break;
}
uRet = NDdeGetShareSecurity (NULL,
lpDdeS->lpszShareName,
OWNER_SECURITY_INFORMATION,
pSD,
50,
&cbSD);
if (uRet == NDDE_BUF_TOO_SMALL)
{
LocalFree (pSD);
if (!(pSD = LocalAlloc(LPTR, cbSD)))
{
PERROR(TEXT("Couldn't alloc %ld bytes\r\n"), cbSD);
break;
}
uRet = NDdeGetShareSecurity (NULL,
lpDdeS->lpszShareName,
OWNER_SECURITY_INFORMATION,
pSD,
cbSD,
&cbSD);
}
if (NDDE_NO_ERROR != uRet)
{
PERROR(TEXT("GetSec fail %d"), uRet);
break;
}
if (!GetSecurityDescriptorOwner(pSD, &psidPage, &fDump))
{
PERROR(TEXT("Couldn't get owner, even tho we asked\r\n"));
break;
}
if (!psidPage || !IsUserMember(psidPage))
{
PINFO(TEXT("User isn't member of owner\r\n"));
break;
}
EnableWindow (GetDlgItem (hwnd, IDC_STARTAPP), TRUE);
// 207 is the group box around the checkboxes
EnableWindow (GetDlgItem (hwnd, 207), TRUE);
NDdeGetTrustedShare (NULL,
lpDdeS->lpszShareName,
adwTrust,
adwTrust + 1,
adwTrust + 2);
if (!(adwTrust[0] & NDDE_TRUST_SHARE_START))
{
PINFO (TEXT("Buttons shouldn't check\r\n"));
}
else
{
CheckDlgButton(hwnd, IDC_STARTAPP, 1);
EnableWindow (GetDlgItem (hwnd, IDC_MINIMIZED), TRUE);
CheckDlgButton (hwnd,
IDC_MINIMIZED,
(SW_MINIMIZE == (adwTrust[0] & NDDE_CMD_SHOW_MASK)) ? 1 : 0);
}
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
dwTrustOptions = NDDE_TRUST_SHARE_INIT;
if (IsDlgButtonChecked(hwnd, IDC_STARTAPP))
{
dwTrustOptions |= NDDE_TRUST_SHARE_START;
if (IsDlgButtonChecked(hwnd, IDC_MINIMIZED))
{
dwTrustOptions |= NDDE_TRUST_CMD_SHOW | SW_MINIMIZE;
}
}
// Update the share start flag.
if (dwTrustOptions & NDDE_TRUST_SHARE_START)
lpDdeS->fStartAppFlag = TRUE;
else
lpDdeS->fStartAppFlag = FALSE;
NDdeSetTrustedShare(NULL, lpDdeS->lpszShareName, dwTrustOptions);
EndDialog (hwnd, TRUE);
break;
case IDCANCEL:
EndDialog (hwnd, FALSE);
break;
case IDC_PERMISSIONS:
EditPermissions2 (hwnd, lpDdeS->lpszShareName, FALSE);
break;
case IDC_STARTAPP:
EnableWindow(GetDlgItem(hwnd, IDC_MINIMIZED),
IsDlgButtonChecked(hwnd, IDC_STARTAPP));
break;
default:
bRet = FALSE;
}
break;
case WM_HELP:
lphi = (LPHELPINFO) lParam;
if (lphi->iContextType == HELPINFO_WINDOW)
{
if ((lphi->iCtrlId == IDC_STARTAPP) ||
(lphi->iCtrlId == IDC_MINIMIZED) ||
(lphi->iCtrlId == IDC_PERMISSIONS) ||
(lphi->iCtrlId == IDOK) ||
(lphi->iCtrlId == IDCANCEL) )
{
WinHelp ( lphi->hItemHandle,
szHelpFile,
HELP_WM_HELP,
(DWORD_PTR) (LPVOID) aHelpIDs);
}
}
else
{
bRet = FALSE;
}
break;
case WM_CONTEXTMENU:
iCtrlId = GetDlgCtrlID( (HWND) wParam );
if ((iCtrlId == IDC_STATICSHARENAME) ||
(iCtrlId == IDC_STARTAPP) ||
(iCtrlId == IDC_MINIMIZED) ||
(iCtrlId == IDC_PERMISSIONS) ||
(iCtrlId == IDOK) ||
(iCtrlId == IDCANCEL) )
{
WinHelp( (HWND) wParam,
szHelpFile,
HELP_CONTEXTMENU,
(DWORD_PTR) (LPVOID) aHelpIDs);
}
break;
//
default:
bRet = FALSE;
}
if (pSD)
LocalFree (pSD);
return bRet;
}
/*
* IsUniqueName
*
* Check to see if the name is unique
*/
static BOOL IsUniqueName (PKEEPASDLG_PARAM pParam)
{
PMDIINFO pMDI;
LISTENTRY ListEntry;
PLISTENTRY pLE;
INT i;
if (!(pMDI = GETMDIINFO(hwndLocal)))
return FALSE;
StringCchCopy (ListEntry.name, MAX_PAGENAME_LENGTH + 1, pParam->ShareName);
i = (INT)SendMessage (pMDI->hWndListbox,
LB_FINDSTRING,
(WPARAM)-1,
(LPARAM)(LPCSTR) &ListEntry);
if (LB_ERR != i)
{
SendMessage (pMDI->hWndListbox,
LB_GETTEXT,
i,
(LPARAM)&pLE);
pParam->bAlreadyShared = IsShared (pLE);
return FALSE;
}
return TRUE;
}
/*
* KeepAsDlgProc
*
* Ask the user for a page name.
*/
INT_PTR CALLBACK KeepAsDlgProc(
HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
static PKEEPASDLG_PARAM pParam;
LPHELPINFO lphi;
const DWORD aHelpIDs[] =
{
IDC_STATICPAGENAME, IDH_KEEPASEDIT,
IDC_KEEPASEDIT, IDH_KEEPASEDIT,
IDC_SHARECHECKBOX, IDH_SHARECHECKBOX,
0, 0
};
switch (msg)
{
case WM_INITDIALOG:
pParam = (PKEEPASDLG_PARAM)lParam;
pParam->bAlreadyExist = FALSE;
pParam->bAlreadyShared = FALSE;
pParam->ShareName[0] = '\0';
SendDlgItemMessage (hwnd, IDC_KEEPASEDIT, EM_LIMITTEXT, MAX_NDDESHARENAME - 15, 0L);
SendDlgItemMessage (hwnd, IDC_SHARECHECKBOX, BM_SETCHECK, fSharePreference, 0L);
break;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
fSharePreference = (BOOL)SendDlgItemMessage (hwnd,
IDC_SHARECHECKBOX,
BM_GETCHECK,
0,
0L );
if (!GetDlgItemText(hwnd, IDC_KEEPASEDIT, pParam->ShareName+1, MAX_PAGENAME_LENGTH))
{
SetFocus (GetDlgItem (hwnd, IDC_KEEPASEDIT));
break;
}
pParam->ShareName[0] = SHR_CHAR;
if (!NDdeIsValidShareName(pParam->ShareName + 1))
{
MessageBoxID (hInst,
hwnd,
IDS_PAGENAMESYNTAX,
IDS_PASTEDLGTITLE,
MB_OK|MB_ICONEXCLAMATION);
break;
}
pParam->ShareName[0] = UNSHR_CHAR;
// make sure name is unique
if ( !IsUniqueName (pParam))
{
if (IDOK != MessageBoxID (hInst,
hwnd,
IDS_NAMEEXISTS,
IDS_PASTEDLGTITLE,
MB_OKCANCEL|MB_ICONEXCLAMATION))
break;
pParam->bAlreadyExist = TRUE;
}
EndDialog( hwnd, TRUE );
break;
case IDCANCEL:
EndDialog( hwnd, FALSE );
break;
default:
return FALSE;
}
break;
case WM_HELP:
lphi = (LPHELPINFO) lParam;
if (lphi->iContextType == HELPINFO_WINDOW)
{
WinHelp ( lphi->hItemHandle,
szHelpFile,
HELP_WM_HELP,
(DWORD_PTR) (LPVOID) aHelpIDs);
}
else
{
return FALSE;
}
break;
case WM_CONTEXTMENU:
WinHelp( (HWND) wParam,
szHelpFile,
HELP_CONTEXTMENU,
(DWORD_PTR) (LPVOID) aHelpIDs);
break;
default:
return FALSE;
}
return TRUE;
}