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.
 
 
 
 
 
 

217 lines
9.2 KiB

/*
SHEET1.CPP
Implements the property sheet page's behaviors.
*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <commdlg.h>
#include <commctrl.h>
#include <ole2.h>
#include <stdio.h>
#include "support.h"
#include "helpers.h"
#include "res.h"
#include "utils.h"
extern BOOL fUnblockActive;
extern INT iCurrent;
extern HINSTANCE ghInstance;
extern HWND hwndContainer;
void HelpHandler(LPARAM lp);
/* ---------------------------------------------------------------------
PageProc1
Page procedure for the first page, the PIN change page.
--------------------------------------------------------------------- */
INT_PTR CALLBACK PageProc1(
HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
INT_PTR ret;
HWND hwndCred = NULL;
BOOL gfSuccess = FALSE;
switch (msg)
{
case WM_HELP:
{
HelpHandler(lparam);
break;
};
case WM_NOTIFY:
{
NMHDR *pHdr = (NMHDR *)lparam;
switch (pHdr->code)
{
case PSN_SETACTIVE:
// A good place to capture the hwnd of the enclosing property sheet
iCurrent = 1;
if (NULL == hwndContainer)
{
hwndContainer = pHdr->hwndFrom;
ASSERT(hwndContainer);
}
if (fUnblockActive)
{
// If sheet 2 still active force the UI back there.
SetWindowLongPtr(hwnd,DWLP_MSGRESULT,IDD_PAGE2);
return TRUE;
}
// return 0 to permit activation to proceed on this page.
return 0;
break;
case PSN_KILLACTIVE:
//User hit OK, or switched to another page
//do validation, return FALSE if ok to lose focus, else TRUE
return FALSE;
break;
case PSN_QUERYCANCEL:
// Return TRUE to prevent cancel, FALSE to allow it.
return FALSE;
case PSN_APPLY:
// Only process an apply for this page if it is the active page
// Only process an apply for this page if sheet 2 is active
// This will entail getting the two copies of the PIN, making sure they are
// identical, and
if (iCurrent != 1)
{
// If the user was looking at the other sheet when he hit OK, do
// nothing with the page.
SetWindowLongPtr(hwnd,DWLP_MSGRESULT,PSNRET_NOERROR);
return TRUE;
}
// buffers for old pin and 2 copies of new pin
WCHAR szOld[100];
WCHAR sz[100];
WCHAR sz2[100];
// SetWindowLong(DWL_MSGRESULT = PSNRET_INVALID if unable
// PSN_INVALID_NOCHANGEPAGE looks the same
// PSNRET_NOERROR - OK, page can be destroyed if OK
SetWindowLongPtr(hwnd,DWLP_MSGRESULT,PSNRET_NOERROR);
GetWindowText(GetDlgItem(hwnd,IDC_OLDPIN),szOld,100);
GetWindowText(GetDlgItem(hwnd,IDC_NEWPIN1),sz,100);
GetWindowText(GetDlgItem(hwnd,IDC_NEWPIN2),sz2,100);
// Do not process pin change unless the two copies entered by the user were the same
if (0 != wcscmp(sz,sz2))
{
PresentModalMessageBox(hwnd, IDS_NOTSAME,MB_ICONHAND);
SetWindowLongPtr(hwnd,DWLP_MSGRESULT,PSNRET_INVALID);
return TRUE;
}
else
{
// Do not process an attempt to change the pin to a blank pin
if (wcslen(sz) == 0)
{
PresentModalMessageBox(hwnd, IDS_BADPIN,MB_ICONHAND);
SetWindowLongPtr(hwnd,DWLP_MSGRESULT,PSNRET_INVALID);
return TRUE;
}
DWORD dwRet = DoChangePin(szOld,sz);
if (0 == dwRet)
{
PresentModalMessageBox(hwnd,IDS_PINCHANGEOK,MB_OK);
}
else
{
switch(dwRet)
{
case SCARD_F_INTERNAL_ERROR:
PresentModalMessageBox(hwnd, IDS_INTERROR ,MB_ICONHAND);
break;
case SCARD_E_CANCELLED:
PresentModalMessageBox(hwnd, IDS_CANCELLED,MB_ICONHAND);
break;
case SCARD_E_NO_SERVICE:
PresentModalMessageBox(hwnd, IDS_NOSERVICE,MB_ICONHAND);
break;
case SCARD_E_SERVICE_STOPPED:
PresentModalMessageBox(hwnd, IDS_STOPPED,MB_ICONHAND);
break;
case SCARD_E_UNSUPPORTED_FEATURE:
PresentModalMessageBox(hwnd, IDS_UNSUPPORTED,MB_ICONHAND);
break;
case SCARD_E_FILE_NOT_FOUND:
PresentModalMessageBox(hwnd, IDS_NOTFOUND,MB_ICONHAND);
break;
case SCARD_E_WRITE_TOO_MANY:
PresentModalMessageBox(hwnd, IDS_TOOMANY,MB_ICONHAND);
break;
case SCARD_E_INVALID_CHV:
// !!! Note the mapping of invalid to wrong.
// consult public\sdk\inc\scarderr.h @ 562
PresentModalMessageBox(hwnd, IDS_WRONGCHV,MB_ICONHAND);
break;
case SCARD_W_UNSUPPORTED_CARD:
PresentModalMessageBox(hwnd, IDS_UNSUPPORTED,MB_ICONHAND);
break;
case SCARD_W_UNRESPONSIVE_CARD:
PresentModalMessageBox(hwnd, IDS_UNRESP ,MB_ICONHAND);
break;
case SCARD_W_REMOVED_CARD:
PresentModalMessageBox(hwnd, IDS_REMOVED ,MB_ICONHAND);
break;
case SCARD_W_WRONG_CHV:
PresentModalMessageBox(hwnd, IDS_WRONGCHV,MB_ICONHAND);
break;
case SCARD_W_CHV_BLOCKED:
PresentModalMessageBox(hwnd, IDS_BLOCKEDCHV,MB_ICONHAND);
break;
default:
PresentModalMessageBox(hwnd, IDS_PINCHANGEFAIL,MB_ICONHAND);
break;
}
SetWindowLongPtr(hwnd,DWLP_MSGRESULT,PSNRET_INVALID);
return TRUE;
}
}
}
return TRUE;
}
break;
case WM_COMMAND:
// Button clicks.
switch(LOWORD(wparam))
{
case IDBUTTON1:
if (HIWORD(wparam) == BN_CLICKED)
{
SendMessage(hwndContainer,PSM_CHANGED,(WPARAM)hwnd,(LPARAM)0);
}
break;
default:
break;
}
break;
default:
break;
}
return FALSE;
}