Objectty.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:12k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // *************************************************************************
  2. //
  3. //  File: OBJECTTY.H
  4. //
  5. //  Copyright (c) 1994 - 1999 Microsoft Corp.
  6. //
  7. //  This is the header file for the obejctity engine. The objectity
  8. //  engine is the core of the SMS API set.
  9. //
  10. //  This file contains externally visible structures, and certain manifests
  11. //  needed by them.
  12. //
  13. //
  14. // *************************************************************************
  15. //
  16. #ifndef _OBJECTITY_H_
  17. #define _OBJECTITY_H_
  18. // ====================================================================
  19. //
  20. //      Manifests.
  21. //
  22. // ====================================================================
  23. typedef DWORD   SMS_STATUS;         // API return codes are all of this type.
  24. #define F_ANY   0                   // Indicates any folder type.
  25. // ====================================================================
  26. //  Scalar values can be strings, integers (DWORDs), time, or binary.
  27. //NOTE: binary not yet implemented.
  28. // ====================================================================
  29. typedef enum {
  30.     SCALAR_STRING,
  31.     SCALAR_INT,
  32.     SCALAR_TIME,
  33.     SCALAR_BINARY
  34. } SCALARTYPE;
  35. // ====================================================================
  36. //      SCALAR
  37. //  This structure is used by the application and the engine to
  38. //  communicate a scalar's details.
  39. //
  40. //  All scalars have a type (SCALARTYPE), a name (a character string),
  41. //  and a value, which is determined by the scalar's type.
  42. //  There are separate fields here for the value in all its guises.
  43. //  Additionally, if the scalar is a string or a binary, a length
  44. //  field indicates the datum's size.
  45. //
  46. //  This length field can also be set by the application when
  47. //  retrieving a scalar. In this case it indicates the size of the
  48. //  receiving buffer (string and binary).
  49. //
  50. // ====================================================================
  51. typedef struct _SCALAR {
  52.     SCALARTYPE scType;          // string, int, time etc
  53.     char *pszName;              // Scalar name.
  54.     char *pszValue;             // Scalar value as a string.
  55.     DWORD dwValue;              // Scalar value as a DWORD.
  56.     time_t tValue;              // Scalar value as a time.
  57.     void *pValue;               // Scalar as a binary.
  58.     DWORD dwLen;                // Size of the scalar value either as a string
  59.                                 // or as a binary.
  60.                                 // If a get scalar API is called with NULL
  61.                                 // for the appropriate value, then the
  62.                                 // length of that value is returned here.
  63.     BOOL bStringEquivalence;    // True if a string exists for an INT or
  64.                                 // TIME scalar. String will be in pszValue.
  65.     DWORD fAccess;              // Access mode.
  66. } SCALAR;
  67. // --------------------------------------------------------------------
  68. // Manifests used in filter token APIs.
  69. // --------------------------------------------------------------------
  70. #define OTT_AT_START    -1              // Token will be inserted at start of
  71.                                         // expression.
  72. #define OTT_AT_END      -2              // Token will be appended to end of
  73.                                         // expression.
  74. // ====================================================================
  75. //
  76. //  Return codes from the objectity engine.
  77. //
  78. // ====================================================================
  79. #define OTT_OK                      0
  80. #define OTT_MORE_DATA               1
  81. #define OTT_NO_MORE_DATA            2
  82. #define OTT_FOLDER_NO_UPDATE        3
  83. #define OTT_DUPLICATE_CONTAINER_ID  4
  84. #define OTT_DUPLICATE_FOLDER_ID     5
  85. #define OTT_DUPLICATE_FILTER_ID     6
  86. #define OTT_SCALAR_NO_UPDATE        7
  87. #define OTT_SCALAR_WRONG_TYPE       8
  88. #define OTT_INVALID_CONTAINER_ID    9
  89. #define OTT_INVALID_FOLDER_ID       10
  90. #define OTT_INVALID_FILTER_ID       11
  91. #define OTT_CONTAINER_NO_UPDATE     12
  92. #define OTT_PARAMETER_ERROR         13
  93. #define OTT_UNSUPPORTED             14
  94. #define OTT_NOT_FOUND               15
  95. #define OTT_PARENT_NOT_FOUND        16
  96. #define OTT_CANT_DELETE             17
  97. #define OTT_NEW_FOLDER              18
  98. // Error when attempting to multiply link a folder.
  99. #define OTT_FOLDER_LINKED           19
  100. //
  101. // Filter operations.
  102. #define OTT_RANGE_ERROR             20
  103. #define OTT_DUPLICATE_FILTER        21
  104. // Container operations that are out of sequence.
  105. #define OTT_CONTAINER_NOT_POPULATED 22
  106. #define OTT_CONTAINER_POPULATED     23
  107. // Only persistent filters have scalars.
  108. #define OTT_FILTER_NOT_PERSISTENT   24
  109. // Error return if the connection handle of a filter doesn't match
  110. // that of a container to which the filter is being applied.
  111. #define OTT_INVALID_CONNECTION_HANDLE 25
  112. #define OTT_INVALID_FILTER_TYPE     26
  113. // Folder's can't be unlinked if there are multiple handles
  114. // to the same object.
  115. #define OTT_IN_USE_BY_OTHER         27
  116. // The last one, user codes start from here to give
  117. // leaway for future expansion.
  118. //
  119. #define OTT_END                     50
  120. // ====================================================================
  121. //
  122. //  Other manifests.
  123. //
  124. // ====================================================================
  125. // Access rights to containers/folders/scalars.
  126. // -------------------------------------------------------------
  127. #define ACCESS_READ                 0x0001
  128. #define ACCESS_CREATE               0x0002
  129. #define ACCESS_MODIFY               0x0004
  130. #define ACCESS_DELETE               0x0008
  131. // Modification flags
  132. // ------------------
  133. #define MOD_UNMODIFIED              0x0000
  134. #define MOD_CREATED                 0x0001
  135. #define MOD_DELETED                 0x0002
  136. #define MOD_DENY_ACCESS             0x0004
  137. // Tokens are ANDed or ORed into filters.
  138. // -------------------------------------------------------------
  139. typedef enum { OP_AND = 0x03, OP_OR = 0x02 } ANDOR;
  140. // Options for Rewind on a folder.
  141. // -------------------------------------------------------------
  142. #define RW_FOLDER               0x080000000       // Rewind folder lists.
  143. #define RW_SCALAR               0x040000000       // Rewind scalar list only.
  144. #define RW_ALL                  (RW_FOLDER | RW_SCALAR) // Rewind both.
  145. // These structures are used to retrieve container and filter
  146. // information from the engine.
  147. // These are used in enumertaing containers and filters.
  148. // -------------------------------------------------------------
  149. #define BUFF_SIZE 256
  150. // An objectity is either a container or a folder.
  151. // -------------------------------------------------------------
  152. typedef enum {
  153.     T_CONTAINER,
  154.     T_FOLDER
  155. } BASETYPE;
  156. // ====================================================================
  157. //
  158. //  The structures.
  159. //
  160. // ====================================================================
  161. //
  162. // NOTIFY structure.
  163. //
  164. // This struct used for async population. Enables async operation to
  165. // use either event handle or window handle/message.
  166. typedef struct _NOTIFY {
  167.     DWORD dwFreq;       // Notify after this number of rows retrieved.
  168.     HANDLE hEvent;      // Event handle if type=POP_EVENT
  169.     HWND hwnd;          // hwnd if type=POP_WINDOW
  170.     UINT uiMsg;         // Message if type=POP_WINDOW
  171. } NOTIFY;
  172. //
  173. // TOKEN structure.
  174. //
  175. #define TOKEN_STRING_SIZE   4608    // 4.5k
  176. // The manifest is this large because it can used in the package inventory
  177. // rules. In these rules we are allowed to define upto four string fields,
  178. // each of which can be 1k long. This size allows us to accommodate it all.
  179. typedef struct _TOKEN {
  180.     INT tokenType;                  // Returns: type of token (ie USER, AND,
  181.                                         // OR, LEFT_PAREN, RIGHT_PAREN).
  182.     char  szName[BUFF_SIZE];
  183.     char  szValue[BUFF_SIZE];
  184.     DWORD dwOp;
  185.     char  szArchitecture[BUFF_SIZE];
  186.     char  szGroupClass[BUFF_SIZE];
  187.     char  szAttributeName[BUFF_SIZE];
  188.     char  szTokenString[TOKEN_STRING_SIZE]; // Display form of the token.
  189.     BOOL  bIndent;                  // Request display indentation.
  190. } TOKEN;
  191. //
  192. // FILTER_INFO
  193. //
  194. //  This structure is used to provide the user a filter template.
  195. //  An array of these structures is returned via the SmsEnumFilters API.
  196. //  This returns information about all filters registered with the engine.
  197. //
  198. //  It is considered that the user will use this information in order to
  199. //  display information. The information that is provided here is:
  200. //  a) the type and tag of the filter, b) the fields that comprise a
  201. //  particular filter's tokens, and c) the names that should be used
  202. //  for these fields for display purposes. That is, for a GUI application,
  203. //  they provide the labels for edit controls. If a field in the structure
  204. //  is empty (ie NULL) then that field is not used for that particular
  205. //  filter.
  206. //
  207. //  As an example consider a group filter. If the developer wants to
  208. //  present, say, a dialogue box to the end user, they would use the
  209. //  following fields: szName, szValue. Looking at the template they
  210. //  will see that the strings associated with these fields are 'Name'
  211. //  and 'GroupClass'. They would thus display a dialogue box with
  212. //  two edit controls, the first labelled 'Name', the second labelled
  213. //  'GroupClass. Since these are the only two fields that are filled in
  214. //  no other fields should be presented to the user.
  215. //
  216. //
  217. //  Job filter:
  218. //      szName          = 'Type'
  219. //      szValue         = 'Value'
  220. //      szOperator      = 'Operator'
  221. //
  222. //  Machine filter:
  223. //      szArchitecture  = 'Architecture'
  224. //      szGroupClass    = 'GroupClass'
  225. //      szAttributeName = 'Attribute name'
  226. //      szValue         = 'Value'
  227. //      szOperator      = 'Operator'
  228. //
  229. //  Site filter:
  230. //      szName          = 'Type'
  231. //      szValue         = 'Site code'
  232. //      szOperator      = 'Operator'
  233. //
  234. //  Group filter:
  235. //      szName          = 'Name'
  236. //      szValue         = 'GroupClass'
  237. //      szOperator      = 'Operator'
  238. //
  239. //  Architecture filter:
  240. //      szName          = 'Name'
  241. //      szValue         = 'Architecture'
  242. //      szOperator      = 'Operator'
  243. //
  244. //  Package filter:
  245. //      szName          = 'Type'
  246. //      szValue         = 'Value'
  247. //      szOperator      = 'Operator'
  248. //
  249. //  Attribute filter:
  250. //      szArchitecture  = 'Architecture'
  251. //      szGroupClass    = 'GroupClass'
  252. //      szAttributeName = 'Attribute name'
  253. //
  254. //  SiteLimit filter:
  255. //      szName          = 'Site'
  256. //      szValue         = 'Domain'
  257. //
  258. //
  259. #define NAME_SIZE   52
  260. typedef struct _FILTER_INFO {
  261.     char  szTag[NAME_SIZE];         // Filter tag (eg "Architecture filter").
  262.     DWORD filterType;               // Type number (eg ARCHITECTURE_FILTER).
  263.     // The filter descriptor information.
  264.     char szName[NAME_SIZE];
  265.     char szValue[NAME_SIZE];
  266.     char szOperator[NAME_SIZE];
  267.     char szArchitecture[NAME_SIZE];
  268.     char szGroupClass[NAME_SIZE];
  269.     char szAttributeName[NAME_SIZE];
  270. } FILTER_INFO;
  271. // This is what the user gets as a description of a scalar.
  272. // Currently this is only used internally in objectty.cpp (RegisterObjectity).
  273. // I'll proably make this externally visible though very soon now.
  274. typedef struct _SCALAR_INFO {
  275.     char szName[BUFF_SIZE];         // Scalar's name.
  276.     SCALARTYPE scType;              // Type: SCALAR_STRING, INT, TIME etc
  277.     DWORD fAccess;                  // Access mode: ACCESS_READ, MODIFY etc
  278. } SCALAR_INFO;
  279. // Now the C struct form of CFolderInfo. This is what we'll
  280. // return in a call to DescribeFolder().
  281. // This is created during a call to RegisterObjectity. It is stored
  282. // in the CFolderInfo object, itself held in the Folder registry.
  283. // 29-Sep-94. Expanded to deal with Containers as well as folders.
  284. typedef struct _FOLDER_INFO {
  285.     BASETYPE tObjectity;            // T_CONTAINER or T_FOLDER.
  286.     char *pszTag;
  287.     DWORD dwTag;
  288.     DWORD ctFolders;
  289.     DWORD *pFolderTags;
  290.     DWORD ctFilters;
  291.     DWORD *pFilterTags;
  292.     DWORD ctScalars;                // Not used by for containers.
  293.     SCALAR_INFO *pScalars;          // ditto.
  294.     void *pNewFunc;                 // needs cast!! Used when registering
  295.                                     // a container. This is a pointer to
  296.                                     // the container's 'new' function.
  297. } FOLDER_INFO;
  298. #endif  // _OBJECTITY_H_
  299. /* EOF: objectty.h */