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