win32: Load notification icons from Windows DLLs

fixes showing wrong icons when loaded as PKCS#11 module
This commit is contained in:
Frank Morgner 2017-08-02 17:14:26 +02:00
parent 956ad33e31
commit 7bc070ac67
14 changed files with 83 additions and 123 deletions

View File

@ -1049,6 +1049,7 @@ AC_CONFIG_FILES([
src/tests/regression/Makefile
src/tools/Makefile
src/tools/versioninfo-tools.rc
src/tools/versioninfo-opensc-notify.rc
src/smm/Makefile
src/minidriver/Makefile
src/minidriver/versioninfo-minidriver.rc

View File

@ -3,23 +3,11 @@
#define IDC_STATIC -1
/* defined twice: in ressource file and in source code */
#define IDI_SMARTCARD 102
#define IDI_UNLOCKED 103
#define IDI_LOCKED 104
#define IDI_READER_EMPTY 105
#define IDI_CARD_INSERTED 106
#ifndef __MINGW32__
IDI_SMARTCARD ICON "..\\..\\win32\\DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "..\\..\\win32\\certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "..\\..\\win32\\certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "..\\..\\win32\\SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "..\\..\\win32\\SCardDlg.dll_14_143.ico"
#else
IDI_SMARTCARD ICON "../../win32/DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "../../win32/certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "../../win32/certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "../../win32/SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "../../win32/SCardDlg.dll_14_143.ico"
#endif
VS_VERSION_INFO VERSIONINFO

View File

@ -1,27 +1,5 @@
#include <winresrc.h>
#define IDC_STATIC -1
/* defined twice: in ressource file and in source code */
#define IDI_SMARTCARD 102
#define IDI_UNLOCKED 103
#define IDI_LOCKED 104
#define IDI_READER_EMPTY 105
#define IDI_CARD_INSERTED 106
#ifndef __MINGW32__
IDI_SMARTCARD ICON "..\\..\\win32\\DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "..\\..\\win32\\certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "..\\..\\win32\\certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "..\\..\\win32\\SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "..\\..\\win32\\SCardDlg.dll_14_143.ico"
#else
IDI_SMARTCARD ICON "../../win32/DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "../../win32/certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "../../win32/certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "../../win32/SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "../../win32/SCardDlg.dll_14_143.ico"
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
PRODUCTVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
@ -57,3 +35,4 @@ BEGIN
VALUE "Translation", 0x409, 1200
END
END

View File

@ -1,27 +1,5 @@
#include <winresrc.h>
#define IDC_STATIC -1
/* defined twice: in ressource file and in source code */
#define IDI_SMARTCARD 102
#define IDI_UNLOCKED 103
#define IDI_LOCKED 104
#define IDI_READER_EMPTY 105
#define IDI_CARD_INSERTED 106
#ifndef __MINGW32__
IDI_SMARTCARD ICON "..\\..\\win32\\DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "..\\..\\win32\\certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "..\\..\\win32\\certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "..\\..\\win32\\SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "..\\..\\win32\\SCardDlg.dll_14_143.ico"
#else
IDI_SMARTCARD ICON "../../win32/DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "../../win32/certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "../../win32/certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "../../win32/SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "../../win32/SCardDlg.dll_14_143.ico"
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
PRODUCTVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
@ -57,3 +35,4 @@ BEGIN
VALUE "Translation", 0x409, 1200
END
END

View File

@ -14,8 +14,8 @@ do_subst = $(SED) \
NPA_TOOL_BUILT_SOURCES = npa-tool-cmdline.h npa-tool-cmdline.c
OPENSC_NOTIFY_BUILT_SOURCES = opensc-notify-cmdline.h opensc-notify-cmdline.c
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in $(srcdir)/versioninfo-tools.rc
EXTRA_DIST = Makefile.mak versioninfo-tools.rc.in npa-tool.ggo.in npa-tool.1 opensc-notify.ggo.in
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in $(srcdir)/versioninfo-tools.rc $(srcdir)/versioninfo-opensc-notify.rc
EXTRA_DIST = Makefile.mak versioninfo-tools.rc.in versioninfo-opensc-notify.rc.in npa-tool.ggo.in npa-tool.1 opensc-notify.ggo.in
noinst_HEADERS = util.h fread_to_eof.h
noinst_PROGRAMS = sceac-example
@ -143,6 +143,7 @@ openpgp_tool_SOURCES += versioninfo-tools.rc
iasecc_tool_SOURCES += versioninfo-tools.rc
sc_hsm_tool_SOURCES += versioninfo-tools.rc
gids_tool_SOURCES += versioninfo-tools.rc
opensc_notify_SOURCES += versioninfo-opensc-notify.rc
endif
clean-local:

View File

@ -11,9 +11,6 @@ TARGETS = opensc-tool.exe opensc-explorer.exe pkcs15-tool.exe pkcs15-crypt.exe \
OBJECTS = util.obj npa-tool-cmdline.obj fread_to_eof.obj versioninfo-tools.res
TARGET2 = opensc-notify.exe
OBJECT2 = opensc-notify-cmdline.obj versioninfo-tools.res
LIBS = $(TOPDIR)\src\common\common.lib \
$(TOPDIR)\src\scconf\scconf.lib \
$(TOPDIR)\src\libopensc\opensc.lib \
@ -21,11 +18,14 @@ LIBS = $(TOPDIR)\src\common\common.lib \
$(TOPDIR)\src\common\libpkcs11.lib \
$(TOPDIR)\src\common\libscdl.lib
all: $(TARGETS) $(TARGET2)
all: $(TARGETS)
$(TARGETS): $(OBJECTS) $(LIBS)
$(TARGET2): $(OBJECT2) $(LIBS)
opensc-notify.exe: opensc-notify-cmdline.obj versioninfo-opensc-notify.res $(LIBS)
cl $(COPTS) /c $*.c
link $(LINKFLAGS) /pdb:$*.pdb /out:$@ $*.obj opensc-notify-cmdline.obj versioninfo-opensc-notify.res $(LIBS) $(OPENPACE_LIB) $(OPENSSL_LIB) gdi32.lib shell32.lib User32.lib ws2_32.lib
mt -manifest exe.manifest -outputresource:$@;1
.c.exe:
cl $(COPTS) /c $<

View File

@ -0,0 +1,47 @@
#include <winresrc.h>
#define IDC_STATIC -1
/* defined twice: in ressource file and in source code */
#define IDI_SMARTCARD 102
#ifndef __MINGW32__
IDI_SMARTCARD ICON "..\\..\\win32\\DDORes.dll_14_2302.ico"
#else
IDI_SMARTCARD ICON "../../win32/DDORes.dll_14_2302.ico"
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
PRODUCTVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x21L
#else
FILEFLAGS 0x20L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "@OPENSC_VS_FF_COMMENTS@"
VALUE "CompanyName", "@OPENSC_VS_FF_COMPANY_NAME@"
VALUE "FileVersion", "@OPENSC_VERSION_MAJOR@.@OPENSC_VERSION_MINOR@.@OPENSC_VERSION_FIX@.@OPENSC_VERSION_REVISION@"
VALUE "InternalName", "@PACKAGE_NAME@"
VALUE "LegalCopyright", "@OPENSC_VS_FF_LEGAL_COPYRIGHT@"
VALUE "LegalTrademarks", ""
VALUE "PrivateBuild", ""
VALUE "ProductName", "@OPENSC_VS_FF_PRODUCT_NAME@"
VALUE "ProductVersion", "@OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@"
VALUE "SpecialBuild", ""
VALUE "FileDescription", "OpenSC Notify"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END

View File

@ -1,27 +1,5 @@
#include <winresrc.h>
#define IDC_STATIC -1
/* defined twice: in ressource file and in source code */
#define IDI_SMARTCARD 102
#define IDI_UNLOCKED 103
#define IDI_LOCKED 104
#define IDI_READER_EMPTY 105
#define IDI_CARD_INSERTED 106
#ifndef __MINGW32__
IDI_SMARTCARD ICON "..\\..\\win32\\DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "..\\..\\win32\\certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "..\\..\\win32\\certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "..\\..\\win32\\SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "..\\..\\win32\\SCardDlg.dll_14_143.ico"
#else
IDI_SMARTCARD ICON "../../win32/DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "../../win32/certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "../../win32/certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "../../win32/SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "../../win32/SCardDlg.dll_14_143.ico"
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
PRODUCTVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@

View File

@ -77,10 +77,6 @@ HINSTANCE sc_notify_instance = NULL;
HWND hwndNotification = NULL;
BOOL delete_icon = TRUE;
#define IDI_SMARTCARD 102
#define IDI_UNLOCKED 103
#define IDI_LOCKED 104
#define IDI_READER_EMPTY 105
#define IDI_CARD_INSERTED 106
UINT const WMAPP_NOTIFYCALLBACK = WM_APP + 1;
static BOOL RestoreTooltip();
@ -184,9 +180,10 @@ static BOOL RestoreTooltip()
}
static void notify_shell(struct sc_context *ctx,
const char *title, const char *text, WORD icon)
const char *title, const char *text, LPCTSTR icon_path, int icon_index)
{
NOTIFYICONDATA nid = {0};
HICON icon = NULL;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.uFlags = NIF_GUID;
@ -199,12 +196,19 @@ static void notify_shell(struct sc_context *ctx,
nid.uFlags |= NIF_INFO;
strlcpy(nid.szInfo, text, ARRAYSIZE(nid.szInfo));
}
if (icon) {
nid.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON;
LoadIconMetric(sc_notify_instance, MAKEINTRESOURCEW(icon), LIM_LARGE, &nid.hBalloonIcon);
if (icon_path) {
ExtractIconEx(icon_path, icon_index, &icon, NULL, 1);
if (icon) {
nid.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON;
nid.hBalloonIcon = icon;
}
}
Shell_NotifyIcon(NIM_MODIFY, &nid);
if (icon) {
DestroyIcon(icon);
}
}
void sc_notify_init(void)
@ -224,36 +228,40 @@ void sc_notify_close(void)
void sc_notify(const char *title, const char *text)
{
notify_shell(NULL, title, text, 0);
notify_shell(NULL, title, text, NULL, 0);
}
void sc_notify_id(struct sc_context *ctx, struct sc_atr *atr,
struct sc_pkcs15_card *p15card, enum ui_str id)
{
const char *title, *text;
WORD icon;
LPCTSTR icon_path = NULL;
int icon_index = 0;
title = ui_get_str(ctx, atr, p15card, id);
text = ui_get_str(ctx, atr, p15card, id+1);
switch (id) {
case NOTIFY_CARD_INSERTED:
icon = IDI_CARD_INSERTED;
icon_path = TEXT("%SYSTEMROOT%\\system32\\SCardDlg.dll");
icon_index = 3;
break;
case NOTIFY_CARD_REMOVED:
icon = IDI_READER_EMPTY;
icon_path = TEXT("%SYSTEMROOT%\\system32\\SCardDlg.dll");
icon_index = 2;
break;
case NOTIFY_PIN_GOOD:
icon = IDI_UNLOCKED;
icon_path = TEXT("%SYSTEMROOT%\\system32\\certmgr.dll");
icon_index = 16;
break;
case NOTIFY_PIN_BAD:
icon = IDI_LOCKED;
icon_path = TEXT("%SYSTEMROOT%\\system32\\certmgr.dll");
icon_index = 11;
break;
default:
icon = 0;
break;
}
notify_shell(ctx, title, text, icon);
notify_shell(ctx, title, text, icon_path, icon_index);
}
#elif defined(ENABLE_NOTIFY) && defined(__APPLE__)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,27 +1,5 @@
#include <winresrc.h>
#define IDC_STATIC -1
/* defined twice: in ressource file and in source code */
#define IDI_SMARTCARD 102
#define IDI_UNLOCKED 103
#define IDI_LOCKED 104
#define IDI_READER_EMPTY 105
#define IDI_CARD_INSERTED 106
#ifndef __MINGW32__
IDI_SMARTCARD ICON "..\\..\\win32\\DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "..\\..\\win32\\certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "..\\..\\win32\\certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "..\\..\\win32\\SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "..\\..\\win32\\SCardDlg.dll_14_143.ico"
#else
IDI_SMARTCARD ICON "../../win32/DDORes.dll_14_2302.ico"
IDI_UNLOCKED ICON "../../win32/certmgr.dll_14_6170.ico"
IDI_LOCKED ICON "../../win32/certmgr.dll_14_452.ico"
IDI_READER_EMPTY ICON "../../win32/SCardDlg.dll_14_142.ico"
IDI_CARD_INSERTED ICON "../../win32/SCardDlg.dll_14_143.ico"
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
PRODUCTVERSION @OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,@OPENSC_VERSION_REVISION@
@ -57,3 +35,4 @@ BEGIN
VALUE "Translation", 0x409, 1200
END
END