home *** CD-ROM | disk | FTP | other *** search
/ alphant.com / ftp.alphant.com.zip / ftp.alphant.com / Utilities / AQM30LA.ZIP / AQMAPI.H < prev    next >
C/C++ Source or Header  |  1996-06-06  |  28KB  |  806 lines

  1. //**
  2. //**  AQMAPI.H
  3. //**
  4. //**  Header file for AQM 2.3D API library.
  5. //**
  6.  
  7.  
  8. //**
  9. //**  SET STRUCTURE PACKING TO 1 BYTE
  10. //**
  11. //**  Single-byte structure packing is used because it is the lowest
  12. //**  common denominator between 16 and 32-bit compilers.
  13. //**
  14. //**  Data members are manually aligned on DWORD boundaries, through
  15. //**  the use of padding fields.
  16. //**
  17.  
  18. #pragma pack(1)
  19.  
  20.  
  21. //**
  22. //**  DATATYPE DEFINITIONS FOR CROSS-PLATFORM COMPATIBILITY
  23. //**
  24.  
  25. // DWORD BOOLEAN TYPE
  26. #ifndef DBOOL
  27. #ifndef _16BIT_
  28. #define DBOOL BOOL
  29. #else
  30. #define DBOOL DWORD
  31. #endif
  32. #endif
  33.  
  34.  
  35. // HANDLE TO A PIPE
  36. #ifndef HPIPE
  37. #ifndef _16BIT_
  38. #define HPIPE HANDLE
  39. #else
  40. #define HPIPE HFILE
  41. #endif
  42. #endif
  43.  
  44.  
  45. //**
  46. //**  BUFFER SIZE DEFINITIONS
  47. //**
  48. //**  Each buffer size has two definitions.  The first is the maximum
  49. //**  length, or number of characters, for the data field, and the 
  50. //**  second is the size of the buffer required for it, including the
  51. //**  null terminator.
  52. //**
  53. //**  Each string buffer which does not have a size divisible by 4 must
  54. //**  have a padding definitions which will round its size up to 4.
  55. //**
  56.  
  57.  
  58. // FILENAMES
  59. #define  AQM_FNAME_LEN           (MAX_PATH) // WHICH IS 256
  60. #define  AQM_FNAME_SIZE          (AQM_FNAME_LEN+1)
  61. #define  AQM_FNAME_PAD           (AQM_FNAME_SIZE%4)
  62.  
  63.  
  64. // QUEUE NAMES
  65. #define  AQM_QNAME_LEN           (16)
  66. #define  AQM_QNAME_SIZE          (AQM_QNAME_LEN+1)
  67. #define  AQM_QNAME_PAD           (AQM_QNAME_SIZE%4)
  68.  
  69. // USERNAMES
  70. #define  AQM_USER_LEN            (63)
  71. #define  AQM_USER_SIZE           (AQM_USER_LEN+1)
  72. #if AQM_USER_SIZE%4 != 0
  73. #error AQM_USER_SIZE is not evenly divisible by 4.
  74. #endif
  75.  
  76. // USER FULL NAME
  77. #define  AQM_USER_FULL_NAME_LEN  (95)
  78. #define  AQM_USER_FULL_NAME_SIZE (AQM_USER_FULL_NAME_LEN+1)
  79. #if AQM_USER_FULL_NAME_SIZE%4 != 0
  80. #error AQM_USER_FULL_NAME_SIZE is not evenly divisible by 4.
  81. #endif
  82.  
  83.  
  84. // DOMAIN NAMES
  85. #define  AQM_DOMAIN_LEN          (63)
  86. #define  AQM_DOMAIN_SIZE         (AQM_DOMAIN_LEN+1)
  87. #if AQM_DOMAIN_SIZE%4 != 0
  88. #error AQM_DOMAIN_SIZE is not evenly divisible by 4.
  89. #endif
  90.  
  91.  
  92. // PASSWORDS
  93. #define  AQM_PASSWORD_LEN        (63)
  94. #define  AQM_PASSWORD_SIZE       (AQM_PASSWORD_LEN+1)
  95. #if AQM_PASSWORD_SIZE%4 != 0
  96. #error AQM_PASSWORD_SIZE is not evenly divisible by 4.
  97. #endif
  98.  
  99.  
  100. // ACCOUNT NAMES, e.g. "DEV\TomD"
  101. #define  AQM_ACCOUNT_NAME_LEN    (AQM_DOMAIN_LEN+1+AQM_USER_LEN)
  102. #define  AQM_ACCOUNT_NAME_SIZE   (AQM_ACCOUNT_NAME_LEN+1)
  103. #if AQM_ACCOUNT_NAME_SIZE%4 != 0
  104. #error AQM_ACCOUNT_NAME_SIZE is not evenly divisible by 4.
  105. #endif
  106.  
  107.  
  108. // QUEUE DESCRIPTION TEXTS
  109. #define  AQM_QDESCR_LEN          (63)
  110. #define  AQM_QDESCR_SIZE         (AQM_QDESCR_LEN+1)
  111. #if AQM_QDESCR_SIZE%4 != 0
  112. #error AQM_QDESCR_SIZE is not evenly divisible by 4.
  113. #endif
  114.  
  115.  
  116. // QUEUE DESCRIPTION TEXTS
  117. #define  AQM_STATUS_DETAIL_TEXT_LEN   (399)
  118. #define  AQM_STATUS_DETAIL_TEXT_SIZE  (AQM_STATUS_DETAIL_TEXT_LEN+1)
  119. #if AQM_STATUS_DETAIL_TEXT_SIZE%4 != 0
  120. #error AQM_STATUS_DETAIL_TEXT_SIZE is not evenly divisible by 4.
  121. #endif
  122.  
  123.  
  124. // JOB NAMES
  125. #define  AQM_JNAME_LEN           (15)
  126. #define  AQM_JNAME_SIZE          (AQM_JNAME_LEN+1)
  127. #if AQM_JNAME_SIZE%4 != 0
  128. #error AQM_JNAME_SIZE is not evenly divisible by 4.
  129. #endif
  130.  
  131.  
  132.  
  133. // JOB COMMAND-LINE PARAMETERS
  134. #define  AQM_JPARAMS_LEN         (AQM_FNAME_LEN*2 + 1)
  135. #define  AQM_JPARAMS_SIZE        (AQM_JPARAMS_LEN+1)
  136. #define  AQM_JPARAMS_PAD         (AQM_JPARAMS_SIZE%4)
  137.  
  138.  
  139.  
  140. // COMPUTER NAMES
  141. #define  AQM_COMPUTER_LEN        (MAX_COMPUTERNAME_LENGTH)
  142. #define  AQM_COMPUTER_SIZE       (AQM_COMPUTER_LEN+1)
  143. #define  AQM_COMPUTER_PAD        (AQM_COMPUTER_SIZE%4)
  144.  
  145.  
  146.  
  147.  
  148. // SIDs  (SECURITY IDENTIFIERS)
  149. // (leaving 4 bytes extra for safety margin - 72 as opposed to 68 bytes actually required)
  150. #define  AQM_SID_SIZE  (sizeof(SID) + (sizeof(DWORD) * SID_MAX_SUB_AUTHORITIES))
  151.  
  152.  
  153.  
  154.  
  155.  
  156. //**
  157. //**  OTHER CONSTANT DEFINITIONS
  158. //**
  159.  
  160. // MAXIMUM NUMBER OF STARTUP JOBS
  161. #define  AQM_MAX_STARTUP_JOBS        (4)
  162.  
  163.  
  164.  
  165.  
  166. //**
  167. //**  STRUCTURES AND DATATYPES
  168. //**
  169.  
  170.  
  171. typedef struct _AQM_CREATE_QUEUE_PARAMS    // AQM_CREATE_QUEUE_PARAMS
  172.    {
  173.    CHAR    Name [AQM_QNAME_SIZE];    // NAME OF QUEUE
  174.    CHAR    Pad1 [AQM_QNAME_PAD];    // PADDING
  175.    CHAR    Descr [AQM_QDESCR_SIZE];    // QUEUE DESCRIPTION
  176.    DWORD   Priority;    // QUEUE PRIORITY (0 - 255)
  177.    DWORD   PendJobsLimit;    // PENDING JOBS LIMIT
  178.    DWORD   ExecJobsLimit;    // EXECUTING JOBS LIMIT
  179.    DBOOL   Stopped;    // TRUE = QUEUE INITIALLY STOPPED
  180.    DBOOL   Closed;    // TRUE = QUEUE INITIALLY CLOSED
  181.    DBOOL   AutoOpenClose;    // TRUE = AUTO OPEN/CLOSE ENABLED
  182.    DWORD   AutoOpenMinute;    // MINUTE OF DAY TO AUTOMATICALLY OPEN QUEUE
  183.    DWORD   AutoCloseMinute;    // MINUTE OF DAY TO AUTOMATICALLY CLOSE QUEUE
  184.    DBOOL   AutoStartStop;    // TRUE = AUTO START/STOP ENABLED
  185.    DWORD   AutoStartMinute;    // MINUTE OF DAY TO AUTOMATICALLY START QUEUE
  186.    DWORD   AutoStopMinute;    // MINUTE OF DAY TO AUTOMATICALLY STOP QUEUE
  187.    DWORD   RetainMinutes;    // MINUTES TO RETAIN COMPLETED JOBS
  188.    } AQM_CREATE_QUEUE_PARAMS;
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195. typedef struct _AQM_SUBMIT_JOB_PARAMS    // AQM_SUBMIT_JOB_PARAMS
  196.    {
  197.    CHAR    Name [AQM_JNAME_SIZE];    // JOB NAME
  198.    CHAR    File [AQM_FNAME_SIZE];    // JOB FILE
  199.    CHAR    Pad1 [AQM_FNAME_PAD];    // PADDING
  200.    CHAR    Params [AQM_JPARAMS_SIZE];    // JOB COMMAND-LINE PARAMETERS
  201.    CHAR    Pad2 [AQM_JPARAMS_PAD];    // PADDING
  202.    CHAR    LogFile [AQM_FNAME_SIZE];    // LOG FILE FILENAME
  203.    CHAR    Pad3 [AQM_FNAME_PAD];    // PADDING
  204.    DBOOL   LogNumber;    // TRUE = APPEND JOB NUMBER TO LOG FILENAME
  205.    DBOOL   NotifyOnStart;    // TRUE = NOTIFY WHEN JOB STARTS
  206.    DBOOL   NotifyOnCompl;    // TRUE = NOTIFY WHEN JOB COMPLETES
  207.    CHAR    Notify [AQM_USER_SIZE];    // USER TO NOTIFY (OR EMPTY STRING FOR OWNER)
  208.    DBOOL   PasswordPresent;    // TRUE = PASSWORD PRESENT
  209.    CHAR    Password [AQM_PASSWORD_SIZE];    // PASSWORD
  210.    FILETIME AfterTime;    // TIME AFTER WHICH JOB MAY START (OR 0,0 FOR NONE)
  211.    DWORD   EveryMinutes;    // JOB'S "/EVERY" TIME (OR 0 FOR NONE)
  212.    DBOOL   DetectInput;    // TRUE = ABORT JOB IF WAITING FOR INPUT
  213.    DWORD   ExitCodeSource;    // EXIT CODE SOURCE (SEE AQM_ECS_...)
  214.    CHAR    ExitCodeFile [AQM_FNAME_SIZE];    // ASCII TEXT CONDITION CODE FILE
  215.    CHAR    Pad4 [AQM_FNAME_PAD];    // PADDING
  216.    DBOOL   SaveExitCodeFile;    // TRUE = DON'T DELETE EXIT CODE FILE
  217.    DBOOL   ExitCodeHandling;    // TRUE = EXIT CODE HANDLING ENABLED
  218.    DWORD   FailExitCodeRelation;    // EXIT CODE RELATION TO DEFINE FAILURE
  219.    DWORD   FailExitCode;    // EXIT CODE TO DEFINE FAILURE
  220.    DBOOL   FailNotify;    // TRUE = NOTIFY USER IF JOB FAILS
  221.    CHAR    FailNotifyUser [AQM_USER_SIZE];    // USER TO NOTIFY (OR EMPTY STRING FOR OWNER)
  222.    DBOOL   FailReportEvent;    // TRUE = REPORT EVENT IF JOB FAILS
  223.    CHAR    FailureJob [AQM_FNAME_SIZE];    // JOB FILE TO EXECUTE IF JOB FAILS (EMPTY FOR NONE)
  224.    CHAR    Pad5 [AQM_FNAME_PAD];    // PADDING
  225.    CHAR    SuccessJob [AQM_FNAME_SIZE];    // JOB FILE TO EXECUTE IF JOB SUCCEEDS (EMPTY FOR NONE)
  226.    CHAR    Pad6 [AQM_FNAME_PAD];    // PADDING
  227.    CHAR    Queue [AQM_QNAME_SIZE];    // QUEUE TO SUBMIT JOB TO
  228.    CHAR    Pad7 [AQM_QNAME_PAD];    // PADDING
  229.    CHAR    Username [AQM_USER_SIZE];    // USERNAME TO RUN JOB AS (ADDED IN 2.3A)
  230.    CHAR    Domain [AQM_DOMAIN_SIZE];    // DOMAIN OF ACCOUNT TO RUN JOB AS (ADDED IN 2.3A)
  231.    } AQM_SUBMIT_JOB_PARAMS;
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240. //**
  241. //**  SYSTEM ACCESS TYPES
  242. //**
  243.  
  244.  
  245. // CONTROL (START, PAUSE, MODIFY SETTINGS, ETC), NOT INCLUDING SHUTTING IT DOWN
  246. #define   AQM_SYSTEM_CONTROL    0x0001L
  247.  
  248. // CREATE QUEUES IN THE SYSTEM
  249. #define   AQM_SYSTEM_CREATE_QUEUE    0x0002L
  250.  
  251. // SET THE PERMISSIONS ON THE SYSTEM
  252. #define   AQM_SYSTEM_SET_PERMISSIONS    (WRITE_DAC)
  253.  
  254. // ALL ACCESS
  255. #define   AQM_SYSTEM_ALL_ACCESS    (AQM_SYSTEM_CONTROL \
  256.     | AQM_SYSTEM_CREATE_QUEUE \
  257.     | AQM_SYSTEM_SET_PERMISSIONS)
  258.  
  259.  
  260.  
  261.  
  262. //**
  263. //**  QUEUE ACCESS TYPES
  264. //**
  265.  
  266.  
  267. // CONTROL (START, STOP, OPEN, CLOSE, MODIFY PROPERTIES)
  268. #define   AQM_QUEUE_CONTROL    0x0001L
  269.  
  270. // SUBMIT JOBS TO THE QUEUE
  271. #define   AQM_QUEUE_SUBMIT    0x0002L
  272.  
  273. // DELETE A QUEUE
  274. #define   AQM_QUEUE_DELETE    (DELETE)
  275.  
  276. // SET THE QUEUE'S PERMISSIONS
  277. #define   AQM_QUEUE_SET_PERMISSIONS    (WRITE_DAC)
  278.  
  279. // ALL ACCESS
  280. #define   AQM_QUEUE_ALL_ACCESS    (AQM_QUEUE_CONTROL \
  281.     | AQM_QUEUE_SUBMIT \
  282.     | AQM_QUEUE_SET_PERMISSIONS \
  283.     | AQM_QUEUE_DELETE)
  284.  
  285.  
  286.  
  287. //**
  288. //**  JOB ACCESS TYPES
  289. //**
  290.  
  291. // CONTROL (RESCHEDULE, MODIFY PROPERTIES)
  292. #define   AQM_JOB_CONTROL    (0x1L)
  293.  
  294. // ABORT THE JOB
  295. #define   AQM_JOB_ABORT    (0x2L)
  296.  
  297. // PAUSE OR UNPAUSE THE JOB
  298. #define   AQM_JOB_PAUSE    (0x4L)
  299.  
  300. // SET THE JOB'S PERMISSIONS
  301. #define   AQM_JOB_SET_PERMISSIONS    (WRITE_DAC)
  302.  
  303. // CANCEL THE JOB
  304. #define   AQM_JOB_CANCEL    (DELETE)
  305.  
  306. // ALL ACCESS
  307. #define   AQM_JOB_ALL_ACCESS    (AQM_JOB_CONTROL \
  308.     | AQM_JOB_ABORT \
  309.     | AQM_JOB_PAUSE \
  310.     | AQM_JOB_CANCEL \
  311.     | AQM_JOB_SET_PERMISSIONS)
  312.  
  313.  
  314.  
  315.  
  316.  
  317. //**
  318. //**  JOB STATUS CODES
  319. //**
  320.  
  321. #define AQM_JS_UNDEFINED              (0)    // UNDEFINED (SHOULD NEVER BE SET)
  322. #define AQM_JS_HOLDING                (1)    // JOB IS HOLDING
  323. #define AQM_JS_PENDING                (2)    // JOB IS PENDING
  324. #define AQM_JS_EXECUTING              (3)    // JOB IS EXECUTING
  325. #define AQM_JS_FAILED_TO_START        (4)    // JOB FAILED TO START
  326. #define AQM_JS_ABORTED                (5)    // JOB WAS ABORTED
  327. #define AQM_JS_COMPLETED              (6)    // JOB COMPLETED
  328. #define AQM_JS_EXECUTION_ERROR        (7)    // INTERNAL AQM ERROR OCCURED IN EXECUTION OF JOB
  329.  
  330.  
  331.  
  332. //**
  333. //**  JOB ABORT REASON CODES
  334. //**
  335.  
  336. #define AQM_AR_UNDEFINED              (0)    // UNDEFINED
  337. #define AQM_AR_ABORTED_BY_USER        (1)    // JOB WAS ABORTED BY USER
  338. #define AQM_AR_WAS_WAITING_FOR_INPUT  (2)    // JOB WAS WAITING FOR INPUT
  339. #define AQM_AR_SERVICE_SHUTDOWN       (3)    // JOB WAS ABORTED DUE TO SERVICE SHUTDOWN
  340.  
  341.  
  342.  
  343.  
  344. //**
  345. //**  JOB COMPLETION STATUS CODES
  346. //**
  347.  
  348. #define AQM_CS_UNDEFINED              (0)    // NORMAL (NO EXIT CODE HANDLING) OR UNDEFINED
  349. #define AQM_CS_SUCCESS                (1)    // EXITED WITH EXIT CODE DEFINED AS SUCCESS
  350. #define AQM_CS_FAILURE                (2)    // EXITED WITH EXIT CODE DEFINED AS FAILURE
  351. #define AQM_CS_EXCEPTION              (3)    // EXITED DUE TO EXCEPTION IN PRIMARY PROCESS
  352.  
  353.  
  354.  
  355. //**
  356. //**  JOB FAILED TO START REASON CODES
  357. //**
  358.  
  359. #define AQM_FSR_UNDEFINED               (0)    // UNDEFINED
  360. #define AQM_FSR_NO_LOGON_SERVERS        (1)    // NO LOGON SERVERS AVAILABLE
  361. #define AQM_FSR_LOGON_FAILED            (2)    // LOGON FAILED
  362. #define AQM_FSR_JOB_FILE_NOT_FOUND      (3)    // JOB FILE NOT FOUND
  363. #define AQM_FSR_JOB_FILE_ACCESS_DENIED  (4)    // JOB FILE ACCESS DENIED
  364. #define AQM_FSR_LOG_FILE_ACCESS_DENIED  (5)    // LOG FILE ACCESS DENIED
  365.  
  366.  
  367.  
  368.  
  369.  
  370. //**
  371. //**  EXIT CODE SOURCE CODES
  372. //**
  373. //**  These values are used to specify the source for a job's condition
  374. //**  code.  For example, a job's condition code may come from the
  375. //**  exit code of its primary process, or from a file containing a
  376. //**  text representation of a number.
  377. //**
  378.     // EXIT CODE COMES FROM...
  379. #define AQM_ECS_PRIMARY_PROCESS      (0)    // EXIT CODE OF PRIMARY PROCESS OF JOB
  380. #define AQM_ECS_TEXT_FILE            (1)    // TEXT FILE CONTAINING DECIMAL NUMBER
  381.  
  382.  
  383.  
  384. //**
  385. //**  EXIT CODE RELATIONS TO DEFINE JOB FAILURE ENUMERATED TYPE
  386. //**
  387.  
  388. #define AQM_ECR_GREATER_THAN         (0)    // JOB FAILS IF EXIT CODE IS GREATER THAN VALUE
  389. #define AQM_ECR_LESS_THAN            (1)    // JOB FAILS IF EXIT CODE IS LESS THAN VALUE
  390. #define AQM_ECR_EQUAL_TO             (2)    // JOB FAILS IF EXIT CODE IS EQUAL TO VALUE
  391. #define AQM_ECR_NOT_EQUAL_TO         (3)    // JOB FAILS IF EXIT CODE IS NOT EQUAL TO VALUE
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399. //**
  400. //**  AQM_STARTUP_JOB STRUCTURE
  401. //**
  402. //**  This structure defines a startup job, which is a special job that is
  403. //**  executed when the AQM service is started.
  404. //**
  405.  
  406. typedef struct _AQM_STARTUP_JOB    // AQM_STARTUP_JOB STRUCTURE
  407.    {
  408.    CHAR    File [AQM_FNAME_SIZE];    // ... FILE TO EXECUTE
  409.    CHAR    Pad1 [AQM_FNAME_PAD];    // ... PADDING
  410.    DWORD   Cond;    // ... CONDITION FOR EXECUTING THE JOB
  411.    DWORD   TimeLimit;    // ... TIME LIMIT FOR JOB (SECONDS)
  412.    DBOOL   AbortIfTimedOut;    // ... TRUE = ABORT IF EXCEEDS STARTUP JOB TIME LIMIT
  413.    } AQM_STARTUP_JOB;
  414.  
  415.  
  416.  
  417. //**
  418. //**  STARTUP JOB CONDITIONS
  419. //**
  420. //**  Each startup job has a conditions value, which determines when
  421. //**  it should execute.  A value of "Never" or an empty job filename
  422. //**  indicate that the startup job entry is not in use.
  423. //**
  424.  
  425. #define AQM_STARTUP_ALWAYS    (1)
  426. #define AQM_STARTUP_SYSTEM_BOOT    (2)
  427. #define AQM_STARTUP_NON_ORDERLY    (3)
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434. //**
  435. //**  AQM_JOB_INFO STRUCTURE
  436. //**
  437.  
  438. typedef struct _AQM_JOB_INFO
  439.    {
  440.    DWORD   Status;    // JOB STATUS
  441.    DWORD   Reason;    // STATUS REASON CODE
  442.    DBOOL   StatusDetails;    // TRUE = JOB HAS STATUS DETAIL TEXT
  443.     // STATUS DETAIL TEXT
  444.    CHAR    StatusDetailText [AQM_STATUS_DETAIL_TEXT_SIZE];
  445.    CHAR    Name [AQM_JNAME_SIZE];    // JOB NAME
  446.    CHAR    File [AQM_FNAME_SIZE];    // FILESPEC OF JOB BATCH FILE
  447.    CHAR    Pad1 [AQM_FNAME_PAD];    // PADDING
  448.    CHAR    Params [AQM_JPARAMS_SIZE];    // JOB COMMAND-LINE PARAMETERS
  449.    CHAR    Pad2 [AQM_JPARAMS_PAD];    // PADDING
  450.    CHAR    Username [AQM_USER_SIZE];    // USERNAME
  451.    CHAR    Domain [AQM_DOMAIN_SIZE];    // DOMAIN
  452.    CHAR    FullName [AQM_USER_FULL_NAME_SIZE];// USER'S FULL NAME
  453.    DBOOL   PasswordPresent;    // TRUE = PASSWORD PRESENT
  454.    CHAR    Password [AQM_PASSWORD_SIZE];    // PASSWORD
  455.    CHAR    LogFile [AQM_FNAME_SIZE];    // LOG FILE FILENAME
  456.    CHAR    Pad3 [AQM_FNAME_PAD];    // PADDING
  457.    DBOOL   LogNumber;    // TRUE = JOB NUMBER IS APPENDED TO LOG FILE
  458.    DBOOL   NotifyOnStart;    // TRUE = NOTIFY WHEN JOB STARTS
  459.    DBOOL   NotifyOnCompl;    // TRUE = NOTIFY WHEN JOB COMPLETES
  460.    CHAR    Notify [AQM_USER_SIZE];    // USER TO NOTIFY
  461.    FILETIME AfterTime;    // TIME AFTER WHICH JOB MAY BE STARTED
  462.    DWORD   EveryMinutes;    // "/EVERY" TIME IN MINUTES
  463.    DWORD   ResubmittedAs;    // JOB NUMBER OF RESUBMITTED JOB
  464.    DBOOL   DetectInput;    // TRUE = ABORT JOB IF WAITING FOR INPUT
  465.    FILETIME TimeSubmitted;    // TIME SUBMITTED
  466.    FILETIME TimeStarted;    // TIME STARTED
  467.    FILETIME TimeCompleted;    // TIME COMPLETED
  468.    LARGE_INTEGER CpuTime;       // CPU TIME CONSUMED BY JOB
  469.    DWORD   ExitCode;    // JOB'S PROCESS EXIT CODE
  470.    DWORD   JobNumber;    // JOB NUMBER
  471.    DWORD   ExitCodeSource;    // EXIT CODE SOURCE (SEE AQM_ECS_...)
  472.    CHAR    ExitCodeFile [AQM_FNAME_SIZE];    // ASCII TEXT CONDITION CODE FILE
  473.    CHAR    Pad4 [AQM_FNAME_PAD];    // PADDING
  474.    DBOOL   SaveExitCodeFile;    // TRUE = DON'T DELETE EXIT CODE FILE
  475.    DBOOL   ExitCodeHandling;    // TRUE = EXIT CODE HANDLING ENABLED
  476.    DWORD   FailExitCodeRelation;    // EXIT CODE RELATION TO DEFINE FAILURE
  477.    DWORD   FailExitCode;    // EXIT CODE TO DEFINE FAILURE
  478.    DBOOL   FailNotify;    // TRUE = NOTIFY USER IF JOB FAILS
  479.    CHAR    FailNotifyUser [AQM_USER_SIZE];    // USER TO NOTIFY (OR EMPTY FOR OWNER)
  480.    DBOOL   FailReportEvent;    // TRUE = REPORT EVENT IF JOB FAILS
  481.    CHAR    FailureJob [AQM_FNAME_SIZE];    // JOB TO EXECUTE IF JOB FAILS (OR EMPTY FOR NONE)
  482.    CHAR    Pad5 [AQM_FNAME_PAD];    // PADDING
  483.    CHAR    SuccessJob [AQM_FNAME_SIZE];    // JOB TO EXECUTE IF JOB SUCCEEDS (OR EMPTY FOR NONE)
  484.    CHAR    Pad6 [AQM_FNAME_PAD];    // PADDING
  485.    CHAR    Queue [AQM_QNAME_SIZE];    // NAME OF QUEUE JOB IS IN
  486.    CHAR    Pad7 [AQM_QNAME_PAD];    // PADDING
  487.    DBOOL   Paused;    // TRUE = JOB IS PAUSED (EXECUTING ONLY)
  488.     BYTE Expansion [1024];
  489.    } AQM_JOB_INFO;
  490.  
  491.  
  492.  
  493.  
  494. //**
  495. //**  AQM_QUEUE_INFO STRUCTURE
  496. //**
  497.  
  498. typedef struct _AQM_QUEUE_INFO
  499.    {
  500.    CHAR    Name [AQM_QNAME_SIZE];    // NAME OF QUEUE
  501.    CHAR    Pad1 [AQM_QNAME_PAD];    // PADDING
  502.    CHAR    Descr [AQM_QDESCR_SIZE];    // QUEUE DESCRIPTION
  503.    DBOOL   Stopped;    // TRUE = QUEUE IS STOPPED
  504.    DBOOL   Closed;    // TRUE = QUEUE IS CLOSED
  505.    DWORD   Priority;    // PRIORITY WITHIN PRODUCT
  506.    DWORD   PendJobsLimit;    // PENDING JOBS LIMIT
  507.    DWORD   ExecJobsLimit;    // EXECUTING JOBS LIMIT
  508.    DWORD   RetainMinutes;       // AMOUNT OF TIME QUEUE RETAINS COMPLETED JOBS
  509.    DBOOL   AutoOpenClose;    // TRUE=AUTO-OPEN/CLOSE ENABLED
  510.    DWORD   AutoOpenMinute;    // MINUTE OF DAY TO AUTOMATICALLY OPEN QUEUE
  511.    DWORD   AutoCloseMinute;    // MINUTE OF DAY TO AUTOMATICALLY CLOSE QUEUE
  512.    DBOOL   AutoStartStop;    // TRUE=AUTO-START/STOP ENABLED
  513.    DWORD   AutoStartMinute;    // MINUTE OF DAY TO AUTOMATICALLY START QUEUE
  514.    DWORD   AutoStopMinute;    // MINUTE OF DAY TO AUTOMATICALLY STOP QUEUE
  515.    unsigned long QueueQueueNumber;    // Queue number for queue (preserved across restarts)
  516.    CHAR    Creator [AQM_ACCOUNT_NAME_SIZE];    // ACCOUNT NAME OF QUEUE'S CREATOR
  517.    FILETIME TimeCreated;    // TIME CREATED
  518.    DWORD ExecutingJobs;
  519.    DWORD   JobsCompleted;    // TOTAL JOBS COMPLETED
  520.    LARGE_INTEGER CpuTime;       // COMPLETED JOBS CPU TIME
  521.    BYTE Expansion [512];
  522.    } AQM_QUEUE_INFO;
  523.  
  524. //**  AQM_SYSTEM_INFO STRUCTURE
  525. //**
  526. //**  This structure holds information about a system, which is a container
  527. //**  object that holds all queues.  The information in this structure applies
  528. //**  to the entire AQM server.
  529. //**
  530.  
  531. typedef struct _AQM_SYSTEM_INFO
  532.    {
  533.     // ... FILENAME OF PRIMARY SETTINGS FILE
  534.    CHAR     PrimarySettingsFile [AQM_FNAME_SIZE];
  535.    CHAR     Pad1 [AQM_FNAME_PAD];    // PADDING
  536.  
  537.     // ... FILENAME OF BACKUP SETTINGS FILE
  538.    CHAR     BackupSettingsFile [AQM_FNAME_SIZE];
  539.    CHAR     Pad2 [AQM_FNAME_PAD];    // PADDING
  540.  
  541.    CHAR     LogFile [AQM_FNAME_SIZE];    // ... FILENAME OF LOG FILE
  542.    CHAR     Pad3 [AQM_FNAME_PAD];    // PADDING
  543.    DWORD    LogFileSizeLimit;    // ... LOG FILE SIZE LIMIT IN KBYTES
  544.    DWORD    LogFileSeqNumber;    // ... NEXT LOG FILE SEQUENCE NUMBER
  545.  
  546.    DWORD    JobNumberWrapsAfter;    // ... JOB NUMBER WRAPS TO 1 AFTER THIS NUMBER
  547.  
  548.    CHAR     DefaultQueue [AQM_QNAME_SIZE];    // ... NAME OF DEFAULT QUEUE
  549.    CHAR     Pad4 [AQM_QNAME_PAD];    // PADDING
  550.  
  551.    DWORD    PriorityQuantum;    // ... PRIORITY QUANTUM (MSEC)
  552.  
  553.    DWORD    SystemBootThreshold;    // ... SYSTEM BOOT THRESHOLD (SECONDS)
  554.  
  555.    DWORD    CheckpointSaveInterval;    // ... CHECKPOINT SAVE INTERVAL IN SECONDS
  556.  
  557.    DWORD    LastJobNumberUsed;    // ... LAST JOB NUMBER USED
  558.  
  559.    DWORD    TotalExecJobs;    // ... TOTAL EXECUTING JOBS
  560.    DWORD    MaxExecJobs;    // ... MAX ALLOWED EXECUTING JOBS
  561.    
  562.    DWORD    TotalJobProcesses;    // ... TOTAL JOB PROCESSES
  563.    DWORD    MaxJobProcesses;    // ... MAX ALLOWED JOB PROCESSES
  564.  
  565.    DBOOL    StartupComplete;    // ... TRUE = STARTUP COMPLETE (STARTUP JOBS DONE)
  566.  
  567.    DBOOL    StartupErrors;    // ... TRUE = THERE WERE STARTUP ERRORS
  568.  
  569.     // ... STARTUP JOBS
  570.    AQM_STARTUP_JOB StartupJob [AQM_MAX_STARTUP_JOBS];
  571.  
  572.    } AQM_SYSTEM_INFO;
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579. //**
  580. //**  CONSTANT DEFINITIONS
  581. //**
  582.  
  583. #define AQM_API_DEFAULT_TIMEOUT_MSEC (30000)
  584.  
  585.  
  586.  
  587. //**
  588. //**
  589. //**  FUNCTIONS PROTOTYPES
  590. //**
  591. //**  Parameters marked with a ">" character are input parameters.
  592. //**  Parameters marked with a "*" character are output parameters passed by
  593. //**  reference, which means that the actual value specified for the parameter
  594. //**  must be a pointer to a variable which receives the value.  For example:
  595. //**
  596. //**         DWORD* rJobNumber  // * JOB NUMBER OF SUBMITTED JOB
  597. //**
  598. //**  In this example, the caller must pass the address of a DWORDvariable to
  599. //**  function.  If the function returns with success status, then the variable
  600. //**  will contain the job number of the submitted job.  Note that if the
  601. //**  function fails, then the value of the variable is undefined.
  602. //**
  603.  
  604.  
  605. BOOL    AqmSetTimeout (    // SET TIMEOUT FOR AQM OPERATIONS
  606.         DWORD   Timeout);    // > TIMEOUT IN MSEC
  607.  
  608. DWORD   AqmCreateQueue (    // CREATE A QUEUE
  609.         LPCSTR  ServerName,    // > SERVER NAME
  610.         AQM_CREATE_QUEUE_PARAMS * pParams);    // > POINTER TO PARAMETERS
  611.  
  612. DWORD   AqmDeleteQueue (    // DELETE A QUEUE
  613.         LPCSTR  ServerName,    // > SERVER NAME
  614.         LPCSTR  QueueName,    // > QUEUE NAME
  615.         DBOOL   AbortExecutingJobs);    // > TRUE = ABORT ANY EXECUTING JOBS IN THE QUEUE
  616.  
  617. DWORD   AqmGetSystemInfo (    // GET SYSTEM INFO
  618.         LPCSTR  ServerName,    // > SERVER NAME
  619.         AQM_SYSTEM_INFO **rpSI);    // * POINTER TO SYSTEM INFO
  620.  
  621. DWORD    AqmGetSystemSD (LPCSTR ServerName, SECURITY_DESCRIPTOR** rpSD);
  622.  
  623. DWORD   AqmGetQueueInfo (    // GET QUEUE INFO
  624.         LPCSTR  ServerName,    // > SERVER NAME
  625.         LPCSTR  QueueName,    // > QUEUE NAME
  626.         AQM_QUEUE_INFO **rpQI);    // * POINTER TO QUEUE INFO
  627.  
  628. DWORD   AqmGetJobInfo (    // GET JOB INFO
  629.         LPCSTR  ServerName,    // > SERVER NAME
  630.         DWORD   JobNumber,    // > JOB NUMBER
  631.         AQM_JOB_INFO **rpJI);    // * POINTER TO JOB INFO BUFFER
  632.  
  633. DWORD   AqmGetAllQueuesInfo (    // GET ALL QUEUES
  634.         LPCSTR  ServerName,    // > SERVER NAME
  635.         AQM_QUEUE_INFO **rpQueuesInfo,    // * POINTER TO QUEUES INFO BUFFER
  636.         DWORD  *rNumQueues);    // * NUMBER OF QUEUES
  637.  
  638. DWORD   AqmGetQueueAndJobsInfo (    // GET QUEUE AND JOBS INFO
  639.         LPCSTR  ServerName,    // > SERVER NAME
  640.         LPCSTR  QueueName,    // > QUEUE NAME
  641.         AQM_QUEUE_INFO **rpQI,    // * POINTER TO QUEUE INFO BUFFER
  642.         CHAR* InfoFileName,
  643.         DWORD  *rNumJobs);    // * NUMBER OF JOBS
  644.  
  645. DWORD   AqmGetExecutingJobsInfo (    // GET EXECUTING JOBS INFO
  646.         LPCSTR  ServerName,    // > SERVER NAME
  647.         CHAR* InfoFileName,
  648.         DWORD  *rNumJobs);    // * NUMBER OF JOBS
  649.  
  650. DWORD   AqmSetLogSizeLimit (    // SET LOG SIZE LIMIT
  651.         LPCSTR  ServerName,    // > SERVER NAME
  652.         DWORD   LogSizeLimit);    // > LOG SIZE LIMIT (KB)
  653.  
  654. DWORD   AqmSetMaxExecJobs (    // SET MAX EXEC JOBS FOR SYSTEM
  655.         LPCSTR  ServerName,    // > SERVER NAME
  656.         DWORD   MaxExecJobs);    // > MAX EXECUTING JOBS
  657.  
  658. DWORD   AqmSetMaxJobProcesses (    // SET MAX JOB PROCESSES FOR SYSTEM
  659.         LPCSTR  ServerName,    // > SERVER NAME
  660.         DWORD   MaxJobProcesses);    // > MAX JOB PROCESSES
  661.  
  662. DWORD   AqmSetLogFile (    // SET LOG FILE
  663.         LPCSTR  ServerName,    // > SERVER NAME
  664.         LPCSTR  LogFile);    // > LOG FILE
  665.  
  666. DWORD   AqmClearDefaultQueue (    // CLEAR DEFAULT QUEUE
  667.         LPCSTR  ServerName);    // > SERVER NAME
  668.  
  669. DWORD   AqmSetDefaultQueue (    // SET DEFAULT QUEUE
  670.         LPCSTR  ServerName,    // > SERVER NAME
  671.         LPCSTR  QueueName);    // > QUEUE NAME
  672.  
  673. DWORD   AqmSetStartupJob (    // SET STARTUP JOB
  674.         LPCSTR  ServerName,    // > SERVER NAME
  675.         DWORD   Number,    // > JOB NUMBER (0-BASED)
  676.         AQM_STARTUP_JOB * pJob);    // > POINTER TO STARTUP JOB INFO
  677.  
  678. DWORD   AqmClearStartupJob (    // CLEAR STARTUP JOB
  679.         LPCSTR  ServerName,    // > SERVER NAME
  680.         DWORD   Number);    // > JOB NUMBER (0-BASED)
  681.  
  682. DWORD   AqmSubmitJob (    // SUBMIT A JOB
  683.         LPCSTR  ServerName,    // > SERVER NAME
  684.         AQM_SUBMIT_JOB_PARAMS * pParams,    // > POINTER TO PARAMETERS
  685.         DWORD*  rJobNumber);    // * JOB NUMBER OF SUBMITTED JOB
  686.  
  687. DWORD   AqmRequeueJob (    // REQUEUE A JOB
  688.         LPCSTR  ServerName,    // > SERVER NAME
  689.         DWORD   JobNumber,    // > JOB NUMBER
  690.         LPCSTR  QueueName);    // > NAME OF QUEUE TO REQUEUE JOB TO
  691.  
  692. DWORD   AqmCancelJob (    // CANCEL A JOB
  693.         LPCSTR  ServerName,    // > SERVER NAME
  694.         DWORD   JobNumber);    // > JOB NUMBER
  695.  
  696. DWORD   AqmAbortJob (    // ABORT AN EXECUTING JOB
  697.         LPCSTR  ServerName,    // > SERVER NAME
  698.         DWORD   JobNumber);    // > JOB NUMBER
  699.  
  700. DWORD   AqmPauseJob (    // PAUSE AN EXECUTING JOB
  701.         LPCSTR  ServerName,    // > SERVER NAME
  702.         DWORD   JobNumber);    // > JOB NUMBER
  703.  
  704. DWORD   AqmUnpauseJob (    // UNPAUSE A PAUSED EXECUTING JOB
  705.         LPCSTR  ServerName,    // > SERVER NAME
  706.         DWORD   JobNumber);    // > JOB NUMBER
  707.  
  708. DWORD   AqmSetQueueDescription (    // SET QUEUE DESCRIPTION
  709.         LPCSTR  ServerName,    // > SERVER NAME
  710.         LPCSTR  QueueName,    // > QUEUE NAME
  711.         LPCSTR  Description );    // > POINTER TO DESCRIPTION STRING
  712.  
  713. DWORD   AqmSetQueuePriority (    // SET QUEUE PRIORITY
  714.         LPCSTR  ServerName,    // > SERVER NAME
  715.         LPCSTR  QueueName,    // > QUEUE NAME
  716.         DWORD   Priority );    // > QUEUE PRIORITY (0 - 255)
  717.  
  718. DWORD   AqmSetQueueMaxPend (    // SET QUEUE MAX PENDING JOBS VALUE
  719.         LPCSTR  ServerName,    // > SERVER NAME
  720.         LPCSTR  QueueName,    // > QUEUE NAME
  721.         DWORD   MaxPend );    // > MAX PENDING JOBS
  722.  
  723. DWORD   AqmSetQueueMaxExec (    // SET QUEUE MAX EXECUTING JOBS VALUE
  724.         LPCSTR  ServerName,    // > SERVER NAME
  725.         LPCSTR  QueueName,    // > QUEUE NAME
  726.         DWORD   MaxExec );    // > MAX EXECUTING JOBS
  727.  
  728. DWORD   AqmSetQueueRetainTime (    // SET QUEUE RETAIN JOBS TIME
  729.         LPCSTR  ServerName,    // > SERVER NAME
  730.         LPCSTR  QueueName,    // > QUEUE NAME
  731.         DWORD   RetainMinutes );    // > MINUTES TO RETAIN COMPLETED JOBS
  732.  
  733. DWORD   AqmSetQueueAutoStartStop (    // SET QUEUE AUTO START/STOP TIMES
  734.         LPCSTR  ServerName,    // > SERVER NAME
  735.         LPCSTR  QueueName,    // > QUEUE NAME
  736.         DWORD   AutoStartMinute,    // > AUTO START MINUTE (0 FOR 12:00 AM, 61 FOR 1:01 AM)
  737.         DWORD   AutoStopMinute);    // > AUTO STOP MINUTE (0 FOR 12:00 AM, 61 FOR 1:01 AM)
  738.  
  739. DWORD   AqmStartQueue (    // START A QUEUE
  740.         LPCSTR  ServerName,    // > SERVER NAME
  741.         LPCSTR  QueueName );    // > QUEUE NAME
  742.  
  743. DWORD   AqmStopQueue (    // STOP A QUEUE
  744.         LPCSTR  ServerName,    // > SERVER NAME
  745.         LPCSTR  QueueName );    // > QUEUE NAME
  746.  
  747. DWORD   AqmSetQueueAutoOpenClose (    // SET QUEUE AUTO OPEN/CLOSE TIMES
  748.         LPCSTR  ServerName,    // > SERVER NAME
  749.         LPCSTR  QueueName,    // > QUEUE NAME
  750.         DWORD   AutoOpenMinute,    // > AUTO OPEN MINUTE (0 FOR 12:00 AM, 61 FOR 1:01 AM)
  751.         DWORD   AutoCloseMinute);    // > AUTO CLOSE MINUTE (0 FOR 12:00 AM, 61 FOR 1:01 AM)
  752.  
  753. DWORD   AqmOpenQueue (    // OPEN A QUEUE
  754.         LPCSTR  ServerName,    // > SERVER NAME
  755.         LPCSTR  QueueName );    // > QUEUE NAME
  756.  
  757. DWORD   AqmCloseQueue (    // CLOSE A QUEUE
  758.         LPCSTR  ServerName,    // > SERVER NAME
  759.         LPCSTR  QueueName );    // > QUEUE NAME
  760.  
  761. BOOL    AqmGetErrorText (    // GET MESSAGE TEXT FOR AN AQM ERROR CODE
  762.         DWORD   ErrorCode,    // > ERROR CODE RETURNED BY AN AQM API FUNCTION
  763.         LPSTR  *rpMessage );    // * POINTER TO MESSAGE (MUST BE FREED BY CALLER)
  764.  
  765. DWORD   AqmCheckSystemAccess (    // CHECK ACCESS TO A SYSTEM
  766.         LPCSTR  ServerName,    // > SERVER NAME
  767.         ACCESS_MASK AccessDesired,    // > ACCESS DESIRED
  768.         BOOL *  rAccessGranted);    // * TRUE = ACCESS GRANTED
  769.  
  770. DWORD   AqmCheckQueueAccess (    // CHECK ACCESS TO A QUEUE
  771.         LPCSTR  ServerName,    // > SERVER NAME
  772.         LPCSTR  QueueName,    // > QUEUE NAME
  773.         ACCESS_MASK AccessDesired,    // > ACCESS DESIRED
  774.         BOOL *  rAccessGranted);    // * TRUE = ACCESS GRANTED
  775.  
  776. DWORD   AqmCheckJobAccess (    // CHECK ACCESS TO A JOB
  777.         LPCSTR  ServerName,    // > SERVER NAME
  778.         DWORD   JobNumber,    // > JOB NUMBER
  779.         ACCESS_MASK AccessDesired,    // > ACCESS DESIRED
  780.         BOOL *  rAccessGranted);    // * TRUE = ACCESS GRANTED
  781.  
  782. DWORD AqmDumpInternalQueues (void);
  783.  
  784. #ifndef _16BIT_
  785. DWORD   AqmSetSystemSecurity (    // SET SECURITY DESCRIPTOR FOR SYSTEM
  786.         LPCSTR  ServerName,    // > SERVER NAME
  787.         PSECURITY_DESCRIPTOR pSD);    // > POINTER TO SELF-RELATIVE SECURITY DESCRIPTOR
  788.  
  789. DWORD   AqmSetQueueSecurity (    // SET SECURITY DESCRIPTOR FOR A QUEUE
  790.         LPCSTR  ServerName,    // > SERVER NAME
  791.         LPCSTR  Queue,    // > QUEUE NAME
  792.         PSECURITY_DESCRIPTOR pSD);    // > POINTER TO SELF-RELATIVE SECURITY DESCRIPTOR
  793.  
  794. DWORD   AqmSetJobSecurity (    // SET SECURITY DESCRIPTOR FOR A JOB
  795.         LPCSTR  ServerName,    // > SERVER NAME
  796.         DWORD   JobNumber,    // > JOB NUMBER
  797.         PSECURITY_DESCRIPTOR pSD);    // > POINTER TO SELF-RELATIVE SECURITY DESCRIPTOR
  798. #endif //_16BIT_
  799.  
  800.  
  801. //**
  802. //**  REVERT TO DEFAULT PACKING
  803. //**
  804.  
  805. #pragma pack()
  806.