md: added themable PIN-pad dialog
- themable in the sense of using OS native design - user messages on PIN pad dialog are identical to Base CSP, which still displays the dialog for PIN entry if no PIN pad is available - adds progress bar to dialog - Uses Smartcard icon extracted from DDORes.dll - requires windows vista/windows server 2008 or above
This commit is contained in:
parent
d6e1d2ae8e
commit
c57c9c36bf
|
@ -14,5 +14,5 @@ $(TARGET): $(OBJECTS) $(LIBS)
|
||||||
echo LIBRARY $* > $*.def
|
echo LIBRARY $* > $*.def
|
||||||
echo EXPORTS >> $*.def
|
echo EXPORTS >> $*.def
|
||||||
type minidriver.exports >> $*.def
|
type minidriver.exports >> $*.def
|
||||||
link /dll $(LINKFLAGS) /def:$*.def /out:$(TARGET) $(OBJECTS) $(LIBS) $(ZLIB_LIB) $(OPENPACE_LIB) $(OPENSSL_LIB) ws2_32.lib gdi32.lib advapi32.lib Crypt32.lib User32.lib bcrypt.lib DelayImp.lib Rpcrt4.lib /DELAYLOAD:bcrypt.dll
|
link /dll $(LINKFLAGS) /def:$*.def /out:$(TARGET) $(OBJECTS) $(LIBS) $(ZLIB_LIB) $(OPENPACE_LIB) $(OPENSSL_LIB) ws2_32.lib gdi32.lib Comctl32.lib advapi32.lib Crypt32.lib User32.lib bcrypt.lib DelayImp.lib Rpcrt4.lib /DELAYLOAD:bcrypt.dll
|
||||||
if EXIST $(TARGET).manifest mt -manifest $(TARGET).manifest -outputresource:$(TARGET);2
|
if EXIST $(TARGET).manifest mt -manifest $(TARGET).manifest -outputresource:$(TARGET);2
|
||||||
|
|
|
@ -30,11 +30,14 @@
|
||||||
#pragma managed(push, off)
|
#pragma managed(push, off)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <Commctrl.h>
|
||||||
|
#include "cardmod.h"
|
||||||
|
|
||||||
#include "common/compat_strlcpy.h"
|
#include "common/compat_strlcpy.h"
|
||||||
#include "libopensc/asn1.h"
|
#include "libopensc/asn1.h"
|
||||||
|
@ -111,12 +114,7 @@ HINSTANCE g_inst;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* defined twice: in versioninfo-minidriver.rc.in and in minidriver.c */
|
/* defined twice: in versioninfo-minidriver.rc.in and in minidriver.c */
|
||||||
#define IDD_PINPAD 101
|
#define IDI_SMARTCARD 102
|
||||||
#define IDI_LOGO 102
|
|
||||||
#define IDC_EXPLANATION_TEXT 1003
|
|
||||||
#define IDC_PURPOSE_TEXT 1002
|
|
||||||
#define IDC_PINPAD_TEXT 1001
|
|
||||||
#define IDC_PINPAD_ICON 1000
|
|
||||||
|
|
||||||
/* magic to determine previous pinpad authentication */
|
/* magic to determine previous pinpad authentication */
|
||||||
#define MAGIC_SESSION_PIN "opensc-minidriver"
|
#define MAGIC_SESSION_PIN "opensc-minidriver"
|
||||||
|
@ -2304,39 +2302,6 @@ md_query_key_sizes(PCARD_DATA pCardData, DWORD dwKeySpec, CARD_KEY_SIZES *pKeySi
|
||||||
return SCARD_S_SUCCESS;
|
return SCARD_S_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID CenterWindow(HWND hwndWindow, HWND hwndParent)
|
|
||||||
{
|
|
||||||
RECT rectWindow, rectParent;
|
|
||||||
int nWidth,nHeight, nScreenWidth, nScreenHeight;
|
|
||||||
int nX, nY;
|
|
||||||
GetWindowRect(hwndWindow, &rectWindow);
|
|
||||||
|
|
||||||
nWidth = rectWindow.right - rectWindow.left;
|
|
||||||
nHeight = rectWindow.bottom - rectWindow.top;
|
|
||||||
|
|
||||||
nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
|
|
||||||
nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
|
|
||||||
|
|
||||||
// make the window relative to its parent
|
|
||||||
if (hwndParent != NULL) {
|
|
||||||
GetWindowRect(hwndParent, &rectParent);
|
|
||||||
nX = ((rectParent.right - rectParent.left) - nWidth) / 2 + rectParent.left;
|
|
||||||
nY = ((rectParent.bottom - rectParent.top) - nHeight) / 2 + rectParent.top;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
nX = (nScreenWidth - nWidth) /2;
|
|
||||||
nY = (nScreenHeight - nHeight) /2;
|
|
||||||
}
|
|
||||||
// make sure that the dialog box never moves outside of the screen
|
|
||||||
if (nX < 0) nX = 0;
|
|
||||||
if (nY < 0) nY = 0;
|
|
||||||
if (nX + nWidth > nScreenWidth) nX = nScreenWidth - nWidth;
|
|
||||||
if (nY + nHeight > nScreenHeight) nY = nScreenHeight - nHeight;
|
|
||||||
|
|
||||||
MoveWindow(hwndWindow, nX, nY, nWidth, nHeight, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static DWORD WINAPI
|
static DWORD WINAPI
|
||||||
md_dialog_perform_pin_operation_thread(PVOID lpParameter)
|
md_dialog_perform_pin_operation_thread(PVOID lpParameter)
|
||||||
{
|
{
|
||||||
|
@ -2374,114 +2339,57 @@ md_dialog_perform_pin_operation_thread(PVOID lpParameter)
|
||||||
return (DWORD) rv;
|
return (DWORD) rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT_PTR CALLBACK md_dialog_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
static INT_PTR CALLBACK md_dialog_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(wParam);
|
UNREFERENCED_PARAMETER(lParam);
|
||||||
switch (message)
|
switch (message) {
|
||||||
{
|
case TDN_CREATED:
|
||||||
case WM_INITDIALOG:
|
|
||||||
{
|
|
||||||
LANGID lang = GetUserDefaultUILanguage();
|
|
||||||
struct sc_pkcs15_card *p15card = (struct sc_pkcs15_card *) (((LONG_PTR*)lParam)[1]);
|
|
||||||
DWORD role = (DWORD) (((LONG_PTR*)lParam)[8]);
|
|
||||||
HICON hIcon = NULL;
|
|
||||||
PCARD_DATA pCardData = (PCARD_DATA) (((LONG_PTR*)lParam)[7]);
|
|
||||||
VENDOR_SPECIFIC* vs = (VENDOR_SPECIFIC*) pCardData->pvVendorSpecific;
|
|
||||||
/* store parameter like pCardData for further use if needed */
|
|
||||||
SetWindowLongPtr(hWnd, GWLP_USERDATA, lParam);
|
|
||||||
/* change the text shown on the screen */
|
|
||||||
if (p15card->tokeninfo->preferred_language) {
|
|
||||||
/* choose the token's preferred language over the system's language */
|
|
||||||
if (strncmp(p15card->tokeninfo->preferred_language, "de", 2))
|
|
||||||
lang = LANG_GERMAN|SUBLANG_GERMAN;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vs->wszPinContext ) {
|
|
||||||
SetWindowTextW(GetDlgItem(hWnd, IDC_PURPOSE_TEXT), vs->wszPinContext);
|
|
||||||
}
|
|
||||||
if (lang & LANG_GERMAN) {
|
|
||||||
SetWindowText(hWnd,
|
|
||||||
"PIN-Eingabe notwendig");
|
|
||||||
SetWindowText(GetDlgItem(hWnd, IDC_EXPLANATION_TEXT),
|
|
||||||
"Dieses Fenster wird automatisch geschlossen, wenn die PIN am PINPAD eingegeben wurde oder nach dem PINPAD-Timeout (typischerweise nach 30 Sekunden).");
|
|
||||||
SetWindowText(GetDlgItem(hWnd, IDC_EXPLANATION_TEXT),
|
|
||||||
"Dieses Fenster wird automatisch geschlossen, wenn die PIN am PINPAD eingegeben wurde oder nach dem PINPAD-Timeout (typischerweise nach 30 Sekunden).");
|
|
||||||
SetWindowText(GetDlgItem(hWnd, IDCANCEL),
|
|
||||||
"Abbrechen");
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (role) {
|
|
||||||
case ROLE_ADMIN:
|
|
||||||
if (lang & LANG_GERMAN) {
|
|
||||||
SetWindowText(GetDlgItem(hWnd, IDC_PINPAD_TEXT),
|
|
||||||
"Bitte geben Sie Ihre PIN zum Entsperren der Nutzer-PIN auf dem PINPAD ein.");
|
|
||||||
} else {
|
|
||||||
SetWindowText(GetDlgItem(hWnd, IDC_PINPAD_TEXT),
|
|
||||||
"Please enter your PIN to unblock the user PIN on the PINPAD.");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ROLE_USER:
|
|
||||||
if (lang & LANG_GERMAN) {
|
|
||||||
SetWindowText(GetDlgItem(hWnd, IDC_PINPAD_TEXT),
|
|
||||||
"Bitte geben Sie Ihre Signatur-PIN auf dem PINPAD ein.");
|
|
||||||
} else {
|
|
||||||
SetWindowText(GetDlgItem(hWnd, IDC_PINPAD_TEXT),
|
|
||||||
"Please enter your digital signature PIN on the PINPAD.");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
CenterWindow(hWnd, vs->hwndParent);
|
|
||||||
/* load the information icon */
|
|
||||||
hIcon = (HICON) LoadImage(0, IDI_INFORMATION, IMAGE_ICON, 0, 0, LR_SHARED);
|
|
||||||
SendMessage(GetDlgItem(hWnd, IDC_PINPAD_ICON),STM_SETIMAGE,IMAGE_ICON, (LPARAM) hIcon);
|
|
||||||
/* change the icon */
|
|
||||||
hIcon = LoadIcon(g_inst, MAKEINTRESOURCE(IDI_LOGO));
|
|
||||||
if (hIcon)
|
|
||||||
{
|
{
|
||||||
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIcon);
|
/* remove the icon from the window title */
|
||||||
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM) hIcon);
|
SendMessage(hWnd, WM_SETICON, (LPARAM) ICON_BIG, (LONG_PTR) NULL);
|
||||||
|
SendMessage(hWnd, WM_SETICON, (LPARAM) ICON_SMALL, (LONG_PTR) NULL);
|
||||||
|
/* store parameter like pCardData for further use if needed */
|
||||||
|
SetWindowLongPtr(hWnd, GWLP_USERDATA, dwRefData);
|
||||||
|
/* launch the function in another thread context store the thread handle */
|
||||||
|
((LONG_PTR*)dwRefData)[10] = (LONG_PTR) hWnd;
|
||||||
|
((LONG_PTR*)dwRefData)[9] = (LONG_PTR) CreateThread(NULL, 0, md_dialog_perform_pin_operation_thread, (LPVOID) dwRefData, 0, NULL);
|
||||||
}
|
}
|
||||||
/* launch the function in another thread context store the thread handle */
|
case TDN_TIMER:
|
||||||
((LONG_PTR*)lParam)[10] = (LONG_PTR) hWnd;
|
// progress bar 30 seconds.
|
||||||
((LONG_PTR*)lParam)[9] = (LONG_PTR) CreateThread(NULL, 0, md_dialog_perform_pin_operation_thread, (PVOID) lParam, 0, NULL);
|
SendMessage(hWnd, TDM_SET_PROGRESS_BAR_POS, wParam / 300 , 0L);
|
||||||
}
|
/* continue the tickcount */
|
||||||
return TRUE;
|
return S_OK;
|
||||||
case WM_COMMAND:
|
case TDN_BUTTON_CLICKED:
|
||||||
{
|
{
|
||||||
/* This *must* be IDCANCEL, because we don't have any other command */
|
/* We ignore anything else than the Cancel button */
|
||||||
if (LOWORD(wParam) != IDCANCEL)
|
if (LOWORD(wParam) != IDCANCEL)
|
||||||
return FALSE;
|
return S_FALSE;
|
||||||
|
|
||||||
/* cancel request */
|
LONG_PTR param = GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
||||||
LPARAM param = GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
if (param) {
|
||||||
if (param) {
|
PCARD_DATA pCardData = (PCARD_DATA)((LONG_PTR*)param)[7];
|
||||||
PCARD_DATA pCardData = (PCARD_DATA)((LONG_PTR*)param)[7];
|
VENDOR_SPECIFIC* vs = (VENDOR_SPECIFIC*) pCardData->pvVendorSpecific;
|
||||||
VENDOR_SPECIFIC* vs = (VENDOR_SPECIFIC*) pCardData->pvVendorSpecific;
|
sc_cancel(vs->ctx);
|
||||||
sc_cancel(vs->ctx);
|
|
||||||
/* Some readers don't support SCardCancel, though they're
|
|
||||||
* reporting SCARD_S_SUCCESS. We force closing of the dialog so
|
|
||||||
* that at least the application can continue. */
|
|
||||||
if (((LONG_PTR*)param)[10] != 0) {
|
|
||||||
EndDialog((HWND) ((LONG_PTR*)param)[10], SC_ERROR_KEYPAD_CANCELLED);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
/* Some readers don't support SCardCancel, though they're
|
||||||
return TRUE;
|
* reporting SCARD_S_SUCCESS. We force closing of the dialog so
|
||||||
case WM_DESTROY:
|
* that at least the application can continue. */
|
||||||
{
|
return S_OK;
|
||||||
/* clean resources used */
|
case TDN_DESTROYED:
|
||||||
LPARAM param = GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
{
|
||||||
if (param) {
|
/* clean resources used */
|
||||||
HANDLE hThread = (HANDLE)((LONG_PTR*)param)[9];
|
LONG_PTR param = GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
||||||
CloseHandle(hThread);
|
if (param) {
|
||||||
|
HANDLE hThread = (HANDLE)((LONG_PTR*)param)[9];
|
||||||
|
CloseHandle(hThread);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return FALSE;
|
|
||||||
|
/* don't close the Task Dialog */
|
||||||
|
return S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2494,8 +2402,12 @@ md_dialog_perform_pin_operation(PCARD_DATA pCardData, int operation, struct sc_p
|
||||||
{
|
{
|
||||||
LONG_PTR parameter[11];
|
LONG_PTR parameter[11];
|
||||||
INT_PTR result = 0;
|
INT_PTR result = 0;
|
||||||
|
HWND hWndDlg = 0;
|
||||||
|
TASKDIALOGCONFIG tc = {0};
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
VENDOR_SPECIFIC* pv = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
|
VENDOR_SPECIFIC* pv = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
|
||||||
|
LANGID lang = GetUserDefaultUILanguage();
|
||||||
|
|
||||||
/* stack the parameters */
|
/* stack the parameters */
|
||||||
parameter[0] = (LONG_PTR)operation;
|
parameter[0] = (LONG_PTR)operation;
|
||||||
parameter[1] = (LONG_PTR)p15card;
|
parameter[1] = (LONG_PTR)p15card;
|
||||||
|
@ -2508,16 +2420,77 @@ md_dialog_perform_pin_operation(PCARD_DATA pCardData, int operation, struct sc_p
|
||||||
parameter[8] = (LONG_PTR)role;
|
parameter[8] = (LONG_PTR)role;
|
||||||
parameter[9] = 0; /* place holder for thread handle */
|
parameter[9] = 0; /* place holder for thread handle */
|
||||||
parameter[10] = 0; /* place holder for window handle */
|
parameter[10] = 0; /* place holder for window handle */
|
||||||
|
|
||||||
/* launch the function to perform in the same thread context */
|
/* launch the function to perform in the same thread context */
|
||||||
if (!displayUI) {
|
if (!displayUI) {
|
||||||
rv = md_dialog_perform_pin_operation_thread(parameter);
|
rv = md_dialog_perform_pin_operation_thread(parameter);
|
||||||
SecureZeroMemory(parameter, sizeof(parameter));
|
SecureZeroMemory(parameter, sizeof(parameter));
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* launch the UI in the same thread context than the parent and the function to perform in another thread context
|
/* launch the UI in the same thread context than the parent and the function to perform in another thread context
|
||||||
this is the only way to display a modal dialog attached to a parent (hwndParent != 0) */
|
this is the only way to display a modal dialog attached to a parent (hwndParent != 0) */
|
||||||
result = DialogBoxParam(g_inst, MAKEINTRESOURCE(IDD_PINPAD), pv->hwndParent, md_dialog_proc, (LPARAM) parameter);
|
tc.hwndParent = pv->hwndParent;
|
||||||
|
tc.hInstance = g_inst;
|
||||||
|
tc.dwFlags = TDF_ALLOW_DIALOG_CANCELLATION | TDF_SHOW_PROGRESS_BAR | TDF_CALLBACK_TIMER | TDF_EXPAND_FOOTER_AREA | TDF_POSITION_RELATIVE_TO_WINDOW | TDF_USE_HICON_FOOTER;
|
||||||
|
tc.dwCommonButtons = TDCBF_CANCEL_BUTTON;
|
||||||
|
|
||||||
|
if (p15card->tokeninfo->preferred_language) {
|
||||||
|
/* choose the token's preferred language over the system's language */
|
||||||
|
if (strncmp(p15card->tokeninfo->preferred_language, "de", 2))
|
||||||
|
lang = LANG_GERMAN|SUBLANG_GERMAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lang & LANG_GERMAN) {
|
||||||
|
tc.pszWindowTitle = L"Windows-Sicherheit";
|
||||||
|
tc.pszMainInstruction = L"OpenSC Smartcard-Anbieter";
|
||||||
|
switch (role) {
|
||||||
|
case ROLE_ADMIN:
|
||||||
|
tc.pszContent = L"Bitte geben Sie Ihre PIN zum Entsperren der Nutzer-PIN auf dem PINPAD ein.";
|
||||||
|
break;
|
||||||
|
case ROLE_USER:
|
||||||
|
/* fall through */
|
||||||
|
default:
|
||||||
|
tc.pszContent = L"Bitte geben Sie Ihre PIN für die digitale Signatur auf dem PINPAD ein.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tc.pszExpandedInformation = L"Dieses Fenster wird automatisch geschlossen, wenn die PIN am PINPAD eingegeben wurde (Timeout typischerweise nach 30 Sekunden).";
|
||||||
|
tc.pszExpandedControlText = L"Weitere Informationen";
|
||||||
|
tc.pszCollapsedControlText = L"Weitere Informationen";
|
||||||
|
} else {
|
||||||
|
tc.pszWindowTitle = L"Windows Security";
|
||||||
|
tc.pszMainInstruction = L"OpenSC Smart Card Provider";
|
||||||
|
switch (role) {
|
||||||
|
case ROLE_ADMIN:
|
||||||
|
tc.pszContent = L"Please enter your PIN to unblock the user PIN on the PINPAD.";
|
||||||
|
break;
|
||||||
|
case ROLE_USER:
|
||||||
|
/* fall through */
|
||||||
|
default:
|
||||||
|
tc.pszContent = L"Please enter your digital signature PIN on the PINPAD.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tc.pszExpandedInformation = L"This window will be closed automatically after the PIN has been submitted on the PINPAD (timeout typically after 30 seconds).";
|
||||||
|
tc.pszExpandedControlText = L"Click here for more information";
|
||||||
|
tc.pszCollapsedControlText = L"Click here for more information";
|
||||||
|
}
|
||||||
|
if (pv->wszPinContext ) {
|
||||||
|
tc.pszMainInstruction = pv->wszPinContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
tc.pszMainIcon = MAKEINTRESOURCE(IDI_SMARTCARD);
|
||||||
|
tc.cButtons = 0;
|
||||||
|
tc.pButtons = NULL;
|
||||||
|
tc.cRadioButtons = 0;
|
||||||
|
tc.pRadioButtons = NULL;
|
||||||
|
tc.pfCallback = md_dialog_proc;
|
||||||
|
tc.lpCallbackData = (LONG_PTR)parameter;
|
||||||
|
tc.cbSize = sizeof(tc);
|
||||||
|
|
||||||
|
result = TaskDialogIndirect(&tc, NULL, NULL, NULL);
|
||||||
|
|
||||||
SecureZeroMemory(parameter, sizeof(parameter));
|
SecureZeroMemory(parameter, sizeof(parameter));
|
||||||
|
|
||||||
return (int) result;
|
return (int) result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||||
|
<dependency>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity
|
||||||
|
type="win32"
|
||||||
|
name="Microsoft.Windows.Common-Controls"
|
||||||
|
version="6.0.0.0"
|
||||||
|
processorArchitecture="*"
|
||||||
|
publicKeyToken="6595b64144ccf1df"
|
||||||
|
language="*"
|
||||||
|
/>
|
||||||
|
</dependentAssembly>
|
||||||
|
</dependency>
|
||||||
|
</assembly>
|
|
@ -2,11 +2,7 @@
|
||||||
|
|
||||||
#define IDC_STATIC -1
|
#define IDC_STATIC -1
|
||||||
/* defined twice: in versioninfo-minidriver.rc.in and in minidriver.c */
|
/* defined twice: in versioninfo-minidriver.rc.in and in minidriver.c */
|
||||||
#define IDD_PINPAD 101
|
#define IDI_SMARTCARD 102
|
||||||
#define IDI_LOGO 102
|
|
||||||
#define IDC_PURPOSE_TEXT 1002
|
|
||||||
#define IDC_PINPAD_TEXT 1001
|
|
||||||
#define IDC_PINPAD_ICON 1000
|
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
|
FILEVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
|
||||||
|
@ -44,20 +40,4 @@ BEGIN
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_PINPAD DIALOGEX 0, 0, 309, 89
|
IDI_SMARTCARD ICON "..\\..\\win32\\DDORes.dll_14_2302.ico"
|
||||||
STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
|
|
||||||
CAPTION "PIN Entry Required"
|
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
|
||||||
BEGIN
|
|
||||||
LTEXT "OpenSC Smart Card Provider",IDC_PURPOSE_TEXT,46,9,256,10
|
|
||||||
LTEXT "Please enter your PIN on the PINPAD",IDC_PINPAD_TEXT,46,19,256,19
|
|
||||||
ICON "",IDC_PINPAD_ICON,6,11,20,20
|
|
||||||
LTEXT "This window will be closed automatically after the PIN has been submitted on the PINPAD or if the PINPAD timeout occurs (in general 30 seconds).",IDC_STATIC,7,46,298,19
|
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,250,67,50,14
|
|
||||||
END
|
|
||||||
|
|
||||||
#ifndef __MINGW32__
|
|
||||||
IDI_LOGO ICON "..\\..\\win32\\OpenSC.ico"
|
|
||||||
#else
|
|
||||||
IDI_LOGO ICON "../../win32/OpenSC.ico"
|
|
||||||
#endif
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
|
@ -125,14 +125,14 @@ ALL_INCLUDES = /I$(TOPDIR)\win32 /I$(TOPDIR)\src $(OPENPACE_INCL_DIR) $(OPENSSL_
|
||||||
!IF "$(DEBUG_DEF)" == "/DDEBUG"
|
!IF "$(DEBUG_DEF)" == "/DDEBUG"
|
||||||
LINKDEBUGFLAGS = /NODEFAULTLIB:LIBCMT /DEBUG
|
LINKDEBUGFLAGS = /NODEFAULTLIB:LIBCMT /DEBUG
|
||||||
CODE_OPTIMIZATION =
|
CODE_OPTIMIZATION =
|
||||||
COPTS = /GS /W3 /D_CRT_SECURE_NO_DEPRECATE /MTd /nologo /DHAVE_CONFIG_H $(ALL_INCLUDES) /D_WIN32_WINNT=0x0502 /DWIN32_LEAN_AND_MEAN $(OPENPACE_DEF) $(OPENSSL_DEF) $(ZLIB_DEF) $(MINIDRIVER_DEF) $(SM_DEF) /DOPENSC_FEATURES="\"$(OPENSC_FEATURES)\"" /DDEBUG /Zi /Od
|
COPTS = /GS /W3 /D_CRT_SECURE_NO_DEPRECATE /MTd /nologo /DHAVE_CONFIG_H $(ALL_INCLUDES) /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN $(OPENPACE_DEF) $(OPENSSL_DEF) $(ZLIB_DEF) $(MINIDRIVER_DEF) $(SM_DEF) /DOPENSC_FEATURES="\"$(OPENSC_FEATURES)\"" /DDEBUG /Zi /Od
|
||||||
!ELSE
|
!ELSE
|
||||||
LINKDEBUGFLAGS = /NODEFAULTLIB:LIBCMTD
|
LINKDEBUGFLAGS = /NODEFAULTLIB:LIBCMTD
|
||||||
COPTS = /GS /W3 /D_CRT_SECURE_NO_DEPRECATE /MT /nologo /DHAVE_CONFIG_H $(ALL_INCLUDES) /D_WIN32_WINNT=0x0502 /DWIN32_LEAN_AND_MEAN $(OPENPACE_DEF) $(OPENSSL_DEF) $(ZLIB_DEF) $(MINIDRIVER_DEF) $(SM_DEF) /DOPENSC_FEATURES="\"$(OPENSC_FEATURES)\""
|
COPTS = /GS /W3 /D_CRT_SECURE_NO_DEPRECATE /MT /nologo /DHAVE_CONFIG_H $(ALL_INCLUDES) /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN $(OPENPACE_DEF) $(OPENSSL_DEF) $(ZLIB_DEF) $(MINIDRIVER_DEF) $(SM_DEF) /DOPENSC_FEATURES="\"$(OPENSC_FEATURES)\""
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
|
|
||||||
LINKFLAGS = /NOLOGO /INCREMENTAL:NO /MACHINE:$(PLATFORM) /MANIFEST:NO /NODEFAULTLIB:MSVCRTD /NODEFAULTLIB:MSVCRT /NXCOMPAT /DYNAMICBASE $(LINKDEBUGFLAGS)
|
LINKFLAGS = /NOLOGO /INCREMENTAL:NO /MACHINE:$(PLATFORM) /NODEFAULTLIB:MSVCRTD /NODEFAULTLIB:MSVCRT /NXCOMPAT /DYNAMICBASE $(LINKDEBUGFLAGS)
|
||||||
LIBFLAGS = /nologo /machine:$(PLATFORM)
|
LIBFLAGS = /nologo /machine:$(PLATFORM)
|
||||||
!IF "$(PLATFORM)" == "x86"
|
!IF "$(PLATFORM)" == "x86"
|
||||||
CANDLEFLAGS = -dPlatform=x86 $(CANDLEFLAGS)
|
CANDLEFLAGS = -dPlatform=x86 $(CANDLEFLAGS)
|
||||||
|
@ -150,4 +150,4 @@ CANDLEFLAGS = -dPlatform=x64 $(CANDLEFLAGS)
|
||||||
rc /l 0x0409 $<
|
rc /l 0x0409 $<
|
||||||
|
|
||||||
clean::
|
clean::
|
||||||
del /Q *.obj *.dll *.exe *.pdb *.lib *.def *.manifest *.res
|
del /Q *.obj *.dll *.exe *.pdb *.lib *.def *.res
|
||||||
|
|
Loading…
Reference in New Issue