home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / resapi.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  17KB  |  772 lines

  1. /*++
  2.  
  3. Copyright (c) 1995-1997  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     resapi.h
  8.  
  9. Abstract:
  10.  
  11.     This module defines the interface exported by Windows Clusters resources.
  12.  
  13. Revision History:
  14.  
  15. --*/
  16.  
  17. #ifndef _RESAPI_DEFINES_
  18. #define _RESAPI_DEFINES_
  19.  
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23.  
  24. #include "windows.h"
  25. #include "clusapi.h"
  26. #include "stdio.h"
  27.  
  28. #define IN
  29. #define OUT
  30.  
  31. //
  32. // Definitions for entrypoints exported by a resource DLL.
  33. //
  34. #define STARTUP_ROUTINE "Startup"
  35.  
  36. #define CLRES_V1_FUNCTION_SIZE   sizeof(CLRES_V1_FUNCTIONS)
  37. #define CLRES_VERSION_V1_00    0x100
  38.  
  39. #define CLRES_V1_FUNCTION_TABLE( _Name,                     \
  40.                                  _Version,                  \
  41.                                  _Prefix,                   \
  42.                                  _Arbitrate,                \
  43.                                  _Release,                  \
  44.                                  _ResControl,               \
  45.                                  _ResTypeControl            \
  46.                                  )                          \
  47. CLRES_FUNCTION_TABLE _Name = { CLRES_V1_FUNCTION_SIZE,      \
  48.                                _Version,                    \
  49.                                _Prefix##Open,               \
  50.                                _Prefix##Close,              \
  51.                                _Prefix##Online,             \
  52.                                _Prefix##Offline,            \
  53.                                _Prefix##Terminate,          \
  54.                                _Prefix##LooksAlive,         \
  55.                                _Prefix##IsAlive,            \
  56.                                _Arbitrate,                  \
  57.                                _Release,                    \
  58.                                _ResControl,                 \
  59.                                _ResTypeControl }
  60.  
  61. #endif // ifndef _RESAPI_DEFINES_
  62.  
  63. #ifndef _RESAPI_
  64. #define _RESAPI_
  65.  
  66. //
  67. // Define a RESID
  68. //
  69.  
  70. typedef PVOID RESID;
  71.  
  72. //
  73. // Define a RESOURCE_HANDLE
  74. //
  75.  
  76. typedef HANDLE   RESOURCE_HANDLE;
  77.  
  78. //
  79. // Define the Resource Status structure.
  80. //
  81.  
  82. typedef struct RESOURCE_STATUS {
  83.     CLUSTER_RESOURCE_STATE  ResourceState;
  84.     DWORD           CheckPoint;
  85.     DWORD           WaitHint;
  86.     HANDLE          EventHandle;
  87. } RESOURCE_STATUS, *PRESOURCE_STATUS;
  88.  
  89.  
  90. #define ResUtilInitializeResourceStatus( _resource_status_ ) \
  91.     ZeroMemory( _resource_status_, sizeof(RESOURCE_STATUS) )
  92.  
  93. //
  94. // Define Resource DLL callback method for updating the state of a resource.
  95. //
  96.  
  97. typedef
  98. VOID
  99. (_stdcall *PSET_RESOURCE_STATUS_ROUTINE) (
  100.     IN RESOURCE_HANDLE ResourceHandle,
  101.     IN PRESOURCE_STATUS ResourceStatus
  102.     );
  103.  
  104. //
  105. // Define Resource DLL callback method for notifying that a quorum
  106. // resource DLL failed to hold the quorum resource.
  107. //
  108. typedef
  109. VOID
  110. (_stdcall *PQUORUM_RESOURCE_LOST) (
  111.     IN RESOURCE_HANDLE Resource
  112.     );
  113.  
  114. //
  115. // Define Resource DLL callback method for logging events.
  116. //
  117. typedef enum LOG_LEVEL {
  118.     LOG_INFORMATION,
  119.     LOG_WARNING,
  120.     LOG_ERROR,
  121.     LOG_SEVERE
  122. } LOG_LEVEL, *PLOG_LEVEL;
  123.  
  124. typedef
  125. VOID
  126. (_stdcall *PLOG_EVENT_ROUTINE) (
  127.     IN RESOURCE_HANDLE ResourceHandle,
  128.     IN LOG_LEVEL LogLevel,
  129.     IN LPCWSTR FormatString,
  130.     ...
  131.     );
  132.  
  133. typedef
  134. RESID
  135. (_stdcall *POPEN_ROUTINE) (
  136.     IN LPCWSTR ResourceName,
  137.     IN HKEY ResourceKey,
  138.     IN RESOURCE_HANDLE ResourceHandle
  139.     );
  140.  
  141. typedef
  142. VOID
  143. (_stdcall *PCLOSE_ROUTINE) (
  144.     IN RESID Resource
  145.     );
  146.  
  147. typedef
  148. DWORD
  149. (_stdcall *PONLINE_ROUTINE) (
  150.     IN RESID Resource,
  151.     IN OUT LPHANDLE EventHandle
  152.     );
  153.  
  154. typedef
  155. DWORD
  156. (_stdcall *POFFLINE_ROUTINE) (
  157.     IN RESID Resource
  158.     );
  159.  
  160. typedef
  161. VOID
  162. (_stdcall *PTERMINATE_ROUTINE) (
  163.     IN RESID Resource
  164.     );
  165.  
  166. typedef
  167. BOOL
  168. (_stdcall *PIS_ALIVE_ROUTINE) (
  169.     IN RESID Resource
  170.     );
  171.  
  172. typedef
  173. BOOL
  174. (_stdcall *PLOOKS_ALIVE_ROUTINE) (
  175.     IN RESID Resource
  176.     );
  177.  
  178. typedef
  179. DWORD
  180. (_stdcall *PARBITRATE_ROUTINE) (
  181.     IN RESID Resource,
  182.     IN PQUORUM_RESOURCE_LOST LostQuorumResource
  183.     );
  184.  
  185. typedef
  186. DWORD
  187. (_stdcall *PRELEASE_ROUTINE) (
  188.     IN RESID Resource
  189.     );
  190.  
  191. typedef
  192. DWORD
  193. (_stdcall *PRESOURCE_CONTROL_ROUTINE) (
  194.     IN RESID Resource,
  195.     IN DWORD ControlCode,
  196.     IN PVOID InBuffer,
  197.     IN DWORD InBufferSize,
  198.     OUT PVOID OutBuffer,
  199.     IN DWORD OutBufferSize,
  200.     OUT LPDWORD BytesReturned
  201.     );
  202.  
  203. typedef
  204. DWORD
  205. (_stdcall *PRESOURCE_TYPE_CONTROL_ROUTINE) (
  206.     IN LPCWSTR ResourceTypeName,
  207.     IN DWORD ControlCode,
  208.     IN PVOID InBuffer,
  209.     IN DWORD InBufferSize,
  210.     OUT PVOID OutBuffer,
  211.     IN DWORD OutBufferSize,
  212.     OUT LPDWORD BytesReturned
  213.     );
  214.  
  215.  
  216. //***************************************************************
  217. //
  218. // Define the Function Table Format
  219. //
  220. //***************************************************************
  221.  
  222. //
  223. // Version 1 Resource DLL Interface definition
  224. //
  225. typedef struct CLRES_V1_FUNCTIONS {
  226.     POPEN_ROUTINE Open;
  227.     PCLOSE_ROUTINE Close;
  228.     PONLINE_ROUTINE Online;
  229.     POFFLINE_ROUTINE Offline;
  230.     PTERMINATE_ROUTINE Terminate;
  231.     PLOOKS_ALIVE_ROUTINE LooksAlive;
  232.     PIS_ALIVE_ROUTINE IsAlive;
  233.     PARBITRATE_ROUTINE Arbitrate;
  234.     PRELEASE_ROUTINE Release;
  235.     PRESOURCE_CONTROL_ROUTINE ResourceControl;
  236.     PRESOURCE_TYPE_CONTROL_ROUTINE ResourceTypeControl;
  237. } CLRES_V1_FUNCTIONS, *PCLRES_V1_FUNCTIONS;
  238.  
  239. //
  240. // Resource DLL Function Table definition
  241. //
  242. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  243. typedef struct CLRES_FUNCTION_TABLE {
  244.     DWORD   TableSize;
  245.     DWORD   Version;
  246.     union {
  247.         CLRES_V1_FUNCTIONS V1Functions;
  248.     };
  249. } CLRES_FUNCTION_TABLE, *PCLRES_FUNCTION_TABLE;
  250. #pragma warning( default : 4201 ) // nonstandard extension used : nameless struct/union
  251.  
  252. //
  253. // Define the Resource DLL Startup routine. This is the only routine
  254. // that should be exported from a resource DLL.
  255. //
  256.  
  257. //
  258. // Calculate the byte offset of a field in a structure of type type.
  259. //
  260.  
  261. #ifndef FIELD_OFFSET
  262. #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
  263. #endif
  264.  
  265. //
  266. // Property list structures and functions
  267. //
  268. typedef struct RESUTIL_PROPERTY_ITEM {
  269.     LPWSTR  Name;               // Property name
  270.     LPWSTR  KeyName;            // Name of value in cluster database
  271.     DWORD   Format;             // Format: REG_SZ, REG_DWORD, etc.
  272.     DWORD   Default;            // Default value
  273.     DWORD   Minimum;            // Minimum value
  274.     DWORD   Maximum;            // Maximum value
  275.     DWORD   Flags;              // Flags for this item
  276. #define RESUTIL_PROPITEM_READ_ONLY  0x00000001  // Property is read-only
  277. #define RESUTIL_PROPITEM_REQUIRED   0x00000002  // Property is required
  278. #define RESUTIL_PROPITEM_SIGNED     0x00000004  // Numeric property is signed (defaults to unsigned)
  279.  
  280.     DWORD   Offset;             // Byte offset to value in parameter block
  281.                                 //   Assumes MULTI_SZ and BINARY parameters
  282.                                 //   are LPWSTRs followed by DWORDs for length
  283. } RESUTIL_PROPERTY_ITEM, *PRESUTIL_PROPERTY_ITEM;
  284.  
  285.  
  286. typedef
  287. DWORD
  288. (_stdcall *PSTARTUP_ROUTINE) (
  289.     IN LPCWSTR ResourceType,
  290.     IN DWORD MinVersionSupported,
  291.     IN DWORD MaxVersionSupported,
  292.     IN PSET_RESOURCE_STATUS_ROUTINE SetResourceStatus,
  293.     IN PLOG_EVENT_ROUTINE LogEvent,
  294.     OUT PCLRES_FUNCTION_TABLE *FunctionTable
  295.     );
  296.  
  297. //
  298. // Define layout of shared memory used for tracking Resource Monitor state.
  299. //
  300. typedef enum RESOURCE_MONITOR_STATE {
  301.     RmonInitializing,
  302.     RmonIdle,
  303.     RmonStartingResource,
  304.     RmonInitializingResource,
  305.     RmonOnlineResource,
  306.     RmonOfflineResource,
  307.     RmonShutdownResource,
  308.     RmonDeletingResource,
  309.     RmonIsAlivePoll,
  310.     RmonLooksAlivePoll,
  311.     RmonArbitrateResource,
  312.     RmonReleaseResource,
  313.     RmonResourceControl,
  314.     RmonResourceTypeControl
  315. } RESOURCE_MONITOR_STATE;
  316.  
  317. typedef struct MONITOR_STATE {
  318.     LARGE_INTEGER LastUpdate;
  319.     RESOURCE_MONITOR_STATE State;
  320.     HANDLE ActiveResource;
  321.     BOOL   ResmonStop;
  322. } MONITOR_STATE, *PMONITOR_STATE;
  323.  
  324.  
  325. //
  326. // Resource Utility Routines
  327. //
  328.  
  329. DWORD
  330. WINAPI
  331. ResUtilStartResourceService(
  332.     IN LPCTSTR ServiceName,
  333.     OUT LPHANDLE ServiceHandle
  334.     );
  335.  
  336. DWORD
  337. WINAPI
  338. ResUtilVerifyResourceService(
  339.     IN LPCTSTR ServiceName
  340.     );
  341.  
  342. DWORD
  343. WINAPI
  344. ResUtilStopResourceService(
  345.     IN LPCTSTR ServiceName
  346.     );
  347.  
  348. DWORD
  349. WINAPI
  350. ResUtilVerifyService(
  351.     IN HANDLE ServiceHandle
  352.     );
  353.  
  354. DWORD
  355. WINAPI
  356. ResUtilStopService(
  357.     IN HANDLE ServiceHandle
  358.     );
  359.  
  360. BOOL
  361. WINAPI
  362. ResUtilIsPathValid(
  363.     IN LPCWSTR Path
  364.     );
  365.  
  366. DWORD
  367. WINAPI
  368. ResUtilEnumProperties(
  369.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  370.     OUT LPWSTR OutBuffer,
  371.     IN DWORD OutBufferSize,
  372.     OUT LPDWORD BytesReturned,
  373.     OUT LPDWORD Required
  374.     );
  375.  
  376. DWORD
  377. WINAPI
  378. ResUtilEnumPrivateProperties(
  379.     IN PVOID ClusterKey,
  380.     OUT LPWSTR OutBuffer,
  381.     IN DWORD OutBufferSize,
  382.     OUT LPDWORD BytesReturned,
  383.     OUT LPDWORD Required
  384.     );
  385.  
  386. DWORD
  387. WINAPI
  388. ResUtilGetProperties(
  389.     IN PVOID ClusterKey,
  390.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  391.     OUT PVOID OutBuffer,
  392.     IN DWORD OutBufferSize,
  393.     OUT LPDWORD BytesReturned,
  394.     OUT LPDWORD Required
  395.     );
  396.  
  397. DWORD
  398. WINAPI
  399. ResUtilGetAllProperties(
  400.     IN PVOID ClusterKey,
  401.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  402.     OUT PVOID OutBuffer,
  403.     IN DWORD OutBufferSize,
  404.     OUT LPDWORD BytesReturned,
  405.     OUT LPDWORD Required
  406.     );
  407.  
  408. DWORD
  409. WINAPI
  410. ResUtilGetPrivateProperties(
  411.     IN PVOID ClusterKey,
  412.     OUT PVOID OutBuffer,
  413.     IN DWORD OutBufferSize,
  414.     OUT LPDWORD BytesReturned,
  415.     OUT LPDWORD Required
  416.     );
  417.  
  418. DWORD
  419. WINAPI
  420. ResUtilGetPropertySize(
  421.     IN PVOID ClusterKey,
  422.     IN const PRESUTIL_PROPERTY_ITEM Property,
  423.     IN OUT LPDWORD BufferSize,
  424.     IN OUT LPDWORD ItemCount
  425.     );
  426.  
  427. DWORD
  428. WINAPI
  429. ResUtilGetProperty(
  430.     IN PVOID ClusterKey,
  431.     IN const PRESUTIL_PROPERTY_ITEM Property,
  432.     OUT PVOID * OutBuffer,
  433.     IN OUT LPDWORD OutBufferSize
  434.     );
  435.  
  436. DWORD
  437. WINAPI
  438. ResUtilVerifyPropertyTable(
  439.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  440.     IN PVOID Reserved,
  441.     IN BOOL AllowUnknownProperties,
  442.     IN const PVOID InBuffer,
  443.     IN DWORD InBufferSize,
  444.     OUT OPTIONAL LPBYTE OutParams
  445.     );
  446.  
  447. DWORD
  448. WINAPI
  449. ResUtilSetPropertyTable(
  450.     IN PVOID ClusterKey,
  451.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  452.     IN PVOID Reserved,
  453.     IN BOOL AllowUnknownProperties,
  454.     IN const PVOID InBuffer,
  455.     IN DWORD InBufferSize,
  456.     OUT OPTIONAL LPBYTE OutParams
  457.     );
  458.  
  459. DWORD
  460. WINAPI
  461. ResUtilSetPropertyParameterBlock(
  462.     IN PVOID ClusterKey,
  463.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  464.     IN PVOID Reserved,
  465.     IN const LPBYTE InParams,
  466.     IN const PVOID InBuffer,
  467.     IN DWORD InBufferSize,
  468.     OUT OPTIONAL LPBYTE OutParams
  469.     );
  470.  
  471. DWORD
  472. WINAPI
  473. ResUtilGetPropertiesToParameterBlock(
  474.     IN PVOID ClusterKey,
  475.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  476.     OUT LPBYTE OutParams,
  477.     IN BOOL CheckForRequiredProperties,
  478.     OUT OPTIONAL LPWSTR * NameOfPropInError
  479.     );
  480.  
  481. DWORD
  482. WINAPI
  483. ResUtilPropertyListFromParameterBlock(
  484.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  485.     OUT PVOID * OutBuffer,
  486.     IN OUT LPDWORD OutBufferSize,
  487.     IN const LPBYTE InParams,
  488.     OUT LPDWORD BytesReturned,
  489.     OUT LPDWORD Required
  490.     );
  491.  
  492. DWORD
  493. WINAPI
  494. ResUtilDupParameterBlock(
  495.     OUT LPBYTE OutParams,
  496.     IN const LPBYTE InParams,
  497.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable
  498.     );
  499.  
  500. void
  501. WINAPI
  502. ResUtilFreeParameterBlock(
  503.     IN OUT LPBYTE OutParams,
  504.     IN const LPBYTE InParams,
  505.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable
  506.     );
  507.  
  508. DWORD
  509. WINAPI
  510. ResUtilAddUnknownProperties(
  511.     IN PVOID ClusterKey,
  512.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  513.     IN OUT PVOID OutBuffer,
  514.     IN DWORD OutBufferSize,
  515.     IN OUT LPDWORD BytesReturned,
  516.     IN OUT LPDWORD Required
  517.     );
  518.  
  519. DWORD
  520. WINAPI
  521. ResUtilSetPrivatePropertyList(
  522.     IN PVOID ClusterKey,
  523.     IN const PVOID InBuffer,
  524.     IN DWORD InBufferSize
  525.     );
  526.  
  527. DWORD
  528. WINAPI
  529. ResUtilVerifyPrivatePropertyList(
  530.     IN const PVOID InBuffer,
  531.     IN DWORD InBufferSize
  532.     );
  533.  
  534. DWORD
  535. WINAPI
  536. ResUtilGetBinaryValue(
  537.     IN HKEY ClusterKey,
  538.     IN LPCWSTR ValueName,
  539.     OUT LPBYTE * OutValue,
  540.     OUT DWORD * OutValueSize
  541.     );
  542.  
  543. PWSTR
  544. WINAPI
  545. ResUtilDupString(
  546.     IN LPCWSTR Value
  547.     );
  548.  
  549. LPWSTR
  550. WINAPI
  551. ResUtilGetSzValue(
  552.     IN HKEY ClusterKey,
  553.     IN LPCWSTR ValueName
  554.     );
  555.  
  556. #define ResUtilGetMultiSzValue( ClusterKey, ValueName, OutValue, OutValueSize ) \
  557.     ResUtilGetBinaryValue( ClusterKey, ValueName, (LPBYTE *) OutValue, OutValueSize )
  558.  
  559. DWORD
  560. WINAPI
  561. ResUtilGetDwordValue(
  562.     IN HKEY ClusterKey,
  563.     IN LPCWSTR ValueName,
  564.     OUT LPDWORD OutValue,
  565.     IN DWORD DefaultValue OPTIONAL
  566.     );
  567.  
  568. DWORD
  569. WINAPI
  570. ResUtilSetBinaryVakye(
  571.     IN HKEY ClusterKey,
  572.     IN LPCWSTR ValueName,
  573.     IN const LPBYTE NewValue,
  574.     IN DWORD NewValueSize,
  575.     IN OUT LPBYTE * OutValue,
  576.     IN OUT LPDWORD OutValueSize
  577.     );
  578.  
  579. DWORD
  580. WINAPI
  581. ResUtilSetSzValue(
  582.     IN HKEY ClusterKey,
  583.     IN LPCWSTR ValueName,
  584.     IN LPCWSTR NewValue,
  585.     IN OUT LPWSTR * OutString
  586.     );
  587.  
  588. DWORD
  589. WINAPI
  590. ResUtilSetExpandSzValue(
  591.     IN HKEY ClusterKey,
  592.     IN LPCWSTR ValueName,
  593.     IN LPCWSTR NewValue,
  594.     IN OUT LPWSTR * OutString
  595.     );
  596.  
  597. DWORD
  598. WINAPI
  599. ResUtilSetMultiSzValue(
  600.     IN HKEY ClusterKey,
  601.     IN LPCWSTR ValueName,
  602.     IN LPCWSTR NewValue,
  603.     IN DWORD NewValueSize,
  604.     IN OUT LPWSTR * OutValue,
  605.     IN OUT LPDWORD OutValueSize
  606.     );
  607.  
  608. DWORD
  609. WINAPI
  610. ResUtilSetDwordValue(
  611.     IN HKEY ClusterKey,
  612.     IN LPCWSTR ValueName,
  613.     IN DWORD NewValue,
  614.     IN OUT LPDWORD OutValue
  615.     );
  616.  
  617. DWORD
  618. WINAPI
  619. ResUtilGetBinaryProperty(
  620.     OUT LPBYTE * OutValue,
  621.     OUT LPDWORD OutValueSize,
  622.     IN const PCLUSPROP_BINARY ValueStruct,
  623.     IN const LPBYTE OldValue,
  624.     IN DWORD OldValueSize,
  625.     OUT LPBYTE * PropBuffer,
  626.     OUT LPDWORD PropBufferSize
  627.     );
  628.  
  629. DWORD
  630. WINAPI
  631. ResUtilGetSzProperty(
  632.     OUT LPWSTR * OutValue,
  633.     IN const PCLUSPROP_SZ ValueStruct,
  634.     IN LPCWSTR OldValue,
  635.     OUT LPBYTE * PropBuffer,
  636.     OUT LPDWORD PropBufferSize
  637.     );
  638.  
  639. DWORD
  640. WINAPI
  641. ResUtilGetMultiSzProperty(
  642.     OUT LPWSTR * OutValue,
  643.     OUT LPDWORD OutValueSize,
  644.     IN const PCLUSPROP_SZ ValueStruct,
  645.     IN LPCWSTR OldValue,
  646.     IN DWORD OldValueSize,
  647.     OUT LPBYTE * PropBuffer,
  648.     OUT LPDWORD PropBufferSize
  649.     );
  650.  
  651. DWORD
  652. WINAPI
  653. ResUtilGetDwordProperty(
  654.     OUT LPDWORD OutValue,
  655.     IN const PCLUSPROP_DWORD ValueStruct,
  656.     IN DWORD OldValue,
  657.     IN DWORD Minimum,
  658.     IN DWORD Maximum,
  659.     OUT LPBYTE * PropBuffer,
  660.     OUT LPDWORD PropBufferSize
  661.     );
  662.  
  663. LPVOID
  664. WINAPI
  665. ResUtilGetEnvironmentWithNetName(
  666.     IN HRESOURCE hResource
  667.     );
  668.  
  669. DWORD
  670. WINAPI
  671. ResUtilFindSzProperty(
  672.     IN const PVOID Buffer,
  673.     IN DWORD BufferSize,
  674.     IN LPCWSTR PropName,
  675.     OUT LPWSTR * FoundString
  676.     );
  677.  
  678. DWORD
  679. WINAPI
  680. ResUtilFindDwordProperty(
  681.     IN const PVOID Buffer,
  682.     IN DWORD BufferSize,
  683.     IN LPCWSTR PropName,
  684.     OUT LPDWORD FoundDword
  685.     );
  686.  
  687. //
  688. // Common worker thread routines that allow a pending operation to
  689. // be cancelled with CORRECT synchronization.
  690. //
  691. typedef struct CLUS_WORKER {
  692.     HANDLE hThread;
  693.     BOOL Terminate;
  694. } CLUS_WORKER, *PCLUS_WORKER;
  695.  
  696. typedef DWORD (WINAPI *PWORKER_START_ROUTINE)(
  697.     PCLUS_WORKER pWorker,
  698.     LPVOID lpThreadParameter
  699.     );
  700.  
  701. DWORD
  702. WINAPI
  703. ClusWorkerCreate(
  704.     OUT PCLUS_WORKER Worker,
  705.     IN PWORKER_START_ROUTINE lpStartAddress,
  706.     IN PVOID lpParameter
  707.     );
  708.  
  709. BOOL
  710. WINAPI
  711. ClusWorkerCheckTerminate(
  712.     IN PCLUS_WORKER Worker
  713.     );
  714.  
  715. VOID
  716. WINAPI
  717. ClusWorkerTerminate(
  718.     IN PCLUS_WORKER Worker
  719.     );
  720.  
  721.  
  722. //Define enumerate resource callback function. This gets called for each resource enumerated
  723. //by ResUtilEnumResources
  724. typedef   DWORD (*LPRESOURCE_CALLBACK)( HRESOURCE, HRESOURCE , PVOID );
  725.  
  726.  
  727. BOOL
  728. WINAPI
  729. ResUtilResourcesEqual(
  730.     IN HRESOURCE    hSelf,
  731.     IN HRESOURCE    hResource
  732.     );
  733.  
  734.  
  735. BOOL
  736. WINAPI
  737. ResUtilResourceTypesEqual(
  738.     IN LPCWSTR      lpszResourceTypeName,
  739.     IN HRESOURCE    hResource
  740.     );
  741.  
  742. DWORD
  743. WINAPI
  744. ResUtilEnumResources(
  745.     IN HRESOURCE            hSelf,
  746.     IN LPCWSTR              lpszResTypeName,
  747.     IN LPRESOURCE_CALLBACK  pResCallBack,
  748.     IN PVOID                pParameter
  749.     );
  750.  
  751. HRESOURCE
  752. WINAPI
  753. ResUtilGetResourceDependency(
  754.     IN HANDLE       hSelf,
  755.     IN LPCWSTR      lpszResourceType
  756.     );
  757.  
  758. HRESOURCE
  759. WINAPI
  760. ResUtilGetResourceNameDependency(
  761.     IN LPCWSTR      lpszResourceName,
  762.     IN LPCWSTR      lpszResourceType
  763.     );
  764.  
  765.  
  766. #ifdef __cplusplus
  767. }
  768. #endif
  769.  
  770.  
  771. #endif // ifdef _RESAPI_DEFINES_
  772.