source: trunk/include/cppbase/bs_config_impl.h

Last change on this file was 343, checked in by pr, 19 years ago

Add CREATEOBJECT FAIL option. Bug 893.

  • Property svn:eol-style set to CRLF
  • Property svn:keywords set to Author Date Id Revision
File size: 26.3 KB
Line 
1
2/*
3 * bs_config_impl.h:
4 * this defines the classes which were only
5 * declared in bs_config.h.
6 *
7 *@@include #define INCL_WINWORKPLACE
8 *@@include #include <os2.h>
9 *@@include #include <list>
10 *@@include #include "helpers\configsys.h"
11 *@@include #include "base\bs_errors.h"
12 *@@include #include "base\bs_config.h"
13 */
14
15/*
16 * This file Copyright (C) 1999-2006 Ulrich M”ller.
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation, in version 2 as it comes in the COPYING
20 * file of this distribution.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 */
26
27#ifndef WARPIN_CONFIG_IMPL_HEADER_INCLUDED
28 #define WARPIN_CONFIG_IMPL_HEADER_INCLUDED
29
30 /* ******************************************************************
31 *
32 * BSConfigExcpt error codes
33 *
34 ********************************************************************/
35
36 // error codes for BSConfigExcpt thrown by BSConfigSys class
37 const int CFGEXCPT_OPEN = 1;
38 // error opening CONFIG.SYS (BSConfigSys);
39 // BSConfigExcpt.iData has the APIRET
40 const int CFGEXCPT_DOUBLEREPLACEMODE = 2;
41 // error parsing CONFIGSYS attribute (BSCfgSysManip):
42 // replace mode specified twice,
43 // BSConfigExcpt.pszSubstring has the failing part
44 const int CFGEXCPT_INVALIDVERTICAL = 3;
45 // error parsing CONFIGSYS attribute (BSCfgSysManip):
46 // vertical modifier not allowed here
47 // BSConfigExcpt.pszSubstring has the failing part
48 const int CFGEXCPT_INVALIDSEARCH = 4;
49 // invalid search string (BSCfgSysManip)
50 // BSConfigExcpt.pszSubstring has the failing part
51 const int CFGEXCPT_MANIPULATING = 5;
52 // error in BSConfigSys::Manipulate()
53 // (should not happen)
54 const int CFGEXCPT_WRITE = 6;
55 // error in BSConfigSys::Flush();
56 // BSConfigExcpt.iData has the APIRET
57 const int CFGEXCPT_NOTIMPLEMENTED = 7;
58 // not implemented yet
59 const int CFGEXCPT_NOSEPARATOR = 8;
60 // this pops up while modifying CONFIG.SYS
61 // and ADDLEFT or ADDRIGHT have been specified,
62 // but the line in CONFIG.SYS has no "=" character
63 const int CFGEXCPT_SYNTAX = 9;
64 // invalid attribute passed to BSCfgSysManip::BSCfgSysManip
65 const int CFGEXCPT_PARSELOG = 10;
66 // syntax error parsing log entry in BSCfgSysManip::AddToUndoList
67
68 // error codes for BSConfigExcpt thrown by the BSRegisterClass, BSDeregisterClass,
69 // BSReplaceClass classes
70 const int REGEXCPT_SYNTAX = 60;
71 // syntax error in constructor (invalid pszRegisterClass);
72 // BSConfigExcpt.pszSubstring has the whole failing pszRegisterClass.
73 // This is also used by BSReplaceClass::BSReplaceClass.
74 const int REGEXCPT_QUERYCLASSLIST = 61;
75 // error querying WPS class list
76 const int REGEXCPT_ALREADYREGISTERED = 62;
77 // BSRegisterClass::Register(FALSE) has determined that the
78 // class is already registered;
79 // BSConfigExcpt.pszSubstring has the currently registered DLL
80 const int REGEXCPT_REGISTER = 63;
81 // BSRegisterClass::Register failed;
82 // BSConfigExcpt.iData has the APIRET of winhRegisterClass
83 const int REGEXCPT_DEREGISTER = 64;
84 // BSDeregisterClass::Deregister failed
85 const int REGEXCPT_REPLACE = 65;
86 // BSReplaceClass::Replace failed (WinReplaceObjectClass returned FALSE)
87 const int REGEXCPT_UNREPLACE = 66;
88 // BSUnreplaceClass::Unreplace failed (WinReplaceObjectClass returned FALSE)
89
90 // error codes for BSConfigExcpt thrown by BSCreateWPSObject class
91 const int WPOEXCPT_NOLOCATION = 100;
92 // no location given
93 const int WPOEXCPT_NOTITLE = 101;
94 // no title given
95 const int WPOEXCPT_NOCLASS = 102;
96 // no class given
97 const int WPOEXCPT_INVALIDLOCATIONSTRING = 103;
98 // invalid location string (not in angle brackets)
99 // V0.9.15 (2001-08-26) [umoeller]
100 const int WPOEXCPT_CREATE = 104;
101 // error in BSCreateWPSObject::CreateObject
102 const int WPOEXCPT_CREATE_BADLOCATION = 105;
103 // error in BSCreateWPSObject::CreateObject:
104 // specified location does not exist
105 // (probably invalid object ID for target folder)
106 // V0.9.19 (2002-06-15) [umoeller]
107 const int WPOEXCPT_DELETEOBJECT = 106;
108 // error deleting object (BSDeleteWPSObject::Delete)
109
110 // error codes for BSConfigExcpt thrown by BSExecute class
111 const int EXEEXCPT_SYNTAX = 200;
112 // syntax error parsing EXECUTE tag
113 const int EXEEXCPT_DOSERROR = 201;
114 // DOS error starting executable;
115 // BSConfigExcpt.iData has the APIRET
116
117 const int PRFEXCPT_SYNTAX = 300;
118 // syntax error in CLEARPROFILE or WRITEPROFILE tag
119 const int PRFEXCPT_PRFERROR = 301;
120 // error clearing/writing to specified profile
121 const int PRFEXCPT_PRFOPENPROFILE = 302;
122 // error opening profile V1.0.0 (2002-11-23) [umoeller]
123 // excpt data is profile name
124
125 // error codes for BSConfigExcpt thrown by BSKillProcess class
126 const int KILLEXCPT_SYNTAX = 400;
127 // syntax error parsing KILLPROCESS tag
128
129 /* ******************************************************************
130 *
131 * CONFIG.SYS class declarations
132 *
133 ********************************************************************/
134
135 // flags for BSCfgSysManip (below)
136
137 /*
138 *@@ BSCfgSysManip:
139 * the "CONFIG.SYS manipulator" class. Each
140 * instance of this represents one change to
141 * be made to CONFIG.SYS, which itself is
142 * represented by an instance of BSConfigSys.
143 *
144 * An instance of this must be created with
145 * a suitable attribute string and passed to
146 * BSConfigSys::Manipulate.
147 *
148 * See BSCfgSysManip::BSCfgSysManip for details.
149 *
150 *@@changed V0.9.0 (99-11-06) [umoeller]: renamed from CfgSysManip
151 *@@changed V0.9.1 (2000-01-06) [umoeller]: added UNIQUE(xxx) support
152 *@@changed V0.9.18 (2002-03-08) [umoeller]: adjusted for Unicode
153 */
154
155 class BSCfgSysManip : public BSConfigBase
156 {
157 public:
158 DECLARE_CLASS(BSCfgSysManip);
159
160 // allow BSConfigSys access to private members
161 friend class BSConfigSys;
162
163 public:
164 // CONFIGMANIP _ConfigManip;
165 // replaced CONFIGMANIP with the below fields for Unicode support
166
167 int _iReplaceMode; // this is an int, really
168 // one of the following:
169 // -- CFGRPL_ADD (0): just add line (default; iVertical applies).
170 // -- CFGRPL_UNIQUE mode (1): existing line is replaced;
171 // if not found, iVertical applies.
172 // -- CFGRPL_ADDLEFT mode (2): line is updated to the left;
173 // if not found, iVertical applies.
174 // -- CFGRPL_ADDRIGHT mode (3): line is updated to the right;
175 // if not found, iVertical applies.
176 // -- CFGRPL_REMOVELINE mode (4)
177 // -- CFGRPL_REMOVEPART mode (5)
178
179 ustring _ustrUniqueSearchString2;
180 // for UNIQUE(statement2):
181 // the "statement2" to search for
182 // V0.9.1 (2000-01-06) [umoeller]
183
184 int _iVertical; // this is an int, really
185 // 0: add to bottom (default)
186 // 1: add to top
187 // 2: add before pszSearchString
188 // 3: add after pszSearchString
189 ustring _ustrVerticalSearchString;
190 // for iVertical == 2 or 3
191
192 ustring _ustrNewLine;
193 // this is a copy of stuff before the "|" char
194 // in pszConfigSys given to the constructor
195
196 BSCfgSysManip(const ustring &ustrConfigSys);
197 virtual ~BSCfgSysManip() {};
198
199 virtual const char* DescribeType();
200 virtual ustring DescribeData();
201
202 static int AddToUndoList(list<BSConfigBase*> &List,
203 BSCfgSysDoneLogger &logger);
204 };
205
206 /*
207 *@@ BSConfigSys:
208 * represents the CONFIG.SYS file for manipulation.
209 * When an instance of this is created, CONFIG.SYS is
210 * read in by the constructor, so only create an
211 * instance of this if you're actually to modify the
212 * file.
213 *
214 * Note that this is not a subclass of BSConfigBase since
215 * this does not contain any configuration data. Instead,
216 * this represents a CONFIG.SYS file on which BSCfgSysManip
217 * instances are to be invoked to actually modify CONFIG.SYS.
218 *
219 * The destructor does _not_ write the file. Explicitly call
220 * BSConfigSys::Flush() for that.
221 *
222 *@@changed V0.9.0 (99-11-06) [umoeller]: renamed from ConfigSys
223 *@@changed V0.9.6 (2000-10-27) [umoeller]: added _fDirty
224 *@@changed WarpIN V1.0.9 (2006-02-16) [pr]: added _pszContentOld
225 */
226
227 class BSConfigSys : public BSRoot
228 {
229 public:
230 DECLARE_CLASS(BSConfigSys);
231
232 protected:
233 char *_pszContent;
234 char *_pszContentOld;
235 BOOL _fDirty; // TRUE if _pszContent has changed
236
237 public:
238 BSConfigSys();
239 virtual ~BSConfigSys();
240
241 int Manipulate(BSUniCodec &codecProcess,
242 BSCfgSysManip& Manip,
243 BSCfgSysDoneLogger *pLogger,
244 BSFileLogger *pLogFile);
245 int Flush(string *pstrBackup,
246 BSFileLogger *pLogFile)
247 const;
248 };
249
250 /* ******************************************************************
251 *
252 * Register-class class declarations
253 *
254 ********************************************************************/
255
256 /*
257 *@@ BSRegisterClass:
258 * represents one WPS class to be registered with the
259 * system.
260 *
261 * Call BSRegisterClass::Register to actually register
262 * the class.
263 *
264 *@@changed V0.9.0 (99-11-06) [umoeller]: renamed from RegisterClass
265 */
266
267 class BSRegisterClass : public BSConfigBase
268 {
269 public:
270 DECLARE_CLASS(BSRegisterClass);
271
272 public:
273 // all these must be public because otherwise
274 // WarpIN cannot resolve macros
275 ustring _ustrClassName;
276 ustring _ustrModule;
277
278 virtual const char* DescribeType();
279 virtual ustring DescribeData();
280
281 BSRegisterClass(const ustring &ustrRegisterClass);
282 virtual ~BSRegisterClass() {};
283
284 bool IsRegistered(BSUniCodec &codecProcess,
285 ustring &ustrModule)
286 const;
287
288 int Register(BSUniCodec &codecProcess,
289 bool fReplace,
290 BSRegisterDoneLogger *pLogger,
291 BSFileLogger *pLogFile)
292 const;
293 };
294
295 /*
296 *@@ BSDeregisterClass:
297 * represents one WPS class to be deregistered from the
298 * system.
299 *
300 * Call BSDeregisterClass::Deregister to actually deregister
301 * the class.
302 *
303 * This is used to deregister classes that were previously
304 * registered using the BSRegisterClass class.
305 *
306 *@@changed V0.9.0 (99-11-06) [umoeller]: renamed from BSDeregisterClass
307 */
308
309 class BSDeregisterClass : public BSConfigBase
310 {
311 public:
312 DECLARE_CLASS(BSDeregisterClass);
313
314 public:
315 ustring _ustrClassName;
316
317 virtual const char* DescribeType();
318 virtual ustring DescribeData();
319
320 BSDeregisterClass(const ustring &ustrDeregisterClass);
321 virtual ~BSDeregisterClass() {};
322
323 int Deregister(BSUniCodec &codecProcess,
324 BSFileLogger *pLogFile)
325 const;
326
327 static int AddToUndoList(list<BSConfigBase*> &List,
328 BSRegisterDoneLogger &logger);
329 };
330
331 /*
332 *@@ BSReplaceClassBase:
333 * abstract base class for both BSReplaceClass
334 * and BSUnReplaceClass so we can share the
335 * instance vars and the parser in the constructor.
336 *
337 *@@added V0.9.19 (2002-05-07) [umoeller]
338 */
339
340 class BSReplaceClassBase : public BSConfigBase
341 {
342 public:
343 DECLARE_CLASS(BSReplaceClassBase);
344
345 public:
346 // all these must be public because otherwise
347 // WarpIN cannot resolve macros
348 ustring _ustrOldClassName;
349 ustring _ustrNewClassName;
350
351 protected:
352 BSReplaceClassBase(const ustring &ustrReplaceClass,
353 ULONG cfgt,
354 BSClassID &Class);
355 virtual ~BSReplaceClassBase() {};
356 };
357
358 /*
359 *@@ BSReplaceClass:
360 * represents one WPS class to be replaced with another
361 * WPS class on the system.
362 *
363 * Call BSReplace::Replace to actually register
364 * the class.
365 *
366 *@@changed V0.9.0 (99-11-06) [umoeller]: renamed from ReplaceClass
367 *@@changed V0.9.19 (2002-05-07) [umoeller]: changed inheritance to get DYNAMIC_CAST right
368 *@@changed V0.9.20 (2002-07-22) [umoeller]: removed duplicate instance variables to fix total REPLACECLASS breakage
369 */
370
371 class BSReplaceClass : public BSReplaceClassBase
372 {
373 public:
374 DECLARE_CLASS(BSReplaceClass);
375
376 public:
377 /* removed these instance variables duplicating the same ones
378 in the parent, this kept the constructor from working at all
379 V0.9.20 (2002-07-22) [umoeller]
380 ustring _ustrOldClassName;
381 ustring _ustrNewClassName;
382 */
383
384 BSReplaceClass(const ustring &ustrReplaceClass)
385 : BSReplaceClassBase(ustrReplaceClass,
386 CFGT_REPLACECLASS,
387 tBSReplaceClass)
388 {
389 }
390
391 virtual ~BSReplaceClass() {};
392
393 virtual const char* DescribeType();
394 virtual ustring DescribeData();
395
396 int Replace(BSUniCodec &codecProcess,
397 BSReplaceDoneLogger *pLogger,
398 BSFileLogger *pLogFile)
399 const;
400 };
401
402 /*
403 *@@ BSUnreplaceClass:
404 * the reverse to BSReplaceClass. This is used to un-replace
405 * classes that were previously replaced using the
406 * BSRegisterClass class.
407 *
408 * Since the BSReplaceDoneLogger class stores items just
409 * like the input to BSReplaceClass was, we inherit from
410 * that class to use the same parsing routines.
411 *
412 *@@changed V0.9.0 (99-11-06) [umoeller]: renamed from UnreplaceClass
413 *@@changed V0.9.19 (2002-05-07) [umoeller]: changed inheritance to get DYNAMIC_CAST right
414 */
415
416 class BSUnreplaceClass : public BSReplaceClassBase
417 {
418 public:
419 DECLARE_CLASS(BSUnreplaceClass);
420
421 public:
422 // inherit constructor from BSReplaceClass
423 BSUnreplaceClass(const ustring &ustrUnreplaceClass)
424 : BSReplaceClassBase(ustrUnreplaceClass,
425 CFGT_UNREPLACECLASS,
426 tBSUnreplaceClass)
427 {};
428
429 virtual const char* DescribeType();
430 virtual ustring DescribeData();
431
432 int Unreplace(BSUniCodec &codecProcess,
433 BSFileLogger *pLogFile)
434 const;
435
436 static int AddToUndoList(list<BSConfigBase*> &List,
437 BSReplaceDoneLogger &logger);
438 };
439
440 /* ******************************************************************
441 *
442 * Create-object class declarations
443 *
444 ********************************************************************/
445
446 /*
447 *@@ BSCreateWPSObject:
448 * represents one WPS object to be created on the
449 * system.
450 *
451 * Call BSCreateWPSObject::CreateObject to actually
452 * create the object.
453 *
454 *@@changed V0.9.0 (99-11-06) [umoeller]: renamed from CreateWPSObject
455 */
456
457 class BSCreateWPSObject : public BSConfigBase
458 {
459 public:
460 DECLARE_CLASS(BSCreateWPSObject);
461
462 public:
463 // the following should always be set
464 ustring _ustrClassName;
465 ustring _ustrTitle;
466 ustring _ustrSetupString; // this one might be NULL
467 ustring _ustrLocation;
468 ULONG _ulFlags; // V1.0.14 (2006-12-03) [pr]: renamed from _fReplace @@fixes 893
469
470 // the following is set by BSConfigExcpt::CreateObject
471 // if an object has been created successfully
472 HOBJECT _hobj;
473
474 BSCreateWPSObject(const ustring &ustrCreateObject);
475 virtual ~BSCreateWPSObject() {};
476
477 virtual const char* DescribeType();
478 virtual ustring DescribeData();
479
480 void CreateObject(BSUniCodec &codecProcess,
481 BSWPSObjectsDoneLogger *pLogger,
482 BSFileLogger *pLogFile);
483 bool DoesObjectExist();
484 void DestroyObject(BSFileLogger *pLogFile);
485 };
486
487 /*
488 *@@ BSDeleteWPSObject:
489 * the reverse to BSCreateWPSObject. This is used to delete
490 * objects that were previously created using the
491 * BSCreateWPSObject class.
492 */
493
494 class BSDeleteWPSObject : public BSConfigBase
495 {
496 public:
497 DECLARE_CLASS(BSDeleteWPSObject);
498
499 public:
500 ustring _ustrObjectID;
501
502 BSDeleteWPSObject(const ustring &ustrID2Delete);
503 virtual ~BSDeleteWPSObject() {};
504
505 virtual const char* DescribeType();
506 virtual ustring DescribeData();
507
508 int Delete(BSUniCodec &codecProcess,
509 BSFileLogger *pLogFile)
510 const;
511
512 static int AddToUndoList(list<BSConfigBase*> &List,
513 BSWPSObjectsDoneLogger &logger);
514 };
515
516 /* ******************************************************************
517 *
518 * Profile classes
519 *
520 ********************************************************************/
521
522 /*
523 *@@ BSProfileBase:
524 * abstract base class for both BSClearProfile
525 * and BSWriteProfile so that we can share the
526 * member variables and the description routines.
527 *
528 * Note that BSWriteProfile still adds the
529 * _ustrWriteString member.
530 *
531 *@@added V0.9.19 (2002-05-07) [umoeller]
532 */
533
534 class BSProfileBase : public BSConfigBase
535 {
536 public:
537 DECLARE_CLASS(BSProfileBase);
538
539 public:
540 ustring _ustrProfile;
541 ustring _ustrApplication;
542 ustring _ustrKey;
543
544 /*
545 *@@ BSProfileBase:
546 *
547 *@@added V0.9.19 (2002-05-07) [umoeller]
548 */
549
550 BSProfileBase(ULONG cfgt,
551 BSClassID &Class)
552 : BSConfigBase(cfgt, Class)
553 {
554 }
555
556 virtual ~BSProfileBase() {};
557
558 virtual const char* DescribeType();
559 virtual ustring DescribeData();
560
561 ustring DescribePrfKey() const;
562 string DescribePrfKey(BSUniCodec &codecProcess) const;
563 };
564
565 /*
566 *@@ BSClearProfile:
567 * represents a chunk of data to be removed from
568 * a profile (INI file) on the system.
569 *
570 *@@added V0.9.1 (2000-02-07) [umoeller]
571 *@@changed V0.9.19 (2002-05-07) [umoeller]: changed inheritance to get DYNAMIC_CAST right
572 */
573
574 class BSClearProfile : public BSProfileBase
575 {
576 public:
577 DECLARE_CLASS(BSClearProfile);
578
579 public:
580 BSClearProfile(const ustring &ustrClearProfile);
581
582 virtual ~BSClearProfile() {};
583
584 int Clear(BSUniCodec &codecProcess,
585 HAB hab,
586 BSFileLogger *pLogFile)
587 const;
588
589 static int AddToUndoList(list<BSConfigBase*> &List,
590 BSClearPrfAttrsLogger &logger);
591 };
592
593 /*
594 *@@ BSWriteProfile:
595 * represents a string to be written to
596 * a profile (INI file) on the system.
597 *
598 *@@added V0.9.1 (2000-02-07) [umoeller]
599 *@@changed V0.9.19 (2002-05-07) [umoeller]: changed inheritance to get DYNAMIC_CAST right
600 */
601
602 class BSWriteProfile : public BSProfileBase
603 {
604 public:
605 DECLARE_CLASS(BSWriteProfile);
606
607 public:
608 ustring _ustrWriteString;
609
610 BSWriteProfile(const ustring &ustrWriteProfile);
611
612 virtual ~BSWriteProfile() {};
613
614 int Write(BSUniCodec &codecProcess,
615 HAB hab,
616 BSClearPrfAttrsLogger *pLogger,
617 BSFileLogger *pLogFile)
618 const;
619 };
620
621 /* ******************************************************************
622 *
623 * Execute application program class
624 *
625 ********************************************************************/
626
627 /*
628 *@@ BSExecute:
629 * represents a user executable (EXECUTE tag) to
630 * be executed when installation is done.
631 *
632 * Call BSExecute::Execute to actually run the
633 * program.
634 *
635 *@@added V0.9.1 (2000-02-07) [umoeller]
636 *@@changed V0.9.9 (2001-03-27) [umoeller]: separated executable and parameters
637 */
638
639 class BSExecute : public BSConfigBase
640 {
641 public:
642 DECLARE_CLASS(BSExecute);
643
644 public:
645 ULONG _ulExecType;
646 // ORed CFGT_* flags as specified with BSConfigBase;
647 // these are the flags on the "Configure" page this
648 // EXECUTE thing is dependent on. If this is 0,
649 // the execute will always be executed.
650
651 ustring _ustrExecutable; // V0.9.9 (2001-03-27) [umoeller]
652 ustring _ustrParams;
653
654 ULONG _arc; // error code of Execute()
655
656 public:
657 BSExecute(const ustring &ustrExecute,
658 BSClassID &Class = tBSExecute);
659 virtual ~BSExecute() {};
660
661 virtual const char* DescribeType();
662 virtual ustring DescribeData();
663
664 int Execute(BSUniCodec &codecProcess,
665 BSFileLogger *pLogFile);
666 };
667
668 /*
669 *@@ BSDeExecute:
670 * represents a user executable (DEEXECUTE tag) to
671 * be executed during de-installation.
672 *
673 * This is derived from BSExecute, so run
674 * the parent's Execute() on this.
675 *
676 *@@added V0.9.9 (2001-03-27) [umoeller]
677 */
678
679 class BSDeExecute : public BSExecute
680 {
681 public:
682 DECLARE_CLASS(BSDeExecute);
683
684 public:
685 BSDeExecute(const ustring &ustrDeExecute);
686
687 virtual const char* DescribeType();
688 // virtual ustring DescribeData();
689 // inherit this from BSExecute, it's the same code
690 // V0.9.18 (2002-03-08) [umoeller]
691
692 static int AddToUndoList(list <BSConfigBase*> &List,
693 BSDeExecuteResolvedLogger &logger);
694 };
695
696 /* ******************************************************************
697 *
698 * Kill process class
699 *
700 ********************************************************************/
701
702 /*
703 *@@ BSKillProcess:
704 * represents a process to be killed before
705 * installation can start (KILLPROCESS tag).
706 *
707 *@@added V0.9.1 (2000-02-07) [umoeller]
708 */
709
710 class BSKillProcess : public BSConfigBase
711 {
712 public:
713 DECLARE_CLASS(BSKillProcess);
714
715 public:
716 ustring _ustrKillProcess;
717
718 BSKillProcess(const ustring &ustrKillProcess);
719 virtual ~BSKillProcess() {};
720
721 virtual const char* DescribeType();
722 virtual ustring DescribeData();
723
724 int KillProcess(BSFileLogger *pLogFile)
725 const;
726
727 static int AddToUndoList(list<BSConfigBase*> &List,
728 BSKillProcessAttrsLogger &logger);
729 };
730
731#endif
732
Note: See TracBrowser for help on using the repository browser.