Commit eda4e86bdeb5eef1bc4a5200dd4d19d47cbe6d3c
1 parent
f40c7147
Exists in
master
Exclusão para posterior reposição com versão 2.6-Beta-2
git-svn-id: http://svn.softwarepublico.gov.br/svn/cacic/cacic/trunk/agente-windows@956 fecfc0c7-e812-0410-ae72-849f08638ee7
Showing
9 changed files
with
0 additions
and
677 deletions
Show diff stats
cacicservice/CACICsvc.cfg
| ... | ... | @@ -1,36 +0,0 @@ |
| 1 | --$A8 | |
| 2 | --$B- | |
| 3 | --$C+ | |
| 4 | --$D+ | |
| 5 | --$E- | |
| 6 | --$F- | |
| 7 | --$G+ | |
| 8 | --$H+ | |
| 9 | --$I+ | |
| 10 | --$J+ | |
| 11 | --$K- | |
| 12 | --$L+ | |
| 13 | --$M- | |
| 14 | --$N+ | |
| 15 | --$O+ | |
| 16 | --$P+ | |
| 17 | --$Q- | |
| 18 | --$R- | |
| 19 | --$S- | |
| 20 | --$T- | |
| 21 | --$U- | |
| 22 | --$V+ | |
| 23 | --$W- | |
| 24 | --$X+ | |
| 25 | --$YD | |
| 26 | --$Z1 | |
| 27 | --cg | |
| 28 | --AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; | |
| 29 | --H+ | |
| 30 | --W+ | |
| 31 | --M | |
| 32 | --$M16384,1048576 | |
| 33 | --K$00400000 | |
| 34 | --E"..\" | |
| 35 | --LE"c:\program files (x86)\borland\delphi7\Projects\Bpl" | |
| 36 | --LN"c:\program files (x86)\borland\delphi7\Projects\Bpl" |
cacicservice/CACICsvc.dof
| ... | ... | @@ -1,142 +0,0 @@ |
| 1 | -[FileVersion] | |
| 2 | -Version=7.0 | |
| 3 | -[Compiler] | |
| 4 | -A=8 | |
| 5 | -B=0 | |
| 6 | -C=1 | |
| 7 | -D=1 | |
| 8 | -E=0 | |
| 9 | -F=0 | |
| 10 | -G=1 | |
| 11 | -H=1 | |
| 12 | -I=1 | |
| 13 | -J=1 | |
| 14 | -K=0 | |
| 15 | -L=1 | |
| 16 | -M=0 | |
| 17 | -N=1 | |
| 18 | -O=1 | |
| 19 | -P=1 | |
| 20 | -Q=0 | |
| 21 | -R=0 | |
| 22 | -S=0 | |
| 23 | -T=0 | |
| 24 | -U=0 | |
| 25 | -V=1 | |
| 26 | -W=0 | |
| 27 | -X=1 | |
| 28 | -Y=1 | |
| 29 | -Z=1 | |
| 30 | -ShowHints=1 | |
| 31 | -ShowWarnings=1 | |
| 32 | -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; | |
| 33 | -NamespacePrefix= | |
| 34 | -SymbolDeprecated=1 | |
| 35 | -SymbolLibrary=1 | |
| 36 | -SymbolPlatform=1 | |
| 37 | -UnitLibrary=1 | |
| 38 | -UnitPlatform=1 | |
| 39 | -UnitDeprecated=1 | |
| 40 | -HResultCompat=1 | |
| 41 | -HidingMember=1 | |
| 42 | -HiddenVirtual=1 | |
| 43 | -Garbage=1 | |
| 44 | -BoundsError=1 | |
| 45 | -ZeroNilCompat=1 | |
| 46 | -StringConstTruncated=1 | |
| 47 | -ForLoopVarVarPar=1 | |
| 48 | -TypedConstVarPar=1 | |
| 49 | -AsgToTypedConst=1 | |
| 50 | -CaseLabelRange=1 | |
| 51 | -ForVariable=1 | |
| 52 | -ConstructingAbstract=1 | |
| 53 | -ComparisonFalse=1 | |
| 54 | -ComparisonTrue=1 | |
| 55 | -ComparingSignedUnsigned=1 | |
| 56 | -CombiningSignedUnsigned=1 | |
| 57 | -UnsupportedConstruct=1 | |
| 58 | -FileOpen=1 | |
| 59 | -FileOpenUnitSrc=1 | |
| 60 | -BadGlobalSymbol=1 | |
| 61 | -DuplicateConstructorDestructor=1 | |
| 62 | -InvalidDirective=1 | |
| 63 | -PackageNoLink=1 | |
| 64 | -PackageThreadVar=1 | |
| 65 | -ImplicitImport=1 | |
| 66 | -HPPEMITIgnored=1 | |
| 67 | -NoRetVal=1 | |
| 68 | -UseBeforeDef=1 | |
| 69 | -ForLoopVarUndef=1 | |
| 70 | -UnitNameMismatch=1 | |
| 71 | -NoCFGFileFound=1 | |
| 72 | -MessageDirective=1 | |
| 73 | -ImplicitVariants=1 | |
| 74 | -UnicodeToLocale=1 | |
| 75 | -LocaleToUnicode=1 | |
| 76 | -ImagebaseMultiple=1 | |
| 77 | -SuspiciousTypecast=1 | |
| 78 | -PrivatePropAccessor=1 | |
| 79 | -UnsafeType=1 | |
| 80 | -UnsafeCode=1 | |
| 81 | -UnsafeCast=1 | |
| 82 | -[Linker] | |
| 83 | -MapFile=0 | |
| 84 | -OutputObjs=0 | |
| 85 | -ConsoleApp=1 | |
| 86 | -DebugInfo=0 | |
| 87 | -RemoteSymbols=0 | |
| 88 | -MinStackSize=16384 | |
| 89 | -MaxStackSize=1048576 | |
| 90 | -ImageBase=4194304 | |
| 91 | -ExeDescription= | |
| 92 | -[Directories] | |
| 93 | -OutputDir=..\ | |
| 94 | -UnitOutputDir= | |
| 95 | -PackageDLLOutputDir= | |
| 96 | -PackageDCPOutputDir= | |
| 97 | -SearchPath= | |
| 98 | -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;MSICS_D7_Rtl;PJVersion;FileSecurity;Jcl;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvDBD7R;JvDlgsD7R;JvBDED7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDockingD7R;JvDotNetCtrlsD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvNetD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvTimeFrameworkD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R | |
| 99 | -Conditionals= | |
| 100 | -DebugSourceDirs= | |
| 101 | -UsePackages=0 | |
| 102 | -[Parameters] | |
| 103 | -RunParams= | |
| 104 | -HostApplication= | |
| 105 | -Launcher= | |
| 106 | -UseLauncher=0 | |
| 107 | -DebugCWD= | |
| 108 | -[Language] | |
| 109 | -ActiveLang= | |
| 110 | -ProjectLang= | |
| 111 | -RootDir=E:\NTService\ | |
| 112 | -[Version Info] | |
| 113 | -IncludeVerInfo=1 | |
| 114 | -AutoIncBuild=0 | |
| 115 | -MajorVer=2 | |
| 116 | -MinorVer=6 | |
| 117 | -Release=0 | |
| 118 | -Build=2 | |
| 119 | -Debug=0 | |
| 120 | -PreRelease=0 | |
| 121 | -Special=0 | |
| 122 | -Private=0 | |
| 123 | -DLL=0 | |
| 124 | -Locale=11274 | |
| 125 | -CodePage=1252 | |
| 126 | -[Version Info Keys] | |
| 127 | -CompanyName=Dataprev - Emp. de TI da Prev Social - UDSL/SSLC | |
| 128 | -FileDescription=Sistema CACIC - Módulo para Sustentação do Agente Principal | |
| 129 | -FileVersion=2.6.0.2 | |
| 130 | -InternalName= | |
| 131 | -LegalCopyright= | |
| 132 | -LegalTrademarks= | |
| 133 | -OriginalFilename= | |
| 134 | -ProductName= | |
| 135 | -ProductVersion=2.6.0.1 | |
| 136 | -Comments=Licença: GNU/LGPL | |
| 137 | -[HistoryLists\hlUnitAliases] | |
| 138 | -Count=1 | |
| 139 | -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; | |
| 140 | -[HistoryLists\hlOutputDirectorry] | |
| 141 | -Count=1 | |
| 142 | -Item0=..\ |
cacicservice/CACICsvc.dpr
| ... | ... | @@ -1,29 +0,0 @@ |
| 1 | -(** | |
| 2 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 3 | -Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Dataprev - Empresa de Tecnologia e Informações da Previdência Social, Brasil | |
| 4 | - | |
| 5 | -Este arquivo é parte do programa CACIC - Configurador Automático e Coletor de Informações Computacionais | |
| 6 | - | |
| 7 | -O CACIC é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como | |
| 8 | -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença, ou (na sua opinião) qualquer versão. | |
| 9 | - | |
| 10 | -Este programa é distribuido na esperança que possa ser util, mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer | |
| 11 | -MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes. | |
| 12 | - | |
| 13 | -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software | |
| 14 | -Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 15 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 16 | -*) | |
| 17 | -program CACICsvc; | |
| 18 | - | |
| 19 | -uses | |
| 20 | - SvcMgr, | |
| 21 | - CACICsvcMain in 'CACICsvcMain.pas' {CACICservice: TService}, | |
| 22 | - CACIC_Library in '..\CACIC_Library.pas'; | |
| 23 | -{$R *.RES} | |
| 24 | - | |
| 25 | -begin | |
| 26 | - Application.Initialize; | |
| 27 | - Application.CreateForm(TCACICservice, CACICservice); | |
| 28 | - Application.Run; | |
| 29 | -end. |
cacicservice/CACICsvc.res
No preview for this file type
cacicservice/CACICsvcMain.ddp
No preview for this file type
cacicservice/CACICsvcMain.dfm
| ... | ... | @@ -1,20 +0,0 @@ |
| 1 | -object CACICservice: TCACICservice | |
| 2 | - OldCreateOrder = False | |
| 3 | - DisplayName = 'CACICservice' | |
| 4 | - Interactive = True | |
| 5 | - AfterInstall = ServiceAfterInstall | |
| 6 | - OnExecute = ServiceExecute | |
| 7 | - OnStart = ServiceStart | |
| 8 | - OnStop = ServiceStop | |
| 9 | - Left = 192 | |
| 10 | - Top = 107 | |
| 11 | - Height = 375 | |
| 12 | - Width = 544 | |
| 13 | - object Timer_CHKsis: TTimer | |
| 14 | - Enabled = False | |
| 15 | - Interval = 60000 | |
| 16 | - OnTimer = Timer_CHKsisTimer | |
| 17 | - Left = 464 | |
| 18 | - Top = 16 | |
| 19 | - end | |
| 20 | -end |
cacicservice/CACICsvcMain.pas
| ... | ... | @@ -1,384 +0,0 @@ |
| 1 | -(** | |
| 2 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 3 | -Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Dataprev - Empresa de Tecnologia e Informações da Previdência Social, Brasil | |
| 4 | - | |
| 5 | -Este arquivo é parte do programa CACIC - Configurador Automático e Coletor de Informações Computacionais | |
| 6 | - | |
| 7 | -O CACIC é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como | |
| 8 | -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença, ou (na sua opinião) qualquer versão. | |
| 9 | - | |
| 10 | -Este programa é distribuido na esperança que possa ser util, mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer | |
| 11 | -MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes. | |
| 12 | - | |
| 13 | -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software | |
| 14 | -Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 15 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 16 | -*) | |
| 17 | -unit CACICsvcMain; | |
| 18 | - | |
| 19 | -interface | |
| 20 | - | |
| 21 | -uses | |
| 22 | - Windows, | |
| 23 | - Messages, | |
| 24 | - SysUtils, | |
| 25 | - Classes, | |
| 26 | - SvcMgr, | |
| 27 | - strUtils, | |
| 28 | - ExtCtrls, | |
| 29 | - CACIC_Library, | |
| 30 | - Psapi, | |
| 31 | - tlhelp32, | |
| 32 | - JwaWinNT, { As units com prefixo Jwa constam do Pacote Jedi_API22a } | |
| 33 | - JwaWinBase, { que pode ser obtido em http://sourceforge.net/projects/jedi-apilib/files/JEDI%20Windows%20API/JEDI%20API%202.2a%20and%20WSCL%200.9.2a/jedi_api22a_jwscl092a.zip/download } | |
| 34 | - JwaWtsApi32, | |
| 35 | - JwaWinSvc, | |
| 36 | - JwaWinType, | |
| 37 | - JwaNtStatus; | |
| 38 | - | |
| 39 | -var | |
| 40 | - boolStarted : boolean; | |
| 41 | - g_oCacic : TCACIC; | |
| 42 | - | |
| 43 | -// | |
| 44 | -const | |
| 45 | - SE_DEBUG_NAME = 'SeDebugPrivilege'; | |
| 46 | -// | |
| 47 | - | |
| 48 | -type | |
| 49 | - TCACICservice = class(TService) | |
| 50 | - Timer_CHKsis: TTimer; | |
| 51 | - procedure ServiceExecute(Sender: TService); | |
| 52 | - procedure ServiceStart(Sender: TService; var Started: Boolean); | |
| 53 | - procedure ServiceAfterInstall(Sender: TService); | |
| 54 | - procedure Timer_CHKsisTimer(Sender: TObject); | |
| 55 | - procedure ServiceStop(Sender: TService; var Stopped: Boolean); | |
| 56 | - private | |
| 57 | - | |
| 58 | - { Internal Start & Stop methods } | |
| 59 | - function GetValorChaveRegIni(p_Secao, p_Chave, p_File : String): String; | |
| 60 | - procedure logDEBUG(Msg : String); | |
| 61 | - Procedure WMEndSession(var Msg : TWMEndSession) ; message WM_ENDSESSION; | |
| 62 | - procedure ExecutaCACIC; | |
| 63 | - function startapp : integer; | |
| 64 | - public | |
| 65 | - { Public declarations } | |
| 66 | - | |
| 67 | - function GetServiceController: TServiceController; override; | |
| 68 | - end; | |
| 69 | - | |
| 70 | -var | |
| 71 | - CACICservice: TCACICservice; | |
| 72 | - | |
| 73 | -function CreateEnvironmentBlock(var lpEnvironment: Pointer; | |
| 74 | - hToken: THandle; | |
| 75 | - bInherit: BOOL): BOOL; stdcall; external 'userenv'; | |
| 76 | -function DestroyEnvironmentBlock(pEnvironment: Pointer): BOOL; stdcall; external 'userenv'; | |
| 77 | - | |
| 78 | -implementation | |
| 79 | - | |
| 80 | -{$R *.DFM} | |
| 81 | - | |
| 82 | -// Solução adaptada a partir do exemplo contido em http://www.codeproject.com/KB/vista-security/VistaSessions.aspx?msg=2750630 | |
| 83 | -// para execução a partir de token do WinLogon, possibilitando a exibição do ícone da aplicação na bandeja do systray em | |
| 84 | -// plataforma MS-VISTA. | |
| 85 | -function TCACICservice.startapp : integer; | |
| 86 | -var | |
| 87 | - pi : PROCESS_INFORMATION; | |
| 88 | - si : STARTUPINFO; | |
| 89 | - bresult : boolean; | |
| 90 | - dwSessionId,winlogonPid : DWORD; | |
| 91 | - hUserToken,hUserTokenDup,hPToken,hProcess,hsnap : THANDLE; | |
| 92 | - dwCreationFlags : DWORD; | |
| 93 | - procEntry : TPROCESSENTRY32; | |
| 94 | - winlogonSessId : DWORD; | |
| 95 | - tp : TOKEN_PRIVILEGES; | |
| 96 | - // luid : TLargeInteger; | |
| 97 | - abcd, abc, dup : integer; | |
| 98 | - lpenv : pointer; | |
| 99 | - iResultOfCreateProcessAsUser : integer; | |
| 100 | - | |
| 101 | -begin | |
| 102 | - Result := 0; | |
| 103 | - bresult := false; | |
| 104 | - | |
| 105 | - //TOKEN_ADJUST_SESSIONID := 256; | |
| 106 | - | |
| 107 | - // Log the client on to the local computer. | |
| 108 | - | |
| 109 | - | |
| 110 | - dwSessionId := WTSGetActiveConsoleSessionId(); | |
| 111 | - hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); | |
| 112 | - if (hSnap = INVALID_HANDLE_VALUE) then | |
| 113 | - begin | |
| 114 | - result := 1; | |
| 115 | - exit; | |
| 116 | - end; | |
| 117 | - | |
| 118 | - procEntry.dwSize := sizeof(TPROCESSENTRY32); | |
| 119 | - | |
| 120 | - if (not Process32First(hSnap, procEntry)) then | |
| 121 | - begin | |
| 122 | - result := 1; | |
| 123 | - exit; | |
| 124 | - end; | |
| 125 | - | |
| 126 | - repeat | |
| 127 | - if (comparetext(procEntry.szExeFile, 'winlogon.exe') = 0) then | |
| 128 | - begin | |
| 129 | - // We found a winlogon process... | |
| 130 | - | |
| 131 | - // make sure it's running in the console session | |
| 132 | - | |
| 133 | - winlogonSessId := 0; | |
| 134 | - if (ProcessIdToSessionId(procEntry.th32ProcessID, winlogonSessId) and (winlogonSessId = dwSessionId)) then | |
| 135 | - begin | |
| 136 | - winlogonPid := procEntry.th32ProcessID; | |
| 137 | - break; | |
| 138 | - end; | |
| 139 | - end; | |
| 140 | - | |
| 141 | - until (not Process32Next(hSnap, procEntry)); | |
| 142 | - | |
| 143 | - //////////////////////////////////////////////////////////////////////// | |
| 144 | - | |
| 145 | - WTSQueryUserToken(dwSessionId, hUserToken); | |
| 146 | - dwCreationFlags := NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE; | |
| 147 | - ZeroMemory(@si, sizeof(STARTUPINFO)); | |
| 148 | - si.cb := sizeof(STARTUPINFO); | |
| 149 | - si.lpDesktop := 'winsta0\default'; | |
| 150 | - ZeroMemory(@pi, sizeof(pi)); | |
| 151 | - hProcess := OpenProcess(MAXIMUM_ALLOWED,FALSE,winlogonPid); | |
| 152 | - | |
| 153 | - if(not OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY | |
| 154 | - or TOKEN_DUPLICATE or TOKEN_ASSIGN_PRIMARY or TOKEN_ADJUST_SESSIONID | |
| 155 | - or TOKEN_READ or TOKEN_WRITE, hPToken)) then | |
| 156 | - begin | |
| 157 | - abcd := GetLastError(); | |
| 158 | - logDEBUG('Process token open Error: ' + inttostr(GetLastError())); | |
| 159 | - end; | |
| 160 | - | |
| 161 | - if (not LookupPrivilegeValue(nil,SE_DEBUG_NAME,tp.Privileges[0].Luid)) then | |
| 162 | - begin | |
| 163 | - logDEBUG('Lookup Privilege value Error: ' + inttostr(GetLastError())); | |
| 164 | - end; | |
| 165 | - | |
| 166 | - tp.PrivilegeCount := 1; | |
| 167 | - tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; | |
| 168 | - | |
| 169 | - DuplicateTokenEx(hPToken,MAXIMUM_ALLOWED,Nil,SecurityIdentification,TokenPrimary,hUserTokenDup); | |
| 170 | - dup := GetLastError(); | |
| 171 | - | |
| 172 | - // Adjust Token privilege | |
| 173 | - | |
| 174 | - SetTokenInformation(hUserTokenDup,TokenSessionId,pointer(dwSessionId),sizeof(DWORD)); | |
| 175 | - | |
| 176 | - if (not AdjustTokenPrivileges(hUserTokenDup,FALSE,@tp,sizeof(TOKEN_PRIVILEGES),nil,nil)) then | |
| 177 | - begin | |
| 178 | - abc := GetLastError(); | |
| 179 | - logDEBUG('Adjust Privilege value Error: ' + inttostr(GetLastError())); | |
| 180 | - end; | |
| 181 | - | |
| 182 | - if (GetLastError() = ERROR_NOT_ALL_ASSIGNED) then | |
| 183 | - begin | |
| 184 | - logDEBUG('Token does not have the provilege'); | |
| 185 | - end; | |
| 186 | - | |
| 187 | - lpEnv := nil; | |
| 188 | - | |
| 189 | - if(CreateEnvironmentBlock(lpEnv,hUserTokenDup,TRUE)) then | |
| 190 | - begin | |
| 191 | - dwCreationFlags := dwCreationFlags or CREATE_UNICODE_ENVIRONMENT; | |
| 192 | - end | |
| 193 | - else | |
| 194 | - lpEnv := nil; | |
| 195 | - | |
| 196 | - // Launch the process in the client's logon session. | |
| 197 | - bResult := CreateProcessAsUser( hUserTokenDup, // client's access token | |
| 198 | - PAnsiChar(g_oCacic.getCacicPath + 'cacic2.exe'), // file to execute | |
| 199 | - nil, // command line | |
| 200 | - nil, // pointer to process SECURITY_ATTRIBUTES | |
| 201 | - nil, // pointer to thread SECURITY_ATTRIBUTES | |
| 202 | - FALSE, // handles are not inheritable | |
| 203 | - dwCreationFlags, // creation flags | |
| 204 | - lpEnv, // pointer to new environment block | |
| 205 | - PAnsiChar(g_oCacic.getCacicPath), // name of current directory | |
| 206 | - si, // pointer to STARTUPINFO structure | |
| 207 | - pi // receives information about new process | |
| 208 | - ); | |
| 209 | - | |
| 210 | - // End impersonation of client. | |
| 211 | - //GetLastError Shud be 0 | |
| 212 | - iResultOfCreateProcessAsUser := GetLastError(); | |
| 213 | - | |
| 214 | - //Perform All the Close Handles tasks | |
| 215 | - CloseHandle(hProcess); | |
| 216 | - CloseHandle(hUserToken); | |
| 217 | - CloseHandle(hUserTokenDup); | |
| 218 | - CloseHandle(hPToken); | |
| 219 | -end; | |
| 220 | -// | |
| 221 | -procedure TCACICservice.WMEndSession(var Msg : TWMEndSession) ; | |
| 222 | -begin | |
| 223 | - if Msg.EndSession = TRUE then | |
| 224 | - logDEBUG('Windows finalizado em ' + FormatDateTime('c', Now)) ; | |
| 225 | - inherited; | |
| 226 | - Application.Free; | |
| 227 | -end; | |
| 228 | - | |
| 229 | -// Funções Auxiliares | |
| 230 | -function TCACICservice.GetValorChaveRegIni(p_Secao, p_Chave, p_File : String): String; | |
| 231 | -//Para buscar do Arquivo INI... | |
| 232 | -// Marreta devido a limitações do KERNEL w9x no tratamento de arquivos texto e suas seções | |
| 233 | -//function GetValorChaveRegIni(p_SectionName, p_KeyName, p_IniFileName : String) : String; | |
| 234 | -var | |
| 235 | - FileText : TStringList; | |
| 236 | - i, j, v_Size_Section, v_Size_Key : integer; | |
| 237 | - v_SectionName, v_KeyName : string; | |
| 238 | - begin | |
| 239 | - logDEBUG('GetVCRini: Secao: '+p_Secao+' Chave: '+p_Chave+' File: '+p_File); | |
| 240 | - Result := ''; | |
| 241 | - v_SectionName := '[' + p_Secao + ']'; | |
| 242 | - v_Size_Section := strLen(PChar(v_SectionName)); | |
| 243 | - v_KeyName := p_Chave + '='; | |
| 244 | - v_Size_Key := strLen(PChar(v_KeyName)); | |
| 245 | - FileText := TStringList.Create; | |
| 246 | - try | |
| 247 | - FileText.LoadFromFile(p_File); | |
| 248 | - For i := 0 To FileText.Count - 1 Do | |
| 249 | - Begin | |
| 250 | - if (LowerCase(Trim(PChar(Copy(FileText[i],1,v_Size_Section)))) = LowerCase(Trim(PChar(v_SectionName)))) then | |
| 251 | - Begin | |
| 252 | - For j := i to FileText.Count - 1 Do | |
| 253 | - Begin | |
| 254 | - if (LowerCase(Trim(PChar(Copy(FileText[j],1,v_Size_Key)))) = LowerCase(Trim(PChar(v_KeyName)))) then | |
| 255 | - Begin | |
| 256 | - Result := PChar(Copy(FileText[j],v_Size_Key + 1,strLen(PChar(FileText[j]))-v_Size_Key)); | |
| 257 | - Break; | |
| 258 | - End; | |
| 259 | - End; | |
| 260 | - End; | |
| 261 | - if (Result <> '') then break; | |
| 262 | - End; | |
| 263 | - finally | |
| 264 | - FileText.Free; | |
| 265 | - end; | |
| 266 | - end; | |
| 267 | - | |
| 268 | -procedure TCACICservice.logDEBUG(Msg : String); | |
| 269 | -var fLog: textfile; | |
| 270 | -begin | |
| 271 | - // Somente gravarei informações para debug se o arquivo "<HomeDrive>:\CACICsvc.log" existir | |
| 272 | - if FileExists(g_oCacic.Windows.getHomeDrive + g_oCacic.Windows.getWinDir + 'CACICsvc.log') then | |
| 273 | - Begin | |
| 274 | - AssignFile(fLog, g_oCacic.Windows.getHomeDrive + g_oCacic.Windows.getWinDir + 'CACICsvc.log'); | |
| 275 | - if FileExists(g_oCacic.Windows.getHomeDrive + g_oCacic.Windows.getWinDir + 'CACICsvc.log') then | |
| 276 | - Append(fLog) | |
| 277 | - else | |
| 278 | - Rewrite(fLog); | |
| 279 | - Writeln(fLog,FormatDateTime('dd/mm hh:nn:ss ', Now) + '[CACICsvc][DEBUG] : ' +msg); | |
| 280 | - CloseFile(fLog); | |
| 281 | - End; | |
| 282 | -End; | |
| 283 | - | |
| 284 | -procedure ServiceController(CtrlCode: DWord); stdcall; | |
| 285 | -begin | |
| 286 | - CACICservice.Controller(CtrlCode); | |
| 287 | -end; | |
| 288 | - | |
| 289 | -function TCACICservice.GetServiceController: TServiceController; | |
| 290 | -begin | |
| 291 | - Result := ServiceController; | |
| 292 | -end; | |
| 293 | - | |
| 294 | -procedure TCACICservice.ServiceExecute(Sender: TService); | |
| 295 | -begin | |
| 296 | - { Loop while service is active in SCM } | |
| 297 | - While NOT Terminated do | |
| 298 | - Begin | |
| 299 | - { Process Service Requests } | |
| 300 | - ServiceThread.ProcessRequests( False ); | |
| 301 | - { Allow system some time } | |
| 302 | - Sleep(1); | |
| 303 | - End; | |
| 304 | -end; | |
| 305 | - | |
| 306 | -procedure TCACICservice.ServiceStart(Sender: TService; var Started: Boolean); | |
| 307 | -begin | |
| 308 | - | |
| 309 | - g_oCacic := TCACIC.Create; | |
| 310 | - g_oCacic.setCacicPath(GetValorChaveRegIni('Cacic2', 'cacic_dir', g_oCacic.getWinDir + 'chksis.ini')); | |
| 311 | - CACICservice.logDEBUG('TCACICservice.ExecutaCACIC : setCacicPath => '+GetValorChaveRegIni('Cacic2', 'cacic_dir', g_oCacic.getWinDir + 'chksis.ini')); | |
| 312 | - | |
| 313 | - CACICservice.logDEBUG('TCACICservice.ServiceStart'); | |
| 314 | - Started := true; | |
| 315 | - | |
| 316 | - ExecutaCACIC; | |
| 317 | - | |
| 318 | - Timer_CHKsis.Interval := 60000; | |
| 319 | - Timer_CHKsis.Enabled := true; | |
| 320 | - | |
| 321 | - While not Terminated do | |
| 322 | - Sleep(250); | |
| 323 | -end; | |
| 324 | - | |
| 325 | -procedure TCACICservice.ExecutaCACIC; | |
| 326 | -Begin | |
| 327 | - CACICservice.logDEBUG('TCACICservice.ExecutaCACIC : deleteFile => '+g_oCacic.getCacicPath + 'aguarde_CACIC.txt'); | |
| 328 | - DeleteFile(PAnsiChar(g_oCacic.getCacicPath + 'aguarde_CACIC.txt')); | |
| 329 | - Sleep(3000); | |
| 330 | - | |
| 331 | - // Se o arquivo indicador de execução não existir... | |
| 332 | - if not (FileExists(g_oCacic.getCacicPath + 'aguarde_CACIC.txt')) then | |
| 333 | - Begin | |
| 334 | - // Executo o CHKsis, verificando a estrutura do sistema | |
| 335 | - Try | |
| 336 | - CACICservice.logDEBUG('TCACICservice.ExecutaCACIC : createSampleProcess => '+g_oCacic.getWinDir + 'chksis.exe'); | |
| 337 | - g_oCacic.createSampleProcess(g_oCacic.getWinDir + 'chksis.exe',false,SW_HIDE); | |
| 338 | - Except | |
| 339 | - End; | |
| 340 | - | |
| 341 | - While not (FileExists(g_oCacic.getCacicPath + 'cacic2.exe')) do | |
| 342 | - Sleep(5000); // Espero 5 segundos... | |
| 343 | - | |
| 344 | - // Executo o Agente Principal do CACIC | |
| 345 | - Try | |
| 346 | - // Execução diferenciada para >= VISTA devido ao impedimento de escrita na Notification Area imposta a processos/serviços. | |
| 347 | - if (g_oCacic.isWindowsGEVista) then | |
| 348 | - Begin | |
| 349 | - CACICservice.logDEBUG('TCACICservice.ExecutaCACIC invocando CACICservice.startapp para execução de "'+g_oCacic.getCacicPath + 'cacic2.exe'+'"'); | |
| 350 | - CACICservice.startapp; | |
| 351 | - End | |
| 352 | - else | |
| 353 | - Begin | |
| 354 | - CACICservice.logDEBUG('TCACICservice.ExecutaCACIC : createSampleProcess => '+g_oCacic.getCacicPath + 'cacic2.exe'); | |
| 355 | - g_oCacic.createSampleProcess(g_oCacic.getCacicPath + 'cacic2.exe',false,SW_NORMAL); | |
| 356 | - End; | |
| 357 | - Except | |
| 358 | - End; | |
| 359 | - End; | |
| 360 | -End; | |
| 361 | - | |
| 362 | -procedure TCACICservice.ServiceAfterInstall(Sender: TService); | |
| 363 | -begin | |
| 364 | - ServiceStart(nil,boolStarted); | |
| 365 | - CACICservice.logDEBUG('TCACICservice.ServiceAfterInstall'); | |
| 366 | -end; | |
| 367 | - | |
| 368 | -procedure TCACICservice.Timer_CHKsisTimer(Sender: TObject); | |
| 369 | -begin | |
| 370 | - CACICservice.logDEBUG('TCACICservice.Timer_CHKsisTimer'); | |
| 371 | - ExecutaCACIC; | |
| 372 | - | |
| 373 | - // Verificações diversas | |
| 374 | - | |
| 375 | -end; | |
| 376 | - | |
| 377 | -procedure TCACICservice.ServiceStop(Sender: TService; | |
| 378 | - var Stopped: Boolean); | |
| 379 | -begin | |
| 380 | - CACICservice.logDEBUG('TCACICservice.ServiceStop'); | |
| 381 | - Stopped := true; | |
| 382 | -end; | |
| 383 | - | |
| 384 | -end. |
cacicservice/CACICsvcThread.pas
| ... | ... | @@ -1,66 +0,0 @@ |
| 1 | -(* | |
| 2 | - A Windows NT Service Thread | |
| 3 | - =========================== | |
| 4 | - | |
| 5 | - Author Kim Sandell | |
| 6 | - Email: kim.sandell@nsftele.com | |
| 7 | -*) | |
| 8 | -unit CACICsvcThread; | |
| 9 | - | |
| 10 | -interface | |
| 11 | - | |
| 12 | -uses | |
| 13 | - Windows, Messages, SysUtils, Classes; | |
| 14 | - | |
| 15 | - | |
| 16 | -type | |
| 17 | - TNTServiceThread = Class(TThread) | |
| 18 | - private | |
| 19 | - { Private declarations } | |
| 20 | - Public | |
| 21 | - { Public declarations } | |
| 22 | - Interval : Integer; | |
| 23 | - | |
| 24 | - Procedure Execute; Override; | |
| 25 | - Published | |
| 26 | - { Published declarations } | |
| 27 | - End; | |
| 28 | - | |
| 29 | -implementation | |
| 30 | - | |
| 31 | -{ TNTServiceThread } | |
| 32 | - | |
| 33 | -procedure TNTServiceThread.Execute; | |
| 34 | -var TimeOut : integer; | |
| 35 | -begin | |
| 36 | - // Do NOT free on termination - The Serivce frees the Thread | |
| 37 | - FreeOnTerminate := False; | |
| 38 | - | |
| 39 | - // Set Interval | |
| 40 | - TimeOut := Interval * 4; | |
| 41 | - | |
| 42 | - // Main Loop | |
| 43 | - Try | |
| 44 | - While Not Terminated do | |
| 45 | - Begin | |
| 46 | - // Decrement timeout | |
| 47 | - Dec( TimeOut ); | |
| 48 | - | |
| 49 | - If (TimeOut=0) then | |
| 50 | - Begin | |
| 51 | - // Reset timer | |
| 52 | - TimeOut := Interval * 4; | |
| 53 | - | |
| 54 | - End; | |
| 55 | - // Wait 1/4th of a second | |
| 56 | - Sleep(250); | |
| 57 | - End; | |
| 58 | - Except | |
| 59 | - On E:Exception do ; // TODO: Exception logging... | |
| 60 | - End; | |
| 61 | - // Terminate the Thread - This signals Terminated=True | |
| 62 | - Terminate; | |
| 63 | - | |
| 64 | -end; | |
| 65 | - | |
| 66 | -end. |
cacicservice/cacic_service_32x32.ico
No preview for this file type