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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * Copyright (c) Microsoft Corporation.  All rights reserved.
  4.  *
  5.  * msmqext.h
  6.  *
  7.  *****************************************************************************
  8.  *
  9.  * MSMQ Extension API constants and function prototypes file                 
  10.  *
  11.  */
  12. #ifndef _MSMQEXT_H_
  13. #define _MSMQEXT_H_
  14. /****************************  C interface.  Always present.  ******************/
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. /* New error and information codes: */
  19. #define MQ_ERROR_CORRUPTED_EXTENSION_BUFFER      (MQ_ERROR + 0x100)
  20. #define MQ_ERROR_EXTENSION_FIELD_NOT_FOUND       (MQ_ERROR + 0x101)
  21. #define MQ_ERROR_ALLOC_FAIL                      (MQ_ERROR + 0x102)
  22. typedef enum { EP_CURRENT_FIELD,
  23.                EP_NEXT_FIELD,
  24.                EP_NEXT_KEY_FIELD } NAVTYPE;
  25. typedef const GUID *PCGUID;
  26. /*
  27. // EPOpen
  28. //     Creates new extension, unpacks the supplied extension buffer.
  29. //
  30. //   Parameters:
  31. //     OUTPUT PHANDLE phExtension
  32. //     INPUT  void*   pExtBuffer
  33. //     INPUT  DWORD   dwExtBufLength
  34. //
  35. //   Returns:
  36. //     MQ_OK
  37. //     MQ_ERROR_INVALID_PARAMETER
  38. //     MQ_ERROR_CORRUPTED_EXTENSION_BUFFER
  39. //     MQ_ERROR_ALLOC_FAIL
  40. //
  41. //   Remarks:  1. If pExtBuffer is NULL of dwExtBufLength is 0,
  42. //                empty extension is created.
  43. */
  44. HRESULT EPOpen(PHANDLE phExtension, void *pExtBuffer, DWORD dwExtBufLength);
  45. /*
  46. // EPClose
  47. //     Frees extension handle and associated memory.
  48. //
  49. //   Parameters:
  50. //     INOUT PHANDLE hExtension
  51. //
  52. //   Returns:
  53. //     MQ_OK
  54. //     MQ_ERROR_INVALID_PARAMETER
  55. //     MQ_ERROR_INVALID_HANDLE
  56. */
  57. HRESULT EPClose(PHANDLE phExtension);
  58. /*
  59. // EPGetBuffer
  60. //     Packs extension into the supplied buffer.
  61. //
  62. //   Parameters:
  63. //     INPUT HANDLE hExtension
  64. //     INPUT void*  pBuf
  65. //     INPUT PDWORD pdwBufLength   - length of the extension buffer.
  66. //
  67. //   Returns:
  68. //     MQ_OK
  69. //     MQ_ERROR_INVALID_PARAMETER
  70. //     MQ_ERROR_INVALID_HANDLE
  71. //     MQ_ERROR_USER_BUFFER_TOO_SMALL
  72. //
  73. //   Remarks:  1. If the call was successful, *pdwBufLength contains the actual
  74. //                length of the packed extension buffer.
  75. //             2. If MQ_ERROR_USER_BUFFER_TOO_SMALL is returned, *pdwBufLength
  76. //                contains the required buffer length.
  77. */
  78. HRESULT EPGetBuffer(HANDLE hExtension, void *pBuf, PDWORD pdwBufLength);
  79. /*
  80. // EPGet
  81. //     Positions to [and/or retrieves] a requested field.
  82. //
  83. //   Parameters:
  84. //     INPUT  HANDLE  hExtension
  85. //     INPUT  NAVTYPE Directive
  86. //     INOUT  PHANDLE phCursor
  87. //     INOUT  GUID*   pFieldId
  88. //     OUTPUT void*   pFieldData
  89. //     INOUT  PDWORD  pdwDataLength
  90. //
  91. //   Returns:
  92. //     MQ_OK
  93. //     MQ_ERROR_EXTENSION_FIELD_NOT_FOUND
  94. //     MQ_ERROR_INVALID_PARAMETER
  95. //     MQ_ERROR_INVALID_HANDLE
  96. //     MQ_ERROR_USER_BUFFER_TOO_SMALL
  97. //     MQ_ERROR_ALLOC_FAIL
  98. //
  99. //   Remarks:  
  100. //     1.  Directive and *phCursor together define the behavior of the function.
  101. //         If Directive is EP_CURRENT_FIELD, then
  102. //            *phCursor must be a valid non-NULL cursor handle; the field
  103. //            which it points to, will be returned.
  104. //         If Directive is EP_NEXT_FIELD, then
  105. //            if phCursor is NULL or *phCursor is NULL, then
  106. //               The first field's ID and data are returned.
  107. //               if phCursor is not NULL, *phCursor is set to the field.
  108. //            otherwise (phCursor!=NULL and *phCursor!=NULL)
  109. //               *phCursor goes to the next field, if such exists.
  110. //               The field's ID and data are returned.
  111. //         If Directive is EP_NEXT_KEY_FIELD, then
  112. //            if phCursor is NULL or *phCursor is NULL, then
  113. //               The function looks for a first field in extension with
  114. //               FieldID == *pFieldID parameter.
  115. //               If the field is found it's ID and data are returned, and
  116. //               if phCursor is not NULL, *phCursor is set to the field.
  117. //            otherwise (phCursor!=NULL and *phCursor!=NULL)
  118. //               *phCursor goes to the next field with matching ID, if such exists.
  119. //               The field's data is returned.
  120. //     2.  If Directive is EP_NEXT_KEY_FIELD, and field with matching ID doesn't exist,
  121. //         the funciton returns MQ_ERROR_EXTENSION_FIELD_NOT_FOUND and positions the
  122. //         cursor to the field with the next greater ID.
  123. //         If no field at all is available, the cursor is set to NULL, i.e. to the
  124. //         beginning of the extension.
  125. //     3.  If pFieldData parameter is NULL, no data is returned.
  126. //         If pFieldData is not NULL, pdwDataLength must not be NULL.
  127. //     4.  If pdwDataLength is not NULL, it must point to DWORD, which on input must
  128. //         contain the size of buffer pointed by pFieldData (ignored if pFieldData==NULL).
  129. //         On output *pdwDataLength will contain actual length of the FieldData
  130. //         (independent on validity of pFieldData parameter)
  131. //     5.  pFieldID must be non-NULL for Directive==EP_NEXT_KEY_FIELD.  For other
  132. //         directives, if it is non-NULL, it will receive the retrieved field's ID.
  133. */
  134. HRESULT EPGet(HANDLE hExtension, NAVTYPE Directive, PHANDLE phCursor,
  135.                       GUID* pFieldId, void *pFieldData, PDWORD pdwDataLength);
  136. /*
  137. // EPAdd
  138. //     adds a field to extension.
  139. //
  140. //   Parameters:
  141. //     INPUT  HANDLE  hExtension
  142. //     INPUT  PCGUID  pFieldId
  143. //     INPUT  void*   pFieldData
  144. //     INPUT  DWORD   dwDataLength
  145. //     OUTPUT PHANDLE phCursor
  146. //
  147. //   Returns:
  148. //     MQ_OK
  149. //     MQ_ERROR_INVALID_PARAMETER
  150. //     MQ_ERROR_INVALID_HANDLE
  151. //     MQ_ERROR_ALLOC_FAIL
  152. //
  153. //   Remarks:  1. If phCursor is not NULL, the cursor will point to the
  154. //                added field (if the call was successful).
  155. */
  156. HRESULT EPAdd(HANDLE hExtension,PCGUID pFieldID, void *pFieldData, DWORD dwDataLength, 
  157.                                                                         PHANDLE phCursor);
  158. /*
  159. // EPUpdate
  160. //     writes new data to a field.
  161. //
  162. //   Parameters:
  163. //     INPUT HANDLE hExtension
  164. //     INPUT HANDLE hCursor
  165. //     INPUT void*  pFieldData
  166. //     INPUT DWORD  dwDataLength
  167. //
  168. //   Returns:
  169. //     MQ_OK
  170. //     MQ_ERROR_INVALID_PARAMETER
  171. //     MQ_ERROR_INVALID_HANDLE
  172. //     MQ_ERROR_ALLOC_FAIL
  173. */
  174. HRESULT EPUpdate(HANDLE hExtension, HANDLE hCursor, void *pFieldData, DWORD dwDataLength);
  175. /*
  176. // EPDelete
  177. //     deletes a field.
  178. //
  179. //   Parameters:
  180. //     INPUT HANDLE  hExtension
  181. //     INOUT PHANDLE phCursor
  182. //
  183. //   Returns:
  184. //     MQ_OK
  185. //     MQ_ERROR_INVALID_PARAMETER
  186. //     MQ_ERROR_INVALID_HANDLE
  187. //
  188. //   Remarks:  1. After successful deletion the cursor is set to point to the next
  189. //                field after the deleted one.  If the last field is deleted,
  190. //                the cursor is set to NULL, i.e. to the beginning.
  191. */
  192. HRESULT EPDelete(HANDLE hExtension, PHANDLE phCursor);
  193. /*
  194. // EPDeleteAll
  195. //     deletes all fields with matching ID.
  196. //
  197. //   Parameters:
  198. //     INPUT  HANDLE  hExtension
  199. //     INPUT  PCGUID  pFieldsId
  200. //     OUTPUT PHANDLE phCursor
  201. //
  202. //   Returns:
  203. //     MQ_OK
  204. //     MQ_ERROR_INVALID_PARAMETER
  205. //     MQ_ERROR_INVALID_HANDLE
  206. //     MQ_ERROR_EXTENSION_FIELD_NOT_FOUND
  207. //
  208. //   Remarks:  1. If the phCursor is not NULL, *phCursor will point to the next field
  209. //                after all the deleted ones 
  210. //                (even if MQ_ERROR_EXTENSION_FIELD_NOT_FOUND is returned)
  211. //                If the last field is deleted, the cursor is set to NULL.
  212. */
  213. HRESULT EPDeleteAll(HANDLE hExtension, PCGUID pFieldsID, PHANDLE phCursor);
  214. #ifdef __cplusplus
  215. } /* extern "C" */
  216. #endif
  217. #endif /*_MSMQEXT_H_ */