From 56deed391e48357b3a094f4c98c5473bdc40d8c9 Mon Sep 17 00:00:00 2001 From: Steven Robertson Date: Thu, 31 Mar 2011 00:14:20 +0100 Subject: [PATCH] Added check for running tomahawk.exe process and option to kill the process (or ignore) and proceed. --- admin/win/README.txt | 0 admin/win/nsi/RELEASE_NOTES.txt | 0 admin/win/nsi/installer.ico | Bin .../win/nsi/nsis_processes/bin/Processes.dll | Bin 0 -> 36352 bytes admin/win/nsi/nsis_processes/license.rtf | 35 ++ admin/win/nsi/nsis_processes/readme.txt | 122 ++++++ admin/win/nsi/nsis_processes/src/StdAfx.cpp | 8 + admin/win/nsi/nsis_processes/src/StdAfx.h | 34 ++ admin/win/nsi/nsis_processes/src/exdll.c | 37 ++ admin/win/nsi/nsis_processes/src/exdll.h | 136 ++++++ .../win/nsi/nsis_processes/src/processes.cpp | 411 ++++++++++++++++++ admin/win/nsi/nsis_processes/src/processes.h | 49 +++ .../win/nsi/nsis_processes/src/processes.ncb | Bin 0 -> 44032 bytes admin/win/nsi/nsis_processes/src/processes.rc | 103 +++++ .../win/nsi/nsis_processes/src/processes.sln | 21 + .../win/nsi/nsis_processes/src/processes.txt | 122 ++++++ .../nsi/nsis_processes/src/processes.vcproj | 222 ++++++++++ admin/win/nsi/nsis_processes/src/resource.h | 15 + admin/win/nsi/page_header.bmp | Bin admin/win/nsi/revision.txt | 2 +- admin/win/nsi/tomahawk.ini | 0 admin/win/nsi/tomahawk.nsi | 42 ++ admin/win/nsi/welcome.bmp | Bin admin/win/page_header.bmp | Bin 25818 -> 0 bytes admin/win/welcome.bmp | Bin 154542 -> 0 bytes 25 files changed, 1358 insertions(+), 1 deletion(-) delete mode 100755 admin/win/README.txt mode change 100755 => 100644 admin/win/nsi/RELEASE_NOTES.txt mode change 100755 => 100644 admin/win/nsi/installer.ico create mode 100755 admin/win/nsi/nsis_processes/bin/Processes.dll create mode 100755 admin/win/nsi/nsis_processes/license.rtf create mode 100755 admin/win/nsi/nsis_processes/readme.txt create mode 100755 admin/win/nsi/nsis_processes/src/StdAfx.cpp create mode 100755 admin/win/nsi/nsis_processes/src/StdAfx.h create mode 100755 admin/win/nsi/nsis_processes/src/exdll.c create mode 100755 admin/win/nsi/nsis_processes/src/exdll.h create mode 100755 admin/win/nsi/nsis_processes/src/processes.cpp create mode 100755 admin/win/nsi/nsis_processes/src/processes.h create mode 100755 admin/win/nsi/nsis_processes/src/processes.ncb create mode 100755 admin/win/nsi/nsis_processes/src/processes.rc create mode 100755 admin/win/nsi/nsis_processes/src/processes.sln create mode 100755 admin/win/nsi/nsis_processes/src/processes.txt create mode 100755 admin/win/nsi/nsis_processes/src/processes.vcproj create mode 100755 admin/win/nsi/nsis_processes/src/resource.h mode change 100755 => 100644 admin/win/nsi/page_header.bmp mode change 100644 => 100755 admin/win/nsi/revision.txt mode change 100755 => 100644 admin/win/nsi/tomahawk.ini mode change 100755 => 100644 admin/win/nsi/tomahawk.nsi mode change 100755 => 100644 admin/win/nsi/welcome.bmp delete mode 100755 admin/win/page_header.bmp delete mode 100755 admin/win/welcome.bmp diff --git a/admin/win/README.txt b/admin/win/README.txt deleted file mode 100755 index e69de29bb..000000000 diff --git a/admin/win/nsi/RELEASE_NOTES.txt b/admin/win/nsi/RELEASE_NOTES.txt old mode 100755 new mode 100644 diff --git a/admin/win/nsi/installer.ico b/admin/win/nsi/installer.ico old mode 100755 new mode 100644 diff --git a/admin/win/nsi/nsis_processes/bin/Processes.dll b/admin/win/nsi/nsis_processes/bin/Processes.dll new file mode 100755 index 0000000000000000000000000000000000000000..e532bf8bb55a5b7cadfe6d6e05058ae3f446739a GIT binary patch literal 36352 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≦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 literal 0 HcmV?d00001 diff --git a/admin/win/nsi/nsis_processes/license.rtf b/admin/win/nsi/nsis_processes/license.rtf new file mode 100755 index 000000000..2ce5a58c9 --- /dev/null +++ b/admin/win/nsi/nsis_processes/license.rtf @@ -0,0 +1,35 @@ +{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;} +{\f172\froman\fcharset238\fprq2 Times New Roman CE;}{\f173\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f175\froman\fcharset161\fprq2 Times New Roman Greek;}{\f176\froman\fcharset162\fprq2 Times New Roman Tur;} +{\f177\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f178\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f179\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f180\froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\f562\fswiss\fcharset238\fprq2 Verdana CE;}{\f563\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f565\fswiss\fcharset161\fprq2 Verdana Greek;}{\f566\fswiss\fcharset162\fprq2 Verdana Tur;}{\f569\fswiss\fcharset186\fprq2 Verdana Baltic;} +{\f570\fswiss\fcharset163\fprq2 Verdana (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255; +\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{ +\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\*\cs15 \additive \ul\cf2 \sbasedon10 \styrsid7485074 Hyperlink;}} +{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid6712196\rsid7485074\rsid11352300\rsid15940516}{\*\generator Microsoft Word 11.0.5604;}{\info{\title Processes v1}{\author Hardwired}{\operator Hardwired}{\creatim\yr2004\mo12\dy12\hr23\min42} +{\revtim\yr2004\mo12\dy12\hr23\min51}{\version2}{\edmins9}{\nofpages1}{\nofwords80}{\nofchars458}{\nofcharsws537}{\vern24689}}\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180 +\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot7485074\newtblstyruls\nogrowautofit \fet0\sectd \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}} +{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (} +{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain +\qj \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7485074 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f39\insrsid7485074\charrsid7485074 Processes v1.0}{\f39\insrsid7485074\charrsid7485074 .0.1 +\par }{\f39\fs20\insrsid7485074 +\par }\pard \qj \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15940516 {\f39\fs20\insrsid15940516 This software binaries and source-code are free for any kind of use, including commercial use. }{ +\f39\fs20\insrsid7485074\charrsid7485074 There is no restriction and no guaranty for using}{\f39\fs20\insrsid7485074\charrsid7485074 t}{\f39\fs20\insrsid7485074\charrsid7485074 his software}{\f39\fs20\insrsid7485074\charrsid7485074 and/or it +s source-code. }{\f39\fs20\insrsid15940516 +\par I}{\f39\fs20\insrsid7485074\charrsid7485074 f you use the plug}{\f39\fs20\insrsid7485074\charrsid7485074 -}{\f39\fs20\insrsid7485074\charrsid7485074 in }{\f39\fs20\insrsid7485074\charrsid7485074 and/}{\f39\fs20\insrsid7485074\charrsid7485074 or it}{ +\f39\fs20\insrsid7485074\charrsid7485074 s}{\f39\fs20\insrsid7485074\charrsid7485074 source-code, I would }{\f39\fs20\insrsid7485074\charrsid7485074 appreciate }{\f39\fs20\insrsid7485074\charrsid7485074 if my name is mentioned.}{ +\f39\fs20\insrsid7485074\charrsid7485074 +\par }\pard \qj \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7485074 {\f39\fs20\insrsid7485074\charrsid7485074 +\par }{\b\f39\fs20\insrsid7485074\charrsid7485074 Andrei Ciubotaru [Hardwired] +\par }{\f39\fs20\insrsid7485074\charrsid7485074 Lead Developer ICode&Ideas SRL (}{\field\flddirty{\*\fldinst {\f39\fs20\insrsid7485074\charrsid7485074 HYPERLINK "http://www.icode.ro/" }{\f39\fs20\insrsid7485074\charrsid7485074 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b02000000170000001500000068007400740070003a002f002f007700770077002e00690063006f00640065002e0072006f002f000000e0c9ea79f9bace118c8200aa004ba90b2a00000068007400740070003a002f002f007700770077002e00690063006f00640065002e007200 +6f002f000000}}}{\fldrslt {\cs15\f39\fs20\ul\cf2\insrsid7485074\charrsid7485074 http://www.icode.ro/}}}{\f39\fs20\insrsid7485074\charrsid7485074 ) +\par }{\field{\*\fldinst {\f39\fs20\insrsid7485074 HYPERLINK "hardwiredteks@gmail.com" }{\f39\fs20\insrsid15940516\charrsid7485074 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b02000000010000000303000000000000c00000000000004600001800000068617264776972656474656b7340676d61696c2e636f6d00ffffadde000000000000000000000000000000000000000000000000}}}{\fldrslt { +\cs15\f39\fs20\ul\cf2\insrsid7485074\charrsid7485074 hardwiredteks@gmail.com}}}{\f39\fs20\insrsid7485074\charrsid7485074 , }{\field{\*\fldinst {\f39\fs20\insrsid7485074 HYPERLINK "hardwired@icode.ro" }{\f39\fs20\insrsid15940516\charrsid7485074 +{\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b02000000010000000303000000000000c0000000000000460000130000006861726477697265644069636f64652e726f00ffffadde000000000000000000000000000000000000000000000000}}}{\fldrslt { +\cs15\f39\fs20\ul\cf2\insrsid7485074\charrsid7485074 hardwired@icode.ro}}}{\f39\fs20\insrsid7485074\charrsid7485074 +\par }} \ No newline at end of file diff --git a/admin/win/nsi/nsis_processes/readme.txt b/admin/win/nsi/nsis_processes/readme.txt new file mode 100755 index 000000000..8529c39ad --- /dev/null +++ b/admin/win/nsi/nsis_processes/readme.txt @@ -0,0 +1,122 @@ +---------------------------------------------------------------- +---------------------------------------------------------------- +Processes (Processes.dll) +Version: 1.0.1.0 +Release: 24.february.2005 +Description: Nullsoft Installer (NSIS) plug-in for managing?! + Windows processes. + +Copyright: © 2004-2005 Hardwired. No rights reserved. + There is no restriction and no guaranty for using + this software. + +Author: Andrei Ciubotaru [Hardwired] + Lead Developer ICode&Ideas SRL (http://www.icode.ro/) + hardwiredteks@gmail.com, hardwired@icode.ro + +---------------------------------------------------------------- +---------------------------------------------------------------- +INTRODUCTION + + The Need For Plug-in - I need it for the one of my installers. + + Briefly: Use it when you need to find\kill a process when +installing\uninstalling some application. Also, use it when you +need to test the presence of a device driver. + + +SUPPORT + + Supported platforms are: WinNT,Win2K,WinXP and Win2003 Server. + + +DESCRIPTION + + Processes::FindProcess ;without ".exe" + + Searches the currently running processes for the given + process name. + + return: 1 - the process was found + 0 - the process was not found + + Processes::KillProcess ; without ".exe" + + Searches the currently running processes for the given + process name. If the process is found then the it gets + killed. + + return: 1 - the process was found and killed + 0 - the process was not found or the process + cannot be killed (insuficient rights) + + Processes::FindDevice + + Searches the installed devices drivers for the given + device base name. + (important: I said BASE NAME not FILENAME) + + return: 1 - the device driver was found + 0 - the device driver was not found + + +USAGE + + First of all, does not matter where you use it. Ofcourse, the +routines must be called inside of a Section/Function scope. + + Processes::FindProcess "process_name" + Pop $R0 + + StrCmp $R0 "1" make_my_day noooooo + + make_my_day: + ... + + noooooo: + ... + + + Processes::KillProcess "process_name" + Pop $R0 + + StrCmp $R0 "1" dead_meat why_wont_you_die + + dead_meat: + ... + + why_wont_you_die: + ... + + + Processes::FindDevice "device_base_name" + Pop $R0 + + StrCmp $R0 "1" blabla more_blabla + + blabla: + ... + + more_blabla: + ... + + +THANKS + + Sunil Kamath for inspiring me. I wanted to use its FindProcDLL +but my requirements made it imposible. + + Nullsoft for creating this very powerfull installer. One big, +free and full-featured (hmmm... and guiless for the moment) mean +install machine!:) + + ME for being such a great coder... + ... HAHAHAHAHAHAHA! + +ONE MORE THING + + If you use the plugin or it's source-code, I would apreciate +if my name is mentioned. + +---------------------------------------------------------------- +---------------------------------------------------------------- diff --git a/admin/win/nsi/nsis_processes/src/StdAfx.cpp b/admin/win/nsi/nsis_processes/src/StdAfx.cpp new file mode 100755 index 000000000..f38accc8a --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/StdAfx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// KillProcDLL.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/admin/win/nsi/nsis_processes/src/StdAfx.h b/admin/win/nsi/nsis_processes/src/StdAfx.h new file mode 100755 index 000000000..dd49f99b9 --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/StdAfx.h @@ -0,0 +1,34 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#if !defined(AFX_STDAFX_H__780690DC_E128_403D_BC07_780D1B2CC101__INCLUDED_) +#define AFX_STDAFX_H__780690DC_E128_403D_BC07_780D1B2CC101__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +#include + +#include // String management... + +//From exam28.cpp +#include +//#include + +#ifdef BORLANDC + #include + #include +#endif + +//To make it a NSIS Plug-In +#include "exdll.h" + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_STDAFX_H__780690DC_E128_403D_BC07_780D1B2CC101__INCLUDED_) diff --git a/admin/win/nsi/nsis_processes/src/exdll.c b/admin/win/nsi/nsis_processes/src/exdll.c new file mode 100755 index 000000000..7092cb840 --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/exdll.c @@ -0,0 +1,37 @@ +#include +#include "exdll.h" + +HINSTANCE g_hInstance; + +HWND g_hwndParent; + +void __declspec(dllexport) myFunction(HWND hwndParent, int string_size, + char *variables, stack_t **stacktop) +{ + g_hwndParent=hwndParent; + + EXDLL_INIT(); + + + // note if you want parameters from the stack, pop them off in order. + // i.e. if you are called via exdll::myFunction file.dat poop.dat + // calling popstring() the first time would give you file.dat, + // and the second time would give you poop.dat. + // you should empty the stack of your parameters, and ONLY your + // parameters. + + // do your stuff here + { + char buf[1024]; + wsprintf(buf,"$0=%s\n",getuservariable(INST_0)); + MessageBox(g_hwndParent,buf,0,MB_OK); + } +} + + + +BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) +{ + g_hInstance=hInst; + return TRUE; +} diff --git a/admin/win/nsi/nsis_processes/src/exdll.h b/admin/win/nsi/nsis_processes/src/exdll.h new file mode 100755 index 000000000..777d93be5 --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/exdll.h @@ -0,0 +1,136 @@ +#ifndef _EXDLL_H_ +#define _EXDLL_H_ + + + + + +// +// only include this file from one place in your DLL. +// (it is all static, if you use it in two places it will fail) +// +#define EXDLL_INIT() { \ + g_stringsize = string_size; \ + g_stacktop = stacktop; \ + g_variables = variables; } + + + + +// +// For page showing plug-ins +// +#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8) +#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd) +#define NOTIFY_BYE_BYE 'x' + +typedef struct _stack_t +{ + struct _stack_t *next; + char text[1]; // this should be the length of string_size +} stack_t; + + +static unsigned int g_stringsize; +static stack_t **g_stacktop; +static char *g_variables; + +enum +{ +INST_0, // $0 +INST_1, // $1 +INST_2, // $2 +INST_3, // $3 +INST_4, // $4 +INST_5, // $5 +INST_6, // $6 +INST_7, // $7 +INST_8, // $8 +INST_9, // $9 +INST_R0, // $R0 +INST_R1, // $R1 +INST_R2, // $R2 +INST_R3, // $R3 +INST_R4, // $R4 +INST_R5, // $R5 +INST_R6, // $R6 +INST_R7, // $R7 +INST_R8, // $R8 +INST_R9, // $R9 +INST_CMDLINE, // $CMDLINE +INST_INSTDIR, // $INSTDIR +INST_OUTDIR, // $OUTDIR +INST_EXEDIR, // $EXEDIR +INST_LANG, // $LANGUAGE +__INST_LAST +}; + + + + + +// +// utility functions (not required but often useful) +// +static int popstring( char *str ) +{ + stack_t *th; + + + if( !g_stacktop || + !*g_stacktop ) + return 1; + + th = (*g_stacktop); + lstrcpy( str, th->text ); + *g_stacktop = th->next; + GlobalFree( (HGLOBAL)th ); + + return 0; +} + + + + +static void pushstring( char *str ) +{ + stack_t *th; + + + if( !g_stacktop ) + return; + + th = (stack_t*)GlobalAlloc( GPTR, sizeof(stack_t) + g_stringsize ); + lstrcpyn( th->text, str, g_stringsize ); + th->next = *g_stacktop; + *g_stacktop = th; +} + + + + + +static char *getuservariable( int varnum ) +{ + if( varnum < 0 || + varnum >= __INST_LAST ) + return NULL; + + return (g_variables + varnum*g_stringsize); +} + + + + + +static void setuservariable( int varnum, char *var ) +{ + if( var != NULL && + varnum >= 0 && + varnum < __INST_LAST ) + lstrcpy( g_variables + varnum*g_stringsize, var ); +} + + + +#endif//_EXDLL_H_ \ No newline at end of file diff --git a/admin/win/nsi/nsis_processes/src/processes.cpp b/admin/win/nsi/nsis_processes/src/processes.cpp new file mode 100755 index 000000000..c15f8f94a --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/processes.cpp @@ -0,0 +1,411 @@ +#include "stdafx.h" +#include "processes.h" +#include "string.h" + + + + + + +//------------------------------------------------------------------------------------------- +// global variables +lpfEnumProcesses EnumProcesses; +lpfEnumProcessModules EnumProcessModules; +lpfGetModuleBaseName GetModuleBaseName; +lpfEnumDeviceDrivers EnumDeviceDrivers; +lpfGetDeviceDriverBaseName GetDeviceDriverBaseName; + +HINSTANCE g_hInstance; +HWND g_hwndParent; +HINSTANCE g_hInstLib; + + + + + +//------------------------------------------------------------------------------------------- +// main DLL entry +BOOL WINAPI _DllMainCRTStartup( HANDLE hInst, + ULONG ul_reason_for_call, + LPVOID lpReserved ) +{ + g_hInstance = (struct HINSTANCE__ *)hInst; + + return TRUE; +} + + + + + +//------------------------------------------------------------------------------------------- +// loads the psapi routines +bool LoadPSAPIRoutines( void ) +{ + if( NULL == (g_hInstLib = LoadLibraryA( "PSAPI.DLL" )) ) + return false; + + EnumProcesses = (lpfEnumProcesses) GetProcAddress( g_hInstLib, "EnumProcesses" ); + EnumProcessModules = (lpfEnumProcessModules) GetProcAddress( g_hInstLib, "EnumProcessModules" ); + GetModuleBaseName = (lpfGetModuleBaseName) GetProcAddress( g_hInstLib, "GetModuleBaseNameA" ); + EnumDeviceDrivers = (lpfEnumDeviceDrivers) GetProcAddress( g_hInstLib, "EnumDeviceDrivers" ); + GetDeviceDriverBaseName = (lpfGetDeviceDriverBaseName) GetProcAddress( g_hInstLib, "GetDeviceDriverBaseNameA" ); + + if( ( NULL == EnumProcesses ) || + ( NULL == EnumProcessModules ) || + ( NULL == EnumDeviceDrivers ) || + ( NULL == GetModuleBaseName ) || + ( NULL == GetDeviceDriverBaseName ) ) + { + FreeLibrary( g_hInstLib ); + + return false; + } + + return true; +} + + + + + +//------------------------------------------------------------------------------------------- +// free the psapi routines +bool FreePSAPIRoutines( void ) +{ + EnumProcesses = NULL; + EnumProcessModules = NULL; + GetModuleBaseName = NULL; + EnumDeviceDrivers = NULL; + + if( FALSE == FreeLibrary( g_hInstLib ) ) + return false; + + return true; +} + + + + + +//------------------------------------------------------------------------------------------- +// find a process by name +// return value: true - process was found +// false - process not found +bool FindProc( char *szProcess ) +{ + char szProcessName[ 1024 ]; + char szCurrentProcessName[ 1024 ]; + DWORD dPID[ 1024 ]; + DWORD dPIDSize( 1024 ); + DWORD dSize( 1024 ); + HANDLE hProcess; + HMODULE phModule[ 1024 ]; + + + // + // make the name lower case + // + memset( szProcessName, 0, 1024*sizeof(char) ); + sprintf( szProcessName, "%s", szProcess ); + strlwr( szProcessName ); + + // + // load PSAPI routines + // + if( false == LoadPSAPIRoutines() ) + return false; + + // + // enumerate processes names + // + if( FALSE == EnumProcesses( dPID, dSize, &dPIDSize ) ) + { + FreePSAPIRoutines(); + + return false; + } + + // + // walk trough and compare see if the process is running + // + for( int k( dPIDSize / sizeof( DWORD ) ); k >= 0; k-- ) + { + memset( szCurrentProcessName, 0, 1024*sizeof(char) ); + + if( NULL != ( hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dPID[ k ] ) ) ) + { + if( TRUE == EnumProcessModules( hProcess, phModule, sizeof(HMODULE)*1024, &dPIDSize ) ) + if( GetModuleBaseName( hProcess, phModule[ 0 ], szCurrentProcessName, 1024 ) > 0 ) + { + strlwr( szCurrentProcessName ); + + if( NULL != strstr( szCurrentProcessName, szProcessName ) ) + { + FreePSAPIRoutines(); + CloseHandle( hProcess ); + + return true; + } + } + + CloseHandle( hProcess ); + } + } + + // + // free PSAPI routines + // + FreePSAPIRoutines(); + + return false; +} + + + + + +//------------------------------------------------------------------------------------------- +// kills a process by name +// return value: true - process was found +// false - process not found +bool KillProc( char *szProcess ) +{ + char szProcessName[ 1024 ]; + char szCurrentProcessName[ 1024 ]; + DWORD dPID[ 1024 ]; + DWORD dPIDSize( 1024 ); + DWORD dSize( 1024 ); + HANDLE hProcess; + HMODULE phModule[ 1024 ]; + + + // + // make the name lower case + // + memset( szProcessName, 0, 1024*sizeof(char) ); + sprintf( szProcessName, "%s", szProcess ); + strlwr( szProcessName ); + + // + // load PSAPI routines + // + if( false == LoadPSAPIRoutines() ) + return false; + + // + // enumerate processes names + // + if( FALSE == EnumProcesses( dPID, dSize, &dPIDSize ) ) + { + FreePSAPIRoutines(); + + return false; + } + + // + // walk trough and compare see if the process is running + // + for( int k( dPIDSize / sizeof( DWORD ) ); k >= 0; k-- ) + { + memset( szCurrentProcessName, 0, 1024*sizeof(char) ); + + if( NULL != ( hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dPID[ k ] ) ) ) + { + if( TRUE == EnumProcessModules( hProcess, phModule, sizeof(HMODULE)*1024, &dPIDSize ) ) + if( GetModuleBaseName( hProcess, phModule[ 0 ], szCurrentProcessName, 1024 ) > 0 ) + { + strlwr( szCurrentProcessName ); + + if( NULL != strstr( szCurrentProcessName, szProcessName ) ) + { + FreePSAPIRoutines(); + + // + // kill process + // + if( false == TerminateProcess( hProcess, 0 ) ) + { + CloseHandle( hProcess ); + + return true; + } + + // + // refresh systray + // + UpdateWindow( FindWindow( NULL, "Shell_TrayWnd" ) ); + + // + // refresh desktop window + // + UpdateWindow( GetDesktopWindow() ); + + CloseHandle( hProcess ); + + return true; + } + } + + CloseHandle( hProcess ); + } + } + + // + // free PSAPI routines + // + FreePSAPIRoutines(); + + return false; +} + + + + + +//------------------------------------------------------------------------------------------- +bool FindDev( char *szDriverName ) +{ + char szDeviceName[ 1024 ]; + char szCurrentDeviceName[ 1024 ]; + LPVOID lpDevices[ 1024 ]; + DWORD dDevicesSize( 1024 ); + DWORD dSize( 1024 ); + TCHAR tszCurrentDeviceName[ 1024 ]; + DWORD dNameSize( 1024 ); + + + // + // make the name lower case + // + memset( szDeviceName, 0, 1024*sizeof(char) ); + sprintf( szDeviceName, "%s", strlwr( szDriverName ) ); + + // + // load PSAPI routines + // + if( false == LoadPSAPIRoutines() ) + return false; + + // + // enumerate devices + // + if( FALSE == EnumDeviceDrivers( lpDevices, dSize, &dDevicesSize ) ) + { + FreePSAPIRoutines(); + + return false; + } + + // + // walk trough and compare see if the device driver exists + // + for( int k( dDevicesSize / sizeof( LPVOID ) ); k >= 0; k-- ) + { + memset( szCurrentDeviceName, 0, 1024*sizeof(char) ); + memset( tszCurrentDeviceName, 0, 1024*sizeof(TCHAR) ); + + if( 0 != GetDeviceDriverBaseName( lpDevices[ k ], tszCurrentDeviceName, dNameSize ) ) + { + sprintf( szCurrentDeviceName, "%S", tszCurrentDeviceName ); + + if( 0 == strcmp( strlwr( szCurrentDeviceName ), szDeviceName ) ) + { + FreePSAPIRoutines(); + + return true; + } + } + } + + // + // free PSAPI routines + // + FreePSAPIRoutines(); + + return false; +} + + + + + +//------------------------------------------------------------------------------------------- +extern "C" __declspec(dllexport) void FindProcess( HWND hwndParent, + int string_size, + char *variables, + stack_t **stacktop ) +{ + char szParameter[ 1024 ]; + + + g_hwndParent = hwndParent; + + EXDLL_INIT(); + { + popstring( szParameter ); + + if( true == FindProc( szParameter ) ) + wsprintf( szParameter, "1" ); + else + wsprintf( szParameter, "0" ); + + setuservariable( INST_R0, szParameter ); + } +} + + + + + +//------------------------------------------------------------------------------------------- +extern "C" __declspec(dllexport) void KillProcess( HWND hwndParent, + int string_size, + char *variables, + stack_t **stacktop ) +{ + char szParameter[ 1024 ]; + + + g_hwndParent = hwndParent; + + EXDLL_INIT(); + { + popstring( szParameter ); + + if( true == KillProc( szParameter ) ) + wsprintf( szParameter, "1" ); + else + wsprintf( szParameter, "0" ); + + setuservariable( INST_R0, szParameter ); + } +} + + + + + +//------------------------------------------------------------------------------------------- +extern "C" __declspec(dllexport) void FindDevice( HWND hwndParent, + int string_size, + char *variables, + stack_t **stacktop ) +{ + char szParameter[ 1024 ]; + + + g_hwndParent = hwndParent; + + EXDLL_INIT(); + { + popstring( szParameter ); + + if( true == FindDev( szParameter ) ) + wsprintf( szParameter, "1" ); + else + wsprintf( szParameter, "0" ); + + setuservariable( INST_R0, szParameter ); + } +} diff --git a/admin/win/nsi/nsis_processes/src/processes.h b/admin/win/nsi/nsis_processes/src/processes.h new file mode 100755 index 000000000..9bd069101 --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/processes.h @@ -0,0 +1,49 @@ +#pragma once + + + + + +//------------------------------------------------------------------------------------------- +// PSAPI function pointers +typedef BOOL (WINAPI *lpfEnumProcesses) ( DWORD *, DWORD, DWORD * ); +typedef BOOL (WINAPI *lpfEnumProcessModules) ( HANDLE, HMODULE *, DWORD, LPDWORD ); +typedef DWORD (WINAPI *lpfGetModuleBaseName) ( HANDLE, HMODULE, LPTSTR, DWORD ); +typedef BOOL (WINAPI *lpfEnumDeviceDrivers) ( LPVOID *, DWORD, LPDWORD ); +typedef BOOL (WINAPI *lpfGetDeviceDriverBaseName)( LPVOID, LPTSTR, DWORD ); + + + + + + +//------------------------------------------------------------------------------------------- +// Internal use routines +bool LoadPSAPIRoutines( void ); +bool FreePSAPIRoutines( void ); + +bool FindProc( char *szProcess ); +bool KillProc( char *szProcess ); + +bool FindDev( char *szDriverName ); + + + + + +//------------------------------------------------------------------------------------------- +// Exported routines +extern "C" __declspec(dllexport) void FindProcess( HWND hwndParent, + int string_size, + char *variables, + stack_t **stacktop ); + +extern "C" __declspec(dllexport) void KillProcess( HWND hwndParent, + int string_size, + char *variables, + stack_t **stacktop ); + +extern "C" __declspec(dllexport) void FindDevice( HWND hwndParent, + int string_size, + char *variables, + stack_t **stacktop ); diff --git a/admin/win/nsi/nsis_processes/src/processes.ncb b/admin/win/nsi/nsis_processes/src/processes.ncb new file mode 100755 index 0000000000000000000000000000000000000000..c1a5f281fe57fcc5570c40953586a2799befc159 GIT binary patch literal 44032 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 literal 0 HcmV?d00001 diff --git a/admin/win/nsi/nsis_processes/src/processes.rc b/admin/win/nsi/nsis_processes/src/processes.rc new file mode 100755 index 000000000..c6e62a3c8 --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/processes.rc @@ -0,0 +1,103 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "NSIS Plug-in for Windows process management. Only WinNT, Win2K, WinXP and Win2003 Server supported." + VALUE "CompanyName", "Andrei Ciubotaru [Hardwired]" + VALUE "FileDescription", "Windows Processes Management" + VALUE "FileVersion", "1, 0, 0, 1" + VALUE "InternalName", "Processes" + VALUE "LegalCopyright", "Copyright (c) 2004 Hardwired. No rights reserved." + VALUE "OriginalFilename", "Processes.dll" + VALUE "ProductName", "Processes" + VALUE "ProductVersion", "1, 0, 0, 1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/admin/win/nsi/nsis_processes/src/processes.sln b/admin/win/nsi/nsis_processes/src/processes.sln new file mode 100755 index 000000000..73fc989e2 --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/processes.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "processes", "processes.vcproj", "{3438467F-A719-46DC-93E5-137A8B691727}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {3438467F-A719-46DC-93E5-137A8B691727}.Debug.ActiveCfg = Debug|Win32 + {3438467F-A719-46DC-93E5-137A8B691727}.Debug.Build.0 = Debug|Win32 + {3438467F-A719-46DC-93E5-137A8B691727}.Release.ActiveCfg = Release|Win32 + {3438467F-A719-46DC-93E5-137A8B691727}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/admin/win/nsi/nsis_processes/src/processes.txt b/admin/win/nsi/nsis_processes/src/processes.txt new file mode 100755 index 000000000..51d11902a --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/processes.txt @@ -0,0 +1,122 @@ +---------------------------------------------------------------- +---------------------------------------------------------------- +Processes (Processes.dll) +Version: 1.0.0.1 +Release: 12.december.2004 +Description:Nullsoft Installer (NSIS) plug-in for managing?! + Windows processes. + +Copyright: © 2004 Hardwired. No rights reserved. + There is no restriction and no guaranty for using + this software. + +Author: Andrei Ciubotaru [Hardwired] + Lead Developer ICode&Ideas SRL (http://www.icode.ro) + hardwiredteks@gmail.com, hardwired@icode.ro + +---------------------------------------------------------------- +---------------------------------------------------------------- +INTRODUCTION + + The Need For Plug-in - I need it for the one of my installers. + + Briefly: Use it when you need to find\kill a process when +installing\uninstalling some application. Also, use it when you +need to test the presence of a device driver. + + +SUPPORT + + Supported platforms are: WinNT,Win2K,WinXP and Win2003 Server. + + +DESCRIPTION + + Processes::FindProcess + + Searches the currently running processes for the given + process name. + + return: 1 - the process was found + 0 - the process was not found + + Processes::KillProcess + + Searches the currently running processes for the given + process name. If the process is found then the it gets + killed. + + return: 1 - the process was found and killed + 0 - the process was not found or the process + cannot be killed (insuficient rights) + + Processes::FindDevice + + Searches the installed devices drivers for the given + device base name. + (important: I said BASE NAME not FILENAME) + + return: 1 - the device driver was found + 0 - the device driver was not found + + +USAGE + + First of all, does not matter where you use it. Ofcourse, the +routines must be called inside of a Section/Function scope. + + Processes::FindProcess "process_name.exe" + Pop $R0 + + StrCmp $R0 "1" make_my_day noooooo + + make_my_day: + ... + + noooooo: + ... + + + Processes::KillProcess "process_name.exe" + Pop $R0 + + StrCmp $R0 "1" dead_meat why_wont_you_die + + dead_meat: + ... + + why_wont_you_die: + ... + + + Processes::FindDevice "device_base_name" + Pop $R0 + + StrCmp $R0 "1" blabla more_blabla + + blabla: + ... + + more_blabla: + ... + + +THANKS + + Sunil Kamath for inspiring me. I wanted to use its FindProcDLL +but my requirements made it imposible. + + Nullsoft for creating this very powerfull installer. One big, +free and full-featured (hmmm... and guiless for the moment) mean +install machine!:) + + ME for being such a great coder... + ... HAHAHAHAHAHAHA! + +ONE MORE THING + + If you use the plugin or it's source-code, I would apreciate +if my name is mentioned. + +---------------------------------------------------------------- +---------------------------------------------------------------- diff --git a/admin/win/nsi/nsis_processes/src/processes.vcproj b/admin/win/nsi/nsis_processes/src/processes.vcproj new file mode 100755 index 000000000..245cbc99f --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/processes.vcproj @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/win/nsi/nsis_processes/src/resource.h b/admin/win/nsi/nsis_processes/src/resource.h new file mode 100755 index 000000000..506377e21 --- /dev/null +++ b/admin/win/nsi/nsis_processes/src/resource.h @@ -0,0 +1,15 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by processes.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/admin/win/nsi/page_header.bmp b/admin/win/nsi/page_header.bmp old mode 100755 new mode 100644 diff --git a/admin/win/nsi/revision.txt b/admin/win/nsi/revision.txt old mode 100644 new mode 100755 index 56749c830..c4fbb1cfa --- a/admin/win/nsi/revision.txt +++ b/admin/win/nsi/revision.txt @@ -1 +1 @@ -96 \ No newline at end of file +97 \ No newline at end of file diff --git a/admin/win/nsi/tomahawk.ini b/admin/win/nsi/tomahawk.ini old mode 100755 new mode 100644 diff --git a/admin/win/nsi/tomahawk.nsi b/admin/win/nsi/tomahawk.nsi old mode 100755 new mode 100644 index f6e49cfd3..c2d2a9bd1 --- a/admin/win/nsi/tomahawk.nsi +++ b/admin/win/nsi/tomahawk.nsi @@ -159,6 +159,45 @@ Function LaunchTomahawkAsUser FunctionEnd !endif +############################################################################## +# # +# PROCESS HANDLING FUNCTIONS AND MACROS # +# # +############################################################################## + +!macro CheckForProcess processName gotoWhenFound gotoWhenNotFound + Processes::FindProcess ${processName} + StrCmp $R0 "0" ${gotoWhenNotFound} ${gotoWhenFound} +!macroend + +!macro ConfirmEndProcess processName + MessageBox MB_YESNO|MB_ICONEXCLAMATION \ + "Found ${processName} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?" \ + IDYES process_${processName}_kill IDNO process_${processName}_ended + process_${processName}_kill: + DetailPrint "Killing ${processName} processes." + Processes::KillProcess ${processName} + Sleep 1500 + StrCmp $R0 "1" process_${processName}_ended + DetailPrint "Process to kill not found!" + process_${processName}_ended: +!macroend + +!macro CheckAndConfirmEndProcess processName + !insertmacro CheckForProcess ${processName} 0 no_process_${processName}_to_end + !insertmacro ConfirmEndProcess ${processName} + no_process_${processName}_to_end: +!macroend + +!macro EnsureTomahawkShutdown un + Function ${un}EnsureTomahawkShutdown + !insertmacro CheckAndConfirmEndProcess "tomahawk.exe" + FunctionEnd +!macroend + +!insertmacro EnsureTomahawkShutdown "" +!insertmacro EnsureTomahawkShutdown "un." + ############################################################################## # # # RE-INSTALLER FUNCTIONS # @@ -561,6 +600,9 @@ Function .onInit StrCmp $R0 "" SkipSetInstDir StrCpy $INSTDIR $R0 SkipSetInstDir: + + ;Shutdown Tomahawk in case Add/Remove re-installer option used. + Call EnsureTomahawkShutdown FunctionEnd Function .onInstSuccess diff --git a/admin/win/nsi/welcome.bmp b/admin/win/nsi/welcome.bmp old mode 100755 new mode 100644 diff --git a/admin/win/page_header.bmp b/admin/win/page_header.bmp deleted file mode 100755 index c50025a22b810a7e755768c16e73ce7f1ec97ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25818 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 KfYm_fH1L1OIOjJ2 diff --git a/admin/win/welcome.bmp b/admin/win/welcome.bmp deleted file mode 100755 index 580504f50354f345e789f921266ebcdd518037ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154542 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